Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux, LPC1343 Не работает прошивка с помощью встроенного USB загрузчика
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
brunql
Суть проблемы: не работает прошивка 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.html

sudo mdel -i /dev/sdc ::/firmware.bin
sudo mcopy -i /dev/sdc firmware.bin ::/
sudo umount /dev/sdc
segment
Да вроде правильно заливаешь. Сначала fromelf делам бинарник, а потом прописываем контрольную сумму lpcrc или любой другой, их несколько, но работают одинаково. Так что работать должно.

Настройки проекта для этого камня проверь
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.