Настоящее радиолюбительское

Сегодня речь пойдет о том, как писать свои (вах!) программы для быдлодевайса, более известного, как вогоплеер. Внимательные читатели моего блога помнят, что я обещал продолжить ковырять его в феврале, так что пора бы и написать что-то осмысленное.

Итак, я съездил на Митино, купил MAX3232, и даже два раза сделал небольшую платку-адаптер. Стандартная схема включения микросхемы MAX232 и ей подобных хорошо известна, и останавливаться на этом я не буду.

Немножко больше я напишу про местонахождение выводов UART на воговской плате. Если Tx хорошо виден и находится на контактной площадке между процессором и флешкой, то Rx нашли не все и не сразу. Как оказалось, эта нога UART-а объединена с левым контактом кнопки K1. Но это еще не все! Для нормальной работы последовательного порта надо еще и демонтировать конденсатор над кнопкой K3. Про это все подробно написано на гуглосайте VoGeeky в специальном разделе, посвященном UART.

Запаяв все соединения между платой плеера и адаптером, и вдоволь наругавшись на говенный спиртоканифольный флюс (все остальное, как назло, закончилось), я приступил к более приятным занятиям. Да, сидеть за компьютером и с умным видом пялиться в экран гораздо лучше, чем согнувшись в три погибели с лупой пытаться припаять провод в полтора квадрата к малюсенькой площадке сорокаваттным паяльником :)

Первым делом надо собрать U-Boot и примеры для него под нашу плату. К сожалению, редакция журнала Vogue не озаботилась тем, чтобы выложить где-нибудь конфиги U-Boot для этой платы, поэтому приходится использовать версию для китайской демо-платы Volans. Итак, используя настроенный toolchain, выполняем в директории с исходниками U-Boot (а где его взять, все уже знают) команды

make volans_nand_config
make

Пока U-Boot собирается, держим пальцы крестиком или пьем кофе – в общем, развлекаемся, как можем. По окончании “сборки” получаем все в той же директории файл u-boot-nand.bin, который надо “прошить” в устройство.

Для прошивки можно воспользоваться швейной машинкой Зингера, а можно – прошивальщиком USBboot китайского производства. И что характерно, прошивальщик работает только под Windows, да еще и 32-битным. Кто там советовал поставить “для разработки” Linux? Берем прошивальщик все на том же VoGeeky, в разделе “Прошивка ядра”.

Теперь – физкультминутка! Одной рукой берем плату плеера и зажимаем на ней кнопку K1, второй рукой (помогая себе ногами и другими конечностями) подключаем USB-кабель к плееру. Получилось? Windows обнаружила неизвестное устройство с названием типа JZ4750 Boot Device? Молодцы!

После небольшой разминки устанавливаем драйвер. Если вы – пресловутый “опытный пользователь” Windows, то укажите установщику драйверов путь к файлу Usb_Boot_Driver.inf из комплекта USBboot. Если вы не понимаете, что написано в предыдущем предложении – зачем вы досюда дочитали? Дальнейшее можно смело прокручивать :)

Теперь, когда установлен драйвер устройства, можно смело запускать Test_jz4740_usb.exe, подкинув к нему в папку u-boot-nand.bin. Откроется окошко для ввода команд, в котором ничтоже сумнящеся вводим следующее:

boot 0
nerase 0 4096 0 0
fconfig USBBoot_nand.cfg 0
nprog 0 u-boot-nand.bin 0 0 -n

После успешного завершения прошивки подключаем вогоплеер к COM-порту, запускаем терминальную программу (лучше Hyper Terminal, настройки порта – 57600 бод, 8 бит данных, 1 стоповый бит, без проверки четности и управления потоком) и “перезагружаем” его передергиванием питания.

Если все настроено правильно, то в терминал вывалится вот такая “простыня” текста:

NAND Secondary Program Loader
Starting U-Boot ...
U-Boot 1.1.6 (Feb 1 2011 - 22:13:18)
Board: Ingenic VOLANS (CPU Speed 336 MHz)
DRAM: 32 MB
Flash: 0 kB
NAND:1024 MiB
*** Warning - bad CRC or NAND, using default environment
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x400000, size 0x300000
3145728 bytes read: OK
## Booting image at 80600000 ...
Bad Magic Number
VOLANS #

Все заканчивается приглашением к вводу. U-Boot – очень мощная программа, фактически – небольшая однозадачная операционная система, типа DOS или CP/M. Список команд можно посмотреть, набрав help, он достаточно велик, но сейчас нас больше всего интересует запуск “самописного” софта. При компиляции U-Boot автоматически “собрался” небольшой пример. Для его загрузки набираем команду loads, а затем загружаем текстовый файл hello_world.srec из поддиректории examples, находящейся там, где мы собирали U-Boot.

VOLANS # loads
## Ready for S-Record download ...
S705802000005A012080B00120804D03208080012080E6
## First Load Addr = 0x80200000
## Last Load Addr = 0x802003A7
## Total Size = 0x000003A8 = 936 Bytes
## Start Addr = 0x80200000
VOLANS #

Пользователи PuTTY, видимо, оказались в пролете. Самописный софт для U-Boot может использовать небольшую часть стандартной библиотеки C, реализованную в U-Boot. Этого хватает, например, для вполне осмысленного Hello, World. Запускаем его командой go 80200000.

VOLANS # go 80200000 Hello Ingenic World from shura@luberetsky.ru
## Starting application at 0x80200000 ...
Example expects ABI version 3
Actual U-Boot ABI version 3
Hello World
argc = 6
argv[0] = "80200000"
argv[1] = "Hello"
argv[2] = "Ingenic"
argv[3] = "World"
argv[4] = "from"
argv[5] = "shura@luberetsky.ru"
argv[6] = ""
Hit any key to exit ...
## Application terminated, rc = 0x0
VOLANS #

Думаю, теперь не составит труда написать что-то вроде 99 bottles of beer, ну а я более плотно займусь Minix-ом. Во всяком случае, теперь у девайса есть boot monitor в лице U-Boot’а и нормальная консоль в виде Hyper Terminal :) Что еще надо для запуска Unix-образной операционки?

Комментарии отключены.