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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> USB не определяется компьютером, ATSAMS70N20 mass storage
maxx2
сообщение Jan 20 2017, 07:18
Сообщение #16


Участник
*

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



Цитата(skripach @ Jan 19 2017, 22:10) *
_4afc_, подскажите в чём основное отличие между E70 и S70?


Прикрепленное изображение

Go to the top of the page
 
+Quote Post
skripach
сообщение Jan 20 2017, 18:51
Сообщение #17


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 082
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата(maxx2 @ Jan 20 2017, 10:18) *

Спасибо!


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 28 2017, 15:06
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 176
Регистрация: 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 её обходит как-то. crying.gif

Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Mar 28 2017, 16:01
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(_4afc_ @ Mar 28 2017, 18:06) *
Не могу понять: допустим проблема аппаратная, но код из AtmelStart её обходит как-то. crying.gif

Я в соседней ветке с подобным страдал несколько дней назад. И там описан вариант когда аппаратная проблема с КГ могла быть частично решена программно. Так что это вполне нормально. Отклонение частоты у Вашего резонатора, как по мне сильно большое. И это еще так сказать "на столе", а что будет когда температура поплывет?

Сообщение отредактировал Шаманъ - Mar 28 2017, 16:02
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 29 2017, 11:34
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 176
Регистрация: 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 вроде вообще не выключают прерывания на ходу.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Mar 29 2017, 13:00
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(_4afc_ @ Mar 29 2017, 14:34) *
Не увидел решения даже частичного, где?

Читали невнимательно. Если все время посылать на хост ZLP (когда реальных данных нет), то даже с кривым клоком хосту удается поддерживать синхронизацию. Если делать как в стандарте, то кривой клок сразу губит соединение. Что в принципе объяснимо, правда это когда уже знаешь sm.gif

P.S. Это не про то, как надо делать, а про то, как бывает.

Сообщение отредактировал Шаманъ - Mar 29 2017, 13:02
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 29 2017, 15:05
Сообщение #22


Профессионал
*****

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



Цитата(Шаманъ @ Mar 29 2017, 17:00) *
Читали невнимательно. Если все время посылать на хост ZLP (когда реальных данных нет), то даже с кривым клоком хосту удается поддерживать синхронизацию.


Не подскажите куда в этом коде вставить посылки ZLP?

У меня есть подозрение, что в EP0 они эти посылки вставили перед каждой отправкой или при инициализации.
А в EP1 EP2 этого нет - поэтому данные и теряются.

Прикрепленные файлы
Прикрепленный файл  usbhs_device.zip ( 13.8 килобайт ) Кол-во скачиваний: 7
 
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Mar 29 2017, 16:04
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(_4afc_ @ Mar 29 2017, 18:05) *
Не подскажите куда в этом коде вставить посылки ZLP?

Сразу выскажу замечание, делать так это неправильно, не по стандарту, и сейчас я у себя все это дело убрал, сменил тактирование и все работает как положено и без ZLP.

Теперь про ZLP. Когда посылать нечего по правилам точка выставляет NAK, я вместо этого посылал ZLP пакеты. Куда именно вставлять в код Вам должно быть виднее - я "воевал" с STM32, и код был написан мной с нуля, поэтому таких вопросов не возникало. Могу предположить, что начиная со строки 1923 стоит посмотреть - там судя по коду и комментариям как раз "деактивируют" точку после окончания передачи.

Цитата
У меня есть подозрение, что в EP0 они эти посылки вставили перед каждой отправкой или при инициализации.
А в EP1 EP2 этого нет - поэтому данные и теряются.

Если все ок с железом, то пустые пакеты нужны только там, где нужны по протоколу. В EP0 ZLP пакеты отправляются как подтверждения приема данных, там они нужны по-любому. С другими точками они обычно нужны только как признак окончания передачи, если длина посылки кратна размеру пакета.
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Dec 23 2017, 20:23
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



Цитата(_4afc_ @ Mar 29 2017, 18:05) *
А в EP1 EP2 этого нет - поэтому данные и теряются.

Так чем дело кончилось, - удалось победить этот камень?
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Apr 4 2018, 12:14
Сообщение #25


Профессионал
*****

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



Цитата(Alexey_N @ Dec 23 2017, 23:23) *
Так чем дело кончилось, - удалось победить этот камень?


Кончилось заменой кварцевого резонатора на другой тип.

Камень изначально тактировался от резонатора типа CSTCE.
Было опробовано 5 партий этих резонаторов с маркировками на корпусе h,t,x,v,g в режиме HS:

CSTCE_h 11.9451MHz (-4575ppm) - нестабильное соединение, чтение невозможно;
CSTCE_t 11.9487MHz (-4279ppm) - стабильное соединение, чтение с ошибками;
CSTCE_x 11.9515MHz (-4042ppm) - стабильное соединение, чтение с ошибками;
CSTCE_v 11.9566MHz (-3621ppm) - стабильное соединение, чтение с ошибками;
CSTCE_g 11.9590MHz (-3417ppm) - стабильное соединение, чтение без ошибок.

Поскольку резонатор CSTCE с маркировкой на корпусе g закупался много лет назад, остатков бы не хватило на серию, a в продаже его не найти.
Была выбрана замена AMB10 с маркировкой на корпусе AH6G частотой 11.9998MHz (-21ppm) - стабильное соединение, чтение без ошибок.

PS: Что интересно CY7C68013 прекрасно работал в режиме HS от кварца с частотой 24.0032 (+133ppm)...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd May 2018 - 14:08
Рейтинг@Mail.ru


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