реклама на сайте
подробности

 
 
> LPC1820, проблема с USB Mass Storage, Часть плат не работает при размере EP = 512 байт
Harvester
сообщение Aug 24 2016, 16:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Добрый день.
Имеется устройство на LPC1820 + eMMC.
Устройство представляет собой USB Mass Storage Device ("флешка"), реализованное с использованием фирменной библиотеки LPCUSBlib (чисто программный вариант, без использования функций USB ROM).
Проблема в следующем: часть плат некорректно работают при размере конечных точек больше 128 байт. Некорректность заключается в том, что устройства, судя по снифферу, в какой-то момент перестают отвечать на USB-запросы чтения/записи. Причем этот момент может отличаться для разных устройств, но для каждого конкретного устройства он фиксирован (т.е. одни устройства "виснут" на первой же команде чтения, другие обрабатывают команду чтения нормально, но "виснут" при записи).

Программист, написавший программу, утверждал, что это недокументированный баг в контроллере, который компания NXP не хочет признавать. И указывал на строки, имеющиеся в исходниках использованной им версии библиотеки LPCUSBLib:
Код
/* Max In/Out Packet Size */
#define MSC_FS_MAX_PACKET  128
#define MSC_HS_MAX_PACKET  128 /* < 256 work */

У меня стоит задача реализовать работу со штатным размером EP (512 байт). Я взял последнюю версию библиотеки - проблема не ушла.
Понятно, что теперь мне только остается детально исследовать работу библиотеки и модуля USB - может это все-таки программная бяка?
Но вдруг кто-нибудь сталкивался с подобной ситуацией и решил ее? laughing.gif
Спасибо.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kabdim
сообщение Aug 25 2016, 07:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Скорее косяки в библиотеках NXP - они ужасно кривые. Кстати LPCUSBlib уже давным давно deprecated. А стек засунут в USBROM и LPCOpen умеет использовать только его.

Цитата(Harvester @ Aug 24 2016, 20:54) *
А как это сделать? Особенно со стороны ПК.

Берем генертор псевдослучайных чисел. Сид в программе и проишвке один. Итоговая последовательность там и тут должна совпадать. В контроллере что-то делаем с полученными данными, например xor и отправляем назад. В программе проверяем что посчитанное и полученное одно и тоже.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Aug 25 2016, 07:39
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(Kabdim @ Aug 25 2016, 10:09) *
Скорее косяки в библиотеках NXP - они ужасно кривые. Кстати LPCUSBlib уже давным давно deprecated. А стек засунут в USBROM и LPCOpen умеет использовать только его.

Мне кажется, Вы не совсем правы. В библиотеке есть выбор - использовать ROM или программный вариант.
Цитата(Kabdim @ Aug 25 2016, 10:09) *
Берем генертор псевдослучайных чисел. Сид в программе и проишвке один. Итоговая последовательность там и тут должна совпадать. В контроллере что-то делаем с полученными данными, например xor и отправляем назад. В программе проверяем что посчитанное и полученное одно и тоже.

Ну, методов проверки можно много придумать, весь вопрос - как это сделать? Т.е. как работать на ПК с конечными точками USB без использования стандартных классов.

Цитата(GetSmart @ Aug 25 2016, 09:49) *
Контроллер USB в LPC18xx скорее всего похож на LPC43xx, но не похож на LPC17xx.

Именно. Поэтому мне интересно - делал ли кто-нибудь Mass Storage с EP=512байт именно на LPC18xx.

Одно дело, если бы программа просто не работала. Но она же не работает только на части плат!
Беру за основу пример от NXP для отладочной платы с LPC1830 и SD-картой - там работает.
Переписал под отладку для своего устройства - работает.
Зашил в готовое изделие - работает.
Отдал на тестирование, там прошили 10 устройств - 5 работает, 5 нет. Причем не работают по-разному! wacko.gif

Сообщение отредактировал Harvester - Aug 25 2016, 07:25


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 25 2016, 09:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Harvester @ Aug 25 2016, 13:39) *
Ну, методов проверки можно много придумать, весь вопрос - как это сделать? Т.е. как работать на ПК с конечными точками USB без использования стандартных классов.

Есть драйвера (под винду) позволяющие работать с эндпоинтами с уровня приложения. Я использую один из таких: CypressUSB (из состава "Cypress Suite USB"). Есть ещё libusb.
Как Вам уже объяснили: делаете inf-файл с нужными VID/PID для этого драйвера и дальше работаете через него (т.е. - через его библиотеку).
Даже можно и не писать ничего со стороны ПК: в составе "Cypress Suite USB" есть утилитки, позволяющие передавать кадры произвольных данных через нужные эндпоинты. Либо в окошке их набираете либо из файла.

Цитата(Harvester @ Aug 25 2016, 13:39) *
Одно дело, если бы программа просто не работала. Но она же не работает только на части плат!
Беру за основу пример от NXP для отладочной платы с LPC1830 и SD-картой - там работает.

Всё-таки: почему Вы подозреваете именно USB, а не работу с eMMC?

Цитата(Harvester @ Aug 24 2016, 23:54) *
А Вы точно использовали bulk-передачи с размером конечной точки 512 байт? laughing.gif

Цитата(GetSmart @ Aug 25 2016, 12:49) *
Контроллер USB в LPC18xx скорее всего похож на LPC43xx, но не похож на LPC17xx.

В LPC43xx именно bulk-передачи не использовал. Только control-передачи. Но с размером кадра до 2048 байт (разные размеры пробовал).
Go to the top of the page
 
+Quote Post
Harvester
сообщение Aug 25 2016, 09:33
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(jcxz @ Aug 25 2016, 12:09) *
Есть драйвера (под винду) позволяющие работать с эндпоинтами с уровня приложения. Я использую один из таких: CypressUSB (из состава "Cypress Suite USB"). Есть ещё libusb.
Как Вам уже объяснили: делаете inf-файл с нужными VID/PID для этого драйвера и дальше работаете через него (т.е. - через его библиотеку).
Даже можно и не писать ничего со стороны ПК: в составе "Cypress Suite USB" есть утилитки, позволяющие передавать кадры произвольных данных через нужные эндпоинты. Либо в окошке их набираете либо из файла.

Спасибо
Цитата(jcxz @ Aug 25 2016, 12:09) *
Всё-таки: почему Вы подозреваете именно USB, а не работу с eMMC?

1. Проблема исчезает при задании в дескрипторе размера EP=128 байт. Эта величина влияет исключительно на работу модуля USB.
2. Я сделал отладочный вывод в callback-функции обработки SCSI-команд, которая вызывается ядром USB. И в проблемном месте вывод информации не происходит. Т.е. до обработки команды (чтения/записи eMMC) дело даже не доходит.



Цитата(jcxz @ Aug 25 2016, 12:30) *
Если в OTP JTAG не запрещён и если firmware сразу после старта не запрещает JTAG через спец. регистры периферии - получится.
У меня сейчас на LPC4370 именно так и работает. JTAG подключается без проблем, хоть есть прошивка в SPI-флеши, хоть код BootROM работает - без разницы.

Спасибо, буду изучать.
Только что посмотрел - программируются только BOOT-биты. Так что надежда есть sm.gif

Сообщение отредактировал Harvester - Aug 25 2016, 09:57


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Harvester   LPC1820, проблема с USB Mass Storage   Aug 24 2016, 16:15
- - jcxz   Цитата(Harvester @ Aug 24 2016, 22:15) Пр...   Aug 24 2016, 17:23
|- - Harvester   Цитата(jcxz @ Aug 24 2016, 20:23) Баг опр...   Aug 24 2016, 17:54
- - GetSmart   Можно сделать хост на другом микроконтроллере (для...   Aug 25 2016, 06:49
|- - Kabdim   Цитата(Harvester @ Aug 25 2016, 10:39) Мн...   Aug 25 2016, 08:12
||- - Harvester   Цитата(Kabdim @ Aug 25 2016, 11:12) Не ук...   Aug 25 2016, 09:17
||- - jcxz   Цитата(Harvester @ Aug 25 2016, 15:17) 2....   Aug 25 2016, 09:30
||- - Kabdim   Цитата(Harvester @ Aug 25 2016, 12:17) Фа...   Aug 25 2016, 09:54
||- - Harvester   Цитата(Kabdim @ Aug 25 2016, 12:54) Вы пр...   Aug 25 2016, 10:01
||- - Kabdim   Цитата(Harvester @ Aug 25 2016, 13:01) Ну...   Aug 25 2016, 10:19
||- - Harvester   Цитата(Kabdim @ Aug 25 2016, 13:19) Следу...   Aug 25 2016, 10:28
- - GetSmart   Заодо сравните версию ботлоадера у рабочих и глючн...   Aug 25 2016, 14:40
|- - jcxz   Цитата(GetSmart @ Aug 25 2016, 20:40) Я в...   Aug 26 2016, 06:19
|- - Harvester   Цитата(GetSmart @ Aug 25 2016, 17:40) Воо...   Aug 26 2016, 09:46
- - Alechek   Видимо, все-таки дело в частоте USB.. Точнее, в ее...   Aug 26 2016, 10:37
- - jcxz   Цитата(Alechek @ Aug 26 2016, 16:37) Види...   Aug 26 2016, 11:31
- - Harvester   Цитата(jcxz @ Aug 26 2016, 14:31) Тогда п...   Aug 26 2016, 12:07


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016