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

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

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


Вы здесь » Микроконтроллеры » STM32 » USB CDC для STM32F103


USB CDC для STM32F103

Сообщений 61 страница 83 из 83

61

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

RA, у меня уже давно была мысль, что самым удобным в некоторых случаях была бы псевдофайловая система. Т.е. МК должен эмулировать флешку. Только для этого мне нужно где-то достать рабочий код для поддержки ext2 или ext3, иначе самому копаться и все это делать — я так и за 10 лет не успею! Vfat сразу отметается как ущербный и как доступный "из коробки" в приставках, мне этого не нужно.

в определенное место на флеше мк(если не влезает то внешнею память) записать тупо бинарник, залочить от записи. и через любую терминалку по определенному коду выгрузить на пк, преобразовать в драйвер, и уже через него общаться с девайсом. а что именно это будет хид, ком и т.д., уже не важно. или не?

62

RA, ну чепуху же несешь! Скажем, объем кода модуля ядра будет 16КБ (и то, это мало), тебе придется столько флеша под него выделить. А потом вдруг выясняется, что у клиента ядро не а.б.в., а а.г.е, и нихрена твой модуль не собирается!
Единственный разумный вариант, не вызывающий геморроя на пустом месте, - эмулировать существующее и хорошо поддерживаемое устройство. Ну или выдумывать свое устройство и поддерживать его со всех сторон самостоятельно (вообще, для USB-устройств отдельный модуль ядра лепить необязательно: можно в юзерспейсе при помощи libusb все забульбенить).

63

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

вообще, для USB-устройств отдельный модуль ядра лепить необязательно: можно в юзерспейсе при помощи libusb все забульбенить

О! Голос разума )
Если вдруг будет топик про юсб в юзерспейсе, всяко поддержу и даже может спец терминал для приставки сделаю

64

Не, топика про USB  в юзерспейсе от меня не жди: у меня нет необходимости гонять по USB данные со скоростью в 50Мбит в секунду!
Для моих задач CDC за глаза. Разве что, как я упоминал, эмулятор флехи бы сделать еще..

65

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

Не, топика про USB  в юзерспейсе от меня не жди: у меня нет необходимости гонять по USB данные со скоростью в 50Мбит в секунду!

А CDC разве медленный? У меня на комп передает со скоростью 820КБ/c, это довольно близко к максимальной пропускной способности.

66

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

Ссылка на проект (может кто попробует или просто глянуть)
https://github.com/saewave/STM32F103-USB-CDC-CMSIS

Пробую. Не собирается: огромное количество ошибок.
Что у тебя за компилятор, в котором такие вольности как

Код:
volatile uint32_t     USBEP[EPCOUNT] __attribute__((at(USB_BASE)));

позволены?
Пытаюсь это переделать под gcc 7.3.0

67

Черт, там еще и malloc!
Ох, задолбаюсь я этот код переделывать в рабочий вид... Проще, наверное, будет готовый с F0 портировать!

68

Переделал под статические буферы. Скомпилялось. Не взлетело.
Странно, что нет инициализации ног USB, надо почитать мануалы. Пока что устройство даже енумерацию не проходит.

69

Если не ошибаюсь у вас видел проект одновременно CAN и USB. Если не прав удалю свое сообщение.
Для 103

http://s5.uploads.ru/t/IKQce.png

70

CERGEI, я в курсе, что одновременно CAN и USB под STM32F103 работать не могут. Поэтому в том проекте использовал STM32F042.
Здесь же мне нужно только USB завести.
И вот что странно: прерывания разрешаю, USB тактирую, однако, прерывание не отрабатывает! Похоже, что-то где-то не так сделал. На гитхаб пока не заливал этот код: не работает ничего. В общем, нужно скрупулезно подходить к этой проблеме. Я на прикручивание CDC к STM32F042 потратил больше недели. Эх, быстро меня из больницы выписали, если б там еще недельку проторчал, наверняка бы прикрутил USB к 103. А так придется выдумывать, когда свободное время для этого найти...

71

Добил эмулятор PL2303 на STM32F042. Работает и на компьютерах, и на приставках.

72

смысл от от серии f0 , когда f103 и выше не так дороги сейчас...

73

У F0: а) более приличная периферия (те же GPIO), б) тоньше RM и errata, в) STM32F030 вообще по цене уже к STM8 приближаются...
Насчет STM32F103 — я вот недельку с этим говном поработал, что-то вообще не хочется им пользоваться! Все через задницу.. Но все-таки ради спортивного интереса я CDC на нем тоже добью. А потом буду искать аналог (вроде 303) по сходной цене. Или попробую с GD103 поработать — китайцы вряд ли все худшее из 103 туда запихнули...

74

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

смысл от от серии f0 , когда f103 и выше не так дороги сейчас...

мне STM32F072 нравится больше чем F103.  возможностей больше. 
использую 103 потому что купил их в свое время 50 штук. не выбрасывать же...  (072 купил только 20 :) )

75

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

А потом буду искать аналог (вроде 303) по сходной цене.

Сколько ты за последние годы реализовал проектов на F1 учитывая, что основной камень - F0? Если бы вместо F1 там использовался в 2 раза более дорогой F3, то в год хотя бы доллар переплата получается?

76

Reflector, это  точно ☺
На F103 у меня только была система управления спектрографом (лет 5 назад делал) и хронометр для велосоревнований (делал года 4 назад)... Сейчас как-то в основном хватает F0 и STM8 (движки покрутить много мощей не нужно).
Даже не знаю уже, нужно ли мне что-то мощней F0... Все равно из "долгого ящика" я вряд ли выну такие проекты, как свой квадрокоптер, ЧПУшный станок или "дофигометр" (не говоря уже про ЭБУ — оно не только уйму времени на разработку требует, но и еще большей уймы полевых испытаний + подопытную машину, которую не жалко).

77

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

Даже не знаю уже, нужно ли мне что-то мощней F0... Все равно из "долгого ящика" я вряд ли выну такие проекты, как свой квадрокоптер, ЧПУшный станок или "дофигометр"

Иногда может потребоваться что-то и помощнее, но особого смысла экономить пару копеек раз в несколько лет я не вижу, для домашних поделок проще вместо F103 брать F303 у которого, помимо прочих преимуществ, периферия практически как у F0.

78

Сейчас сидел и экспериментировал с большими скоростями. Фигня какая-то получается: вроде как хост должен каждую миллисекунду отправлять запрос устройству, т.е. без ухищрений с буфером в 64 байта никак больше 512кбод не получить. Однако, соединяю pl2303 и ch340 перекрестно, настраиваю оба на 3Мбод, пихаю в один ~15кБ данных "за один присест" и получаю эти данные со второго! wireshark показывает, что последовательные запросы идут с интервалом в 10-20мкс!!!
Что ж за япона мать?
Ну и с конечной точкой прерывания: почему-то от нее вообще очень редко что-то приходит. Зачем же она тогда нужна для CDC, если обмен данными прекрасно идет и без нее???

79

Вот же черт подери!
Если я хочу "за один присест" передать на МК больше 64Б данных, получается полная лажа! Приходящие данные складываю в буфер 256 байт длиной, а в основном цикле проверяю: если какие-то данные в буфере есть, считываю их:

Код:
int USB_receive(char *buf, int bufsize){
    if(!bufsize || !idatalen) return 0;
    uint16_t epstatus = USB->EPnR[2];
    USB->EPnR[2] = SET_STALL_RX(epstatus);
    USB->CNTR = 0;
    int sz = (idatalen > bufsize) ? bufsize : idatalen, rest = idatalen - sz;
    memcpy(buf, incoming_data, sz);
    if(rest > 0){
        memmove(incoming_data, &incoming_data[sz], rest);
        idatalen = rest;
    }else idatalen = 0;
    USB->CNTR = USB_CNTR_RESETM | USB_CNTR_CTRM;
    usb_isr();
    epstatus = USB->EPnR[2];
    USB->EPnR[2] = SET_VALID_RX(epstatus);
    return sz;
}

В начале пробовал установить NAK_RX - та же проблема: все, что дальше 64 байт тупо теряется. Т.е. пока я в этой функции копирую уже принятые предыдущие 64 байта, новые идут нафиг. Если с компьютера повторить отправку совершенно тех же данных, то "добьется" недостающее. Но если отправить другой буфер, ничего не пройдет.

Чертовщина какая-то! Как же правильно успевать обрабатывать-то эти данные?

80

Я тебя предупреждал, но ты предпочитаешь пробовать прочность граблей cdc своим лбом )
И это ты ещё не попадал на грабли виртуальных компортов в виндовс [да и в линуксе я предполагаю тоже не попадал]

MS тоже ненавязчиво предупреждает о всех виндовс до 10 )
In Windows 10, the driver has been rewritten by using the Kernel-Mode Driver Framework that improves the overall stability of the driver.
* Improved PnP and power management by the driver (such as, handling surprise removal).
* Added power management features such as USB Selective Suspend.

Отредактировано vt (2018-11-11 16:12:51)

81

Нормуль, "методом Монте-Карло" починил. Осталось еще немножко: реализовать отправку буфера больше чем 64 байта (это несложно) и причесать все.
В мастдайке оно частично (для мелких буферов) работает. Если полноценно не будет работать в мастдайке - не велика потеря, я с игровыми приставками не работаю.

82

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

Пробую. Не собирается: огромное количество ошибок.
Что у тебя за компилятор, в котором такие вольности как

позволены?
Пытаюсь это переделать под gcc 7.3.0

На приставке ж пишу в кейле :)
Разобрался?

ЗЫ: Я ж сюда редко захаживаю, если че, пиши в гитхабе или на изяэлектрониксе :)
ЗЫ2: Как тут включить уведомление на мыло о новых коментах в теме?

83

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

Черт, там еще и malloc!
Ох, задолбаюсь я этот код переделывать в рабочий вид... Проще, наверное, будет готовый с F0 портировать!

Все там работает и стабильно, но рефакторинг нужен, да :)
Девайс ушел в мелкую партию на 100+ шт. Не было ни единого разрыва, так что проверено жизнью :) Но из-за главного правила программера - работает не трожь, все никак не дойдут руки поламать отрефакторить ))


Вы здесь » Микроконтроллеры » STM32 » USB CDC для STM32F103