|
USB не определяется компьютером, ATSAMS70N20 mass storage |
|
|
|
Nov 30 2016, 12:51
|

Профессионал
    
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565

|
Пытаюсь запустить пример mass storage на собственной плате с ATSAMS70N20 BGA100. Микроконтроллер поддерживает USB HS/FS. Внешний резонатор 12МГц, частота от USBpll. Ядро 300МГц. Питание 3.3В. При подключении к компьютеру приходит suspend, resume, suspend и отлуп от Windows. Видно, что приходит сброс управляющего канала и SOFы. Со стороны контроллера это выглядит так: CODE udd_attach - Full speed - udd_ctrl_interrupt - нет прерывания suspend
- Full speed - udd_ctrl_interrupt - нет прерывания resume
- High speed - udd_ctrl_interrupt - нет прерывания - reset ctrl ep0 пропуск нескольких SOF
- High speed - udd_ctrl_interrupt - нет прерывания - reset ctrl ep0 пропуск нескольких SOF
- High speed - udd_ctrl_interrupt - нет прерывания - reset ctrl ep0 пропуск нескольких SOF
- High speed - udd_ctrl_interrupt - нет прерывания - reset ctrl ep0 пропуск нескольких SOF
- Full speed - udd_ctrl_interrupt - нет прерывания suspend
Насколько я понимаю, поскольку ниразу небыло прерывания ep0, то контроллер не сообщил компьютеру ни VID, ни PID, ни BULK. Т.е. надо искать ошибку не в описаниях mass storage и BULK, а в обработчике прерываний USB? В режиме Full speed - всё также, только вместо High speed - Full speed Причём на SAMS4 - всё работало, но у SAMS70 - другой драйвер из-за HS. Подскажите в каком направлении копать.
|
|
|
|
|
 |
Ответов
|
Dec 13 2016, 08:55
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 2-11-15
Пользователь №: 89 142

|
Я бы посоветовал посмотреть готовый пример из конфигуратора Atmel Start да и потыкаться с ним вообще.     VDDUTMII Decoupling capacitor (100 nF). Powers the USB transceiver interface. Must be connected to VDDIO. For USB operations, VDDUTMII and VDDIO voltage ranges must be from 3.0V to 3.6V. Must always be connected even if the USB is not used. Decoupling/filtering capacitors must be added to improve start-up stability and reduce source voltage drop. Supply ripple must not exceed 20 mVrms for 10 kHz to 10 MHz range.
Сообщение отредактировал maxx2 - Dec 13 2016, 09:16
|
|
|
|
|
Dec 13 2016, 13:46
|

Профессионал
    
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565

|
Цитата(maxx2 @ Dec 13 2016, 11:55)  Я бы посоветовал посмотреть готовый пример из конфигуратора Atmel Start да и потыкаться с ним вообще. !!! С П А С И Б О !!! Не знал о существовании Atmel Start. Залил пример MSC от E70 в S70, без каких либо исправлений - определился наконец и даже отформатировался. Примеры из ASF - CDC, MSC, USBcore - почему-то не работали. Переносил куски из SoftPack1.5 - не помогало. Работает как с точным кварцем, так и с резонатором. Значит камушек живой - будем копать потихоньку, что нетак было. Спасибо всем откликнувшимся! PS: у меня реально завал был - думал придётся другой камень ставить в серию. PPS: Скорость записи в примере FS:1025кбайт/с HS:8800кбайт/с
|
|
|
|
|
Jan 18 2017, 14:37
|

Профессионал
    
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565

|
Два месяца, несколько подходов с разных сторон в коде, замена BGA контроллера, замена кварца, покупка кита на v71. И.. я таки нашел проблему: не работают примеры USB из ASF332, а ещё в ASF331 они рабочие Всё дело в файле compiler.h там какой-то чудак улучшил clz(u) и в итоге в USB всё неправильно настраивалось... Код //#define clz(u) ((u) ? __builtin_ctz(u) : 32) //BAD from 332 #define clz(u) __builtin_clz(u) //Good from 331 После замены этой строки, примеры USB из ASF332 тоже заработали!
|
|
|
|
|
Mar 28 2017, 15:06
|

Профессионал
    
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565

|
Цитата(_4afc_ @ Jan 18 2017, 18:37)  не работают примеры USB из ASF332, а ещё в ASF331 они рабочие Всё дело в файле compiler.h там какой-то чудак улучшил clz(u) и в итоге в USB всё неправильно настраивалось... Код //#define clz(u) ((u) ? __builtin_ctz(u) : 32) //BAD from 332 #define clz(u) __builtin_clz(u) //Good from 331 После замены этой строки, примеры USB из ASF332 тоже заработали! Рано я радовался. Мой код написанный под ASF не работает на HiSpeed. Ситуация не очень понятная: Есть две платы 1 с резонатором с измеренной частотой 11.9465 производящим UPLLCK = 477.858MHz 2 с генератором с измеренной частотой 11.9999 производящего UPLLCK = 479.998MHz на плате с генератором работает мой код ASF и AtmelStart в режиме HS на плате с резонатором работает только AtmelStart в режиме HS. в режиме FS работает любой код на любой плате. Причем плата с резонатором в режиме ASF HS определяется системой, но при чтении секторов правильо успевает считать только около 200 байт. Код на AtmelStart ведёт себя похожим образом, если при конфигурации PLLA не установить ONE (MCK=24MHz). Сложность в том, что весь проект написан под ASF и встроить туда кусок из AtmelStart тяжело... и на плате нет ни места под генератор, ни тока питания. Скопировал инициализацию (MCK=150MHz) из AtmelStart в ASF - непомогло. Не могу понять: допустим проблема аппаратная, но код из AtmelStart её обходит как-то.
|
|
|
|
|
Mar 29 2017, 11:34
|

Профессионал
    
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565

|
Цитата(Шаманъ @ Mar 28 2017, 20:01)  Я в соседней ветке с подобным страдал несколько дней назад. И там описан вариант когда аппаратная проблема с КГ могла быть частично решена программно. Не увидел решения даже частичного, где? Нашел интересную ссылку, но воспользоваться не получилось - не соединяется. USB / ASF - critical bug in udp_device.cЦитата I have found a critical bug in the USB stack. 1) In some code paths the system does not disable the USB interrupts before calling udd_ep_finish_job(). This seems like an obvious bug, as there is no need to have interrupts enabled if there is no transaction queued. This alone does not cause problem however.
2) If someone then calls udd_ep_run(), then a race condition arises. After updating the "busy" bit, there is a period where the interrupt is not disabled. In this period, if an interrupt (on e.g. an ISO endpoint) arrives, a transaction using the old parameters in "ptr_job" will start. This is a serious bug that then leads to incorrect transfers.
At high speeds (lots of ISO packets) this bug is very easy to reproduce.
I have attached a patched version that fixes both problems. I have marked all the changes with "DT_FIX". Интересно, что в AtmelStart вроде вообще не выключают прерывания на ходу.
|
|
|
|
|
Mar 29 2017, 13:00
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(_4afc_ @ Mar 29 2017, 14:34)  Не увидел решения даже частичного, где? Читали невнимательно. Если все время посылать на хост ZLP (когда реальных данных нет), то даже с кривым клоком хосту удается поддерживать синхронизацию. Если делать как в стандарте, то кривой клок сразу губит соединение. Что в принципе объяснимо, правда это когда уже знаешь  P.S. Это не про то, как надо делать, а про то, как бывает.
Сообщение отредактировал Шаманъ - Mar 29 2017, 13:02
|
|
|
|
|
Mar 29 2017, 15:05
|

Профессионал
    
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565

|
Цитата(Шаманъ @ Mar 29 2017, 17:00)  Читали невнимательно. Если все время посылать на хост ZLP (когда реальных данных нет), то даже с кривым клоком хосту удается поддерживать синхронизацию. Не подскажите куда в этом коде вставить посылки ZLP? У меня есть подозрение, что в EP0 они эти посылки вставили перед каждой отправкой или при инициализации. А в EP1 EP2 этого нет - поэтому данные и теряются.
|
|
|
|
Сообщений в этой теме
_4afc_ USB не определяется компьютером Nov 30 2016, 12:51 _4afc_ Посмотрел Wiresharkом - M4 сразу отвечает дескрипт... Dec 1 2016, 11:05 _4afc_ USBCDC ведёт себя также как и MSD - не отсылает де... Dec 6 2016, 16:27  DmitryM Цитата(_4afc_ @ Dec 6 2016, 19:27) USBCDC... Dec 7 2016, 04:47 controller_m30 Мне кажется, нужно посмотреть в описании примеров ... Dec 7 2016, 08:59 DmitryM Цитата(controller_m30 @ Dec 7 2016, 11:59... Dec 7 2016, 12:16  _4afc_ Кварцевый резонатор 12МГц 1000ppm, что вероятно дл... Dec 7 2016, 16:29   _4afc_ Замена резонатора с измеренной частотой 11.9... Dec 8 2016, 10:09 controller_m30 Я нашёл такое.
Пин VBG через резистор 5к62 1% подк... Dec 8 2016, 14:27 _4afc_ Цитата(controller_m30 @ Dec 8 2016, 17:27... Dec 8 2016, 16:59 controller_m30 Может мелочь, но всё таки.
На фигуре 30-1 (для S7... Dec 8 2016, 20:12   skripach _4afc_, подскажите в чём основное отличие между E7... Jan 19 2017, 21:10    maxx2 Цитата(skripach @ Jan 19 2017, 22:10) _4a... Jan 20 2017, 07:18     skripach Цитата(maxx2 @ Jan 20 2017, 10:18)
Спаси... Jan 20 2017, 18:51        Шаманъ Цитата(_4afc_ @ Mar 29 2017, 18:05) Не по... Mar 29 2017, 16:04        Alexey_N Цитата(_4afc_ @ Mar 29 2017, 18:05) А в E... Dec 23 2017, 20:23         _4afc_ Цитата(Alexey_N @ Dec 23 2017, 23:23) Так... Apr 4 2018, 12:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|