Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Архив » USB интерфейс в STM32F103


USB интерфейс в STM32F103

Сообщений 91 страница 99 из 99

91

Приветствую участников форума! Вопрос у меня  про биты синхронизации.
На контроллере STM32F103VE сделал MSD. Делал все последовательно от энумерации до чтения сектора.
Не делал полностью стек как в примерах от ST а только те запросы что выдавал хост(Win7).
Про DTOG_RX DTOG_TX читал(в этой же теме) что трогать не надо они сами переключаются во время управляющих запросов.
Но вот когда дошел до SCSI команд то тоже выяснилось что все работает без принудительно переключения data0/1 при отправке
данных на стадии данных и стадии статуса. Хотя про эти команды явно указано что например команда Inquiry приходит с токеном
DATA0 а я должен ответить DATA0 при стадии Data Transport и DATA1 при стадии StatusTransport. В общем у меня работает пока только чтение
с SD карты но работает нормально. Запись думаю скоро добить и там все по аналогии.
Вопрос в том почему все отлично работает при BOT протоколе без принудительно переключения DATA0/1  при отправке данных или статуса?

92

Привет, pvo125 )
Я не разбирался со SCSI детально, может sobs что-нибудь скажет

93

Ладно с этим как нибудь потом разберусь или кто подскажет. Ведь главное работает.
Вопрос к vt ! Можешь несколькими предложениями рассказать про double buffering. В какой момент писать/ читать данные в PMA конечных точек. Чисто теоретически. Хотел впоследствии сделать а вот с теорией на английском( из RM) не очень получается понять смысл.

P.S. Очень помог твой топик на первой странице темы! Отдельное спасибо за разъяснения про  stat_tx stat_rx и операцию XOR !

94

Double buffering имеет смысл, если ты вписываешься в темп приёма-передачи данных хостом, тогда приём-передача будут непрерывными
Можешь прикинуть этот темп - 12 Мбит скорость, по 64 байта пакеты, и прикинуть сможешь ли ты в мк принимать, передавать, обрабатывать данные с таким темпом
Не все вкусняшки из RM одинаково полезны )

95

pvo125 написал(а):

Хотя про эти команды явно указано что например команда Inquiry приходит с токеном
DATA0 а я должен ответить DATA0 при стадии Data Transport и DATA1 при стадии StatusTransport.

Когда разбирался с темой этого не видел (или не обратил внимания). Я использовал эти материалы - Ссылка и Ссылка
Вот тут мои беглые разборки с SCSI Ссылка

96

Можешь прикинуть этот темп - 12 Мбит скорость, по 64 байта пакеты, и прикинуть сможешь ли ты в мк принимать, передавать, обрабатывать данные с таким темпом

Да именно для чтения с SD карты и нужен этот режим. С карты скорость чтения около 7 мегабайт с секунду(по 4 проводн. SDIO). Потому и хотел попробовать разобраться
и проверить сильно ли приблизится к теоретическому максимуму для Full Speed. Хотя думаю слабым звеном будет запись на карту. Для записи конечно не нужна двойная буферизация.

Я использовал эти материалы -...


Вот файл по командам BOT протокола. Ориентировался на него.Каждая команда расписана с каким токеном (data0/1) приходит и какой следует отправлять.
Ссылка

97

pvo125 написал(а):

хотел попробовать разобраться
и проверить сильно ли приблизится к теоретическому максимуму для Full Speed.

Перед этим неплохо было бы проверить какой практический максимум [для stm32f103] )

98

Vt, если для твоего кода просто в цикле вызывать USBPoll() и выводить значение (USB->EP1R & 0xB0B0), то сначала оно ожидаемо равно 0x3020, т.е. Valid и Nak, но через время начинают читаться нули, потом опять 0x3020 и такое чередование может повторяться до 5-ти раз при каждом старте или после перевтыкания USB кабеля. Т.к. USBPut() и USBGet() проверяют по 3 бита сразу, они начинают прием/передачу не только когда установлены CTR_RX/CTR_ТX, но и когда они сброшены, а конечные точки находятся в состоянии Disabled.

Отредактировано Reflector (2018-07-09 11:14:21)

99

Привет, Reflector
Похоже ты первый, кто стал тестировать этот код, другие сразу переписывали по-своему )
Я уже забыл с тех пор мелкие детали, так что если ты найдёшь и исправишь какие-то косяки буду только рад

Посмотрел
Ну да, грязный старт, нули в EPnR это сбросы ресетами, которые делает хост при enumeration, т.е. USBGet/Put нормально работают только после окончания enumeration
Но для чистого старта надо было бы добавлять массу проверок, которые затуманили бы основной смысл

Отредактировано vt (2018-07-09 16:35:33)


Вы здесь » Микроконтроллеры » Архив » USB интерфейс в STM32F103