Kot_Schrodingera 0 24 января, 2018 Опубликовано 24 января, 2018 (изменено) · Жалоба Работаю с stm32f745 Драйвер для usb взять из кубика я работаю в режиме хоста, в роли девайса выступает устройство, на котором стоит atmel+камера, и гонится картинка по usb Изначально работал в режиме FS и не испытывал никаких проблем Решили, что нужно HS, сделали новую плату, usb физику использовали 3320 И теперь появились проблемы при передаче, выражаются они вот в чем: В какой-то момент я не могу получить пакет от девайса Причем, в callback я изменяю статус о том, что данные приняты, и в функции по отправке я жду появление данного статуса И в какой то момент функция зависает в ожидании статуса. То есть callback даже не вызывается, и следовательно прерывание по приему тоже не происходит Может кто сталкивался с такой проблемой?Или проблема в самом девайсе? int write_and_read( USBH_HandleTypeDef *d, void *rx_buff, size_t rx_buff_size, void *tx_buff, size_t tx_buff_size) { status = 0x0; status_rx = 0x0; SCB_CleanInvalidateDCache(); int r = write(d, tx_buff, tx_buff_size, true); if (r < PB_PVS_SUCCESS) return r; timer_start(&timer_usb, 50); while((!(timer_check(&timer_usb)) == TIMER_STATE_TIMEOUT)) { if(status) break; }; if(!status) return PB_PVS_ERROR_LIBUSB; r = read(d, rx_buff, rx_buff_size, true); SCB_CleanInvalidateDCache(); if (r < PB_PVS_SUCCESS) { debug("read_error"); return r; } timer_start(&timer_usb, 50); while(!(status_rx)) { //в данном месте висит функция }; return PB_PVS_SUCCESS; }; int write( USBH_HandleTypeDef *d, void *buff, size_t buff_size, const bool pack) { uint8_t *data = (uint8_t *)buff; int res = PB_PVS_SUCCESS; USBH_PVS_Stop(d); const int r_usb = USBH_PVS_Transmit(d, data, buff_size); if(r_usb != USBH_OK) res = PB_PVS_ERROR_LIBUSB; return res; } int read( USBH_HandleTypeDef *d, void *buff, size_t buff_size, const bool unpack) { int res; uint8_t *data = (uint8_t *)buff; USBH_PVS_Stop(d); const int r_usb = USBH_PVS_Receive(d, data, buff_size); if(!r_usb) { res = PB_PVS_SUCCESS; } if (r_usb != USBH_OK) { res = PB_PVS_ERROR_LIBUSB; } return res; } Изменено 15 ноября, 2022 пользователем haker_fox Уточнил модель МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 24 января, 2018 Опубликовано 24 января, 2018 · Жалоба 1. На каких частотах работаете (ядро и шины)? 2. Какое состояние платы? Макетка с проводами или уже готовая разведенная плата? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kot_Schrodingera 0 24 января, 2018 Опубликовано 24 января, 2018 · Жалоба 1. На каких частотах работаете (ядро и шины)? 2. Какое состояние платы? Макетка с проводами или уже готовая разведенная плата? 1.Моя стмка на максимуме(216М) собственно шина тоже на 216М 2. Уже готовая плата Если думаете, что в проблема в разводке, было такое подозрение, потому что кривенько разведен участок от физики до разъема Но под рукой оказалась отладка на 746 камне и там проблема та же Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 24 января, 2018 Опубликовано 24 января, 2018 · Жалоба Если работаете на 216MHz тогда мой вопрос снят, с учетом того что и трассировку исключили, посоветую следующее: 1. Убедиться что Ваш код нигде не отключает прерывания на "длительное" время 2. Проверить\Обновить версию библиотек в кубе, но это вряд ли поможет, в последнее время, наверное уже как год, не замечено новых багов в USB\PCD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kot_Schrodingera 0 24 января, 2018 Опубликовано 24 января, 2018 · Жалоба Спасибо за советы, будем разбираться) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться