Суть проблемы: не работает прошивка LPC1343 по USB в Linux
Есть плата LPCXpresso, допаяны miniUSB, LM1117(3.3V), кнопки сброса контоллера, сброса в загрузчик, схема софтового подключения к USB шине (USB_CONNECT) и светодиод сигнализирующий о подключении к USB шине (сброс и USB как здесь:
http://www.microbuilder.eu/projects/LPC134...nceDesign.aspx).
Через UART прошивается без проблем.
Попробую прошить через встроенный USB загрузчик:
Скомпилил пример из поставки Keil (C:\Keil\ARM\Boards\Keil\MCB1000\USBMem). Получил .\Obj\Memory.axf. Бинарник делаю так:
Код
fromelf --bin ".\Obj\Memory.axf" --output ".\Obj\Memory.bin"
Обновление CRC (нужно ли?):
Код
lpcrc.exe Memory.bin
Подключаю девайс к USB. Пин USB-VBUS подтянут к VCC(4,5V).
Сбрасываю девайс в бутлоадер (сажаю кнопкой одновременно через диоды пины RESET и ISP на GND).
Определяется 'CRP DISABLD';
dmesg:
Код
[29815.920197] usb 3-3: new full speed USB device using ohci_hcd and address 17
[29816.168944] usb 3-3: configuration #1 chosen from 1 choice
[29816.174430] scsi19 : SCSI emulation for USB Mass Storage devices
[29816.175288] usb-storage: device found at 17
[29816.175297] usb-storage: waiting for device to settle before scanning
[29821.170615] usb-storage: device scan complete
[29821.176520] scsi 19:0:0:0: Direct-Access NXP LPC134X IFLASH 1.0 PQ: 0 ANSI: 0 CCS
[29821.178515] sd 19:0:0:0: Attached scsi generic sg3 type 0
[29821.193999] sd 19:0:0:0: [sdc] 68 512-byte logical blocks: (34.8 kB/34.0 KiB)
[29821.198436] sd 19:0:0:0: [sdc] Write Protect is off
[29821.198443] sd 19:0:0:0: [sdc] Mode Sense: 03 00 00 00
[29821.198446] sd 19:0:0:0: [sdc] Assuming drive cache: write through
[29821.228466] sd 19:0:0:0: [sdc] Assuming drive cache: write through
[29821.228485] sdc:
[29821.269754] sd 19:0:0:0: [sdc] Assuming drive cache: write through
[29821.269762] sd 19:0:0:0: [sdc] Attached SCSI removable disk
Удаляю прошивку, которая была, копирую новую и отключаю девайс:
Код
rm "/media/CRP DISABLD/firmware.bin"
cp Memory.bin "/media/CRP DISABLD/"
umount "/media/CRP DISABLD/"
Сбрасываю контоллер (RESET на GND кнопкой). Контроллер молчит, хотя должен подключиться к USB. Из чего делаю вывод что прошивка либо криво прошилась, либо совсем не прошилась.
Сбрасываю девайс в бутлоадер (RESET и ISP на GND). Копирую то, что записалось:
Код
cp "/media/CRP DISABLD/firmware.bin" firmware_device.bin
Смотрю в hexedit на firmware.bin и на firmware_device.bin, начала совпадают (чисто визуально), в тексте firmware_device.bin виднеется кусок файла README.TXT, который должен лежать на девайсе (mass storage class):
Код
.........................This is
a USB Memory Device demonstratio
n for..the Keil MCB1000 Board wi
th a NXP LPC1343................
Остатки файла firmware_device.bin забиты 0xFF. По мне так все вроде логично, но почемуто не работает. Ну да ладно, прошиваю девайс через UART, чтобы сравнить рабочую версию прошивки с не рабочей, ребутю девайс в USB загрузчик, копирую прошивку:
Код
cp "/media/CRP DISABLD/firmware.bin firmware_device_work.bin"
Сравниваю MD5 суммы, не совпадают, открываю файлы firmware_device.bin и firmware_device_work.bin в hexedit, сравниваю визуально: первые 1024 байта совпадают (до адреса 0x400), далее некий сдвиг, то что должно быть лежать по адресу 0x0C00 лежит 0x1000, т.е. после 0x400 идут 2kB рабочей прошивки, а у нерабочей 3kB непонятно чего, далее все одинаково.
0x2BF4 - адрес последнего байта рабочей прошивки (залитой по UART), далее все 0xFF
0x3000 - адрес последнего байта НЕ рабочей прошивки (залитой по USB), далее все 0xFF
Как правильно заливать прошивку в LPC1343 с помощью встроенного USB загрузчика в linux?
В XP прошивается без проблем.
Thank you for your time.
UPDATE:
Гугл помассировал...
Такая же проблема:
http://www.spinics.net/lists/linux-usb/msg34004.htmlРешение проблемы:
http://www.spinics.net/lists/linux-usb/msg34107.htmlsudo mdel -i /dev/sdc ::/firmware.bin
sudo mcopy -i /dev/sdc firmware.bin ::/
sudo umount /dev/sdc