Jump to content

    
Sign in to follow this  
Guest MALLOY2

STM32F103 USB

Recommended Posts

Guest MALLOY2

Толи я что то забыл, толи что то не дочитал давно уже не занимался USB.

 

Суть проблемы.

Инициализирую USB, получаю ресет от компа, получаю Setup пакет размером 8 байт с содержимым

0x80, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00

 

Все как бы честно запрос дескриптора, но поля wValue и wLength равны нули, из за чего я перехожу в STALL, сначала думал что что то не так копирую, посмотрел в отладчике прямо PMA область, там теже значения, что я делаю не так ?

 

 

Share this post


Link to post
Share on other sites
Все как бы честно запрос дескриптора...

При запросе дескриптора поле bRequest должно быть равно 0х06, а у Вас оно 0х60.

Это не запрос дескриптора.

Share this post


Link to post
Share on other sites
Толи я что то забыл, толи что то не дочитал давно уже не занимался USB.

 

Суть проблемы.

Инициализирую USB, получаю ресет от компа, получаю Setup пакет размером 8 байт с содержимым

0x80, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00

 

Все как бы честно запрос дескриптора, но поля wValue и wLength равны нули, из за чего я перехожу в STALL, сначала думал что что то не так копирую, посмотрел в отладчике прямо PMA область, там теже значения, что я делаю не так ?

Я бы посоветовал вам не придумывать заново реализацию протокола USB, а воспользоваться уже готовой библиотекой от производителя: STM32_USB-FS-Device_Lib (на данный момент свежая версия v3.2.0):

http://www.st.com/stonline/products/suppor...iles/um0424.zip

http://www.st.com/stonline/products/literature/um/13465.pdf

 

Утилита для компа "USB HID demo" с исходниками:

http://www.st.com/stonline/products/suppor...iles/um0551.zip

http://www.st.com/stonline/products/literature/um/14711.pdf

 

Я за день прикрутил эти исходники в свой проект (у меня среда CrossWorks),

Так мое устройство (HID) сразу заработало как надо.

Нужно было лишь подправить под себя один файл - дискрипторы (descr.c)

и откорректировать все H файлы из STM32_USB-FS-Device_Lib, чтобы проект собирался, поскольку у меня смесь CPP и C файлов (стандартная запись с применением extern "C" {...} )

 

 

Share this post


Link to post
Share on other sites
Guest MALLOY2

При запросе дескриптора поле bRequest должно быть равно 0х06, а у Вас оно 0х60.
Это не запрос дескриптора.

 

это я тут не правильно написал, естественно там 6.

 

бы посоветовал вам не придумывать заново реализацию протокола USB, а воспользоваться уже готовой библиотекой

 

я его не придумываю просто портирую на этот контроллер, естественно в первую очередь на либу смотрел, и понял годится она только в демки в общем гомно-код мне не нужен.

 

Вобщем разобрался в чем было дело, неправильно копировал с PMA области, все дело в хитрой адресации инкрементируем на 4 читаем 2 байта инкрементируем на 4 читаем два байта и т.д., фактически указатель на 32 бита инкрементируется, а читается по нему 16, а я инкрементировал указатель на 16 бит.

 

Это:

80 06, 00, 01, 00, 00, 40, 00

 

Выглядит в PMA памяти вот так:

80 06 00 00 00 01 00 00 00 00 00 00 40 00 00 00

 

 

 

 

 

 

Share this post


Link to post
Share on other sites
Вобщем разобрался в чем было дело, неправильно копировал с PMA области, все дело в хитрой адресации инкрементируем на 4 читаем 2 байта инкрементируем на 4 читаем два байта и т.д.

Точно так же на STM32 располагаются в памяти байты бэкап домена.

Тут надо быть внимательнее, чтобы не наломать дров :)

Share this post


Link to post
Share on other sites
Точно так же на STM32 располагаются в памяти байты бэкап домена.

Тут надо быть внимательнее, чтобы не наломать дров :)

я тут уже писал.... код функций который копирует данные между PMA и RAM нада кунцкамеру отдавать. я одну из функций переписал короче в 8 раз по выходному асму! шерсть на заднице дыбом встала когда внимательнее поглядел как "там у индусов" сделано :)

 

я предлагаю стандартные библиотеки ST называть не библиотеками а документацией. я лично то что они документацией называют я органически не воспринимаю. А так смотриш библиотеку - a.... вот оно оказываеццо как работает! и пишеше свой код :)

Share this post


Link to post
Share on other sites
я предлагаю стандартные библиотеки ST называть не библиотеками а документацией. я лично то что они документацией называют я органически не воспринимаю. А так смотриш библиотеку - a.... вот оно оказываеццо как работает! и пишеше свой код :)

Нормальная у них документация.

По бэкап домену совсем всё просто и понятно.

По USB потруднее воспринимается, но тоже не беда.

 

А библиотеки это да, кривые, но это сейчас так модно - что у ST, что у ATMEL, что у NXP :)

Share this post


Link to post
Share on other sites
Нормальная у них документация.

По бэкап домену совсем всё просто и понятно.

про бекап то я и не читал - до сих пор непонял для чего это можно применить в моих случаях ;)

читал про SDIO ETHERNET, не понравилось - непонятно. смотрел в библиотеку - непонравилось - но понятно.

Share this post


Link to post
Share on other sites

Столкнулся с проблемой для 103-го в W7-32bit, чего нет XP-32-bit.

Суть проблемы:

Инициализирую USB, получаю ресет от компа, получаю Setup пакет ... без проблем на XP.

 

Тот же девайс, тотже чип с тойже программой на W7-ке

Инициализирую USB, НЕ получаю ресет от компа!

Резистор подтяжки 1K.

 

USB Dfu c 0, на тойже плате, тот самый чип без проблем на обоих копах.

Может кто сталкивался с таким?

Как лечить?

Share this post


Link to post
Share on other sites
Я бы посоветовал вам не придумывать заново реализацию протокола USB, а воспользоваться уже готовой библиотекой от производителя: STM32_USB-FS-Device_Lib (на данный момент свежая версия v3.2.0):

 

Все-таки, у меня возникли некие затруднения при работе с этой библиотекой. Я уже запускал VCP на STM32F103XX, работало все хорошо. Тоже самое для STM32F2xx уже с новой USB ”либой”, немного не корректно работает. Например, пакет размером 64 байта не желает по каким-то причинам выходить из контроллера в ПК. Если «пулять» 63 или 65 байт, все выходит и данные можно считать в ПК. Дальше, при программном буфере USB Rx 2048 байт, у меня теряется каждый 16-тый пакет принятый от ПК. Если увеличиваю этот буфер в 10 раз, то теряется в 10 раз меньше, мистика конечно, но чудес не бывает, надо дебажить все и разбираться, че там не так. Вот мое субъективное мнение.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this