В этой теме я предлагаю обсуждать использование НЕ ПО НАЗНАЧЕНИЮ серийно выпускаемой
дешевой (в моем городе в любом хозмаге по 12$) приставки с серийной прошивкой (из коробки)
на чипе MSD7T01 обладающей следующими характеристиками
Vendor - Поддельный OPENBOX HD DVB-T2 RECEIVER
MainBord - MSD7T01-T2-31 A1 (MSD7T01+PN8368+MXL608+R534)
CPU - mips34kf (CPU Speed 576 MHz)
RAM - DDR2 64Мб
SPI Flash - 4Мбайта
RS232 - для связи с внешним миром.
HDMI - Для подключения экрана (из бута работает не везде).
Video - Дублирует HDMI
USB Host - Уверено работает с Fat32, на форумах писали что тормозит с Fat16
Если припаять к пятакам RS232 на плате (если к компу, то USB-RS232 на PL2303 и подобных)
скорость - 115200; биты данных - 8; стоп биты - 1; чётность - нет; управление потоком - нет
то при старте, войдя в U-Boot (отправив любой символ на приглашение войти hello MDrv_FP_Init8||||||||||||||||||||||||||||||||||||||||||)
можно управлять устройством. Перечень команд можно посмотреть по команде help
а справку по каждой команде посмотреть введя help <имя команды>
Ниже приведу несколько примеров использования:
Пример использования N0 - Слив прошивки с устройства
- на тот случай если при экспериментах оригинал пострадает
- лицензия (если китайцы ее купили) блока декодирования звука каждого бут блока привязана к номеру процессора
о том что привязано можно посмотреть командой sysinfo
в моей приставке китайцы ничего не покупали, так что проверка вешается (зависает консоль) с текстом !!wrong ra!!
1) инит юсб
2) чтение корневого каталога USB флэхи
3) определение размеров SPI флэшки Total Size:0x00400000
4) чтение из SPI флэшки (по адресу 0x0, размером со всю флэшку 0x400000) в ОЗУ по адресу 0x80000000
5) Запись из ОЗУ (по адресу 0x80000000, размером со всю флэшку 0x400000) в файл XXXX.bin
6) отмонтирование USB
usb reset
fatls usb 0:1
spi_gfo
spi_rdc 0x80000000 0x0 0x400000
fatwrite usb 0:1 0x80000000 XXXX.bin 0x400000
usb stop
Пример использования N1 - Вывод текста на экран
1) Инициализация подложки (масштабируется/корявится на весь экран, видимая область около 1856х1058)
на разрешение 1920х1080
2) рисование квадрата цветом 0xF1F2F3 на всю видимую область (очистка экрана)
3) заливка точки красным цветом (0xFF0000) по координатам 400,400
точки рисуются на подложке но почему-то не рефрешат экран, экран рефрешется при рисовании квадрата
4) рисование квадрата зеленым цветом (0x00FF00) по координатам 300,300 размером 10,10
5) нарисовать фиолетовый прогресбар с 35%
6) написать синим цветом (0x0000FF) слово Privet по координатам 500,500
если 0 - ориентация как указана, а если 1 - то надпись центруется
формат нащупал методом тыка, с хэлпом не совпадает
7) полностью отключить видео выход
osd_create 1920 1080
draw_rect 1 1 1920 1080 F1F2F3
draw_pixel 400 400 FF0000
draw_rect 300 300 10 10 00FF00
draw_progress 600 600 FF00FF 35
draw_string 500 500 0000FF 0 Privet
osd_destroy
PS1) Теоретически набор команд можно запихнуть в файл скрипта, набрать команды просто в строчку,
разделение между командами два символа "; ", окончания команд маркируется несколькими 0x00,
положить файл на USB флэшку и дать команду выполнения скрипта с флэшки... но сам я пока это не проверял...
PS2) Если размер скрипта не так большой, от в SPI флэшке есть два пустых куска
0x00336200 - 0x0033FFFF размером с 0x00 9D FF
0x0037C000 - 0x0038FFFF размером с 0x01 3F FF
А если выкинуть Lzma архив от основной прошивки (если не планируется воспроизведение видео)
0x00050000 - 0x0033FFFF = Lzma архив c YAFFS filesystem от linux размером с 0x2E FF FF
то места достаточно, что бы не использовать USB флэшек вовсе, а для хранения скриптов (рисующих интерфейс пользователя)
обойтись встроенной SPI флэшкой.
Недостатки работы с графикой
1) Размер шрифта постоянен, хотите крупнее выбираеете меньшие размеры подложки, хотите мелче выбираете большие размеры
2) При подложке 1920х1080 часть подложки рисуется за границами видимости масштабируемой до разрешения видео выхода
т.е. картинка уходит в лево на 53 пикселя, уходит в право на 11, уходит в верх на 21, низ по кромке видимой области
3) U-Boot умеет показывать jpg картинки, но команд на их вывод в этой верии нету (в других видел draw_jpg)
4) нет команды копирования примитива из ОЗУ на подложку, было бы очень удобно собрать интерфейс из клипарта
а не рисовать его попиксельно (хотя бы RAW клипарта, про jpg пока и не мечтаю).
Пример использования N2 - работа с USB
1) инит юсб
2) чтение корневого каталога флэхи
3) Чтение из файла File1.txt в ОЗУ (по адресу 0x80000000)
4) Запись из ОЗУ (по адресу 0x80000000, размером 0x1000) в файл File2.txt
5) отмонтирование USB
xx) Содержимое ОЗУ можно читать-писать командами с RS232
usb reset
fatls usb 0:1
fatload usb 0:1 0x80000000 File1.txt
fatwrite usb 0:1 0x8000000 File1.txt 0x1000
usb stop
Недостатки работы с флэшкой
1) Не все 64мб ОЗУ под приложение пользователя. ОЗУ используется и для служебных целей U-Boot
Есть вероятность, что верхние адреса кудато мапятся или читаются младшие по кругу.
считать в файл можно и 64 мегабайта (пробовал и 128), но даже в 64 мегабайтах один и тот
же кусок повторяется раза 3, плюс три раза повторяется сохраненная U-Boot последняя введенная команда.
2) Вся работа с файлами через ОЗУ. Соответственно и размер файлов для записи им ограничен. Читать вроде можно кусками.
Имена файлов не более 8 символов.
3) нет команд форматирования флэшки и удаления файлов.
Общие недостатки.
1) чип MSD7T01 очень сильно греется, нужен вентилятор
2) исходного кода к этой системе НЕТ, но есть аналог
https://github.com/Benjamin-Dobell/kogan-tv-gpl3) U-Boot в прошивке чем то пожат и распаковывается в ОЗУ вне области доступа с команд чтения ОЗУ при старте
из чего он сделан удалось частично посмотреть = при распаковке гадит кусками в основном ОЗУ, туда же распаковывает jpg файл заставки.
4) Примерно то же можно получить использую плату на АРМ типа Orange, но
- Orange в нашей местности только под заказ,
- коробки в комплекте к Orange нет, а тут металлический корпус, в котором сбоку много места под свои довесы
- Orangeа потребляет больше энергии
- готового софта к Orange нет.
- Orange долго грузится и потом долго шатдаунится, а с этой платой готовность к работе менее 2х секунд.
- ИЗ коробки тремя командами по RS232 на экран текст используя Orange не вывести.
Для чего я это выложил?
1) поделится опытом... несмотря на фичи (глюки) систему вполне можно использовать в качестве
контроллера монитора прямо из коробки - ничего не правя в прошивке.
Скорость вывода и красивости, с прошивкой из коробки конечно на минимуме, но текст она показывает...
2) делиться считанными файлами, искать менее глюкавый бут блок и U-Boot...
3) Для поиска единомышленников. Разобраться чем менять стартовую картинку на свою
(она пожата вместе с U-Boot и загружается загрузчиком), а если копать глубже,
то если разобраться чем пожат U-Boot, и дописать на асме вместо неиспользуемых команд
- вывод jpg (как писал выше, вывод jpg картинок на экран есть и работает, но с 232 не управляется)
- вывод из ОЗУ примитивов клипарта
как писал выше, девайс умеет выполнять файл скрипта (содержащего команды) САМ
и с МК надо просто запустить скрипт, который отрисует интерфейс пользователя, а в нужных местах самим вывести циферки.