Перейти к содержанию
    

USB HS STM32F745

Работаю с 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;
}
 
Изменено пользователем haker_fox
Уточнил модель МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. На каких частотах работаете (ядро и шины)?

2. Какое состояние платы? Макетка с проводами или уже готовая разведенная плата?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. На каких частотах работаете (ядро и шины)?

2. Какое состояние платы? Макетка с проводами или уже готовая разведенная плата?

 

1.Моя стмка на максимуме(216М) собственно шина тоже на 216М

2. Уже готовая плата

 

Если думаете, что в проблема в разводке, было такое подозрение, потому что кривенько разведен участок от физики до разъема

Но под рукой оказалась отладка на 746 камне и там проблема та же

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если работаете на 216MHz тогда мой вопрос снят, с учетом того что и трассировку исключили, посоветую следующее:

1. Убедиться что Ваш код нигде не отключает прерывания на "длительное" время

2. Проверить\Обновить версию библиотек в кубе, но это вряд ли поможет, в последнее время, наверное уже как год, не замечено новых багов в USB\PCD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...