Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB HS
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Kot_Schrodingera
Работаю с stm32f745
Драйвер для usb взять из кубика

я работаю в режиме хоста, в роли девайса выступает устройство, на котором стоит atmel+камера, и гонится картинка по usb
Изначально работал в режиме FS и не испытывал никаких проблем
Решили, что нужно HS, сделали новую плату, usb физику использовали 3320
И теперь появились проблемы при передаче, выражаются они вот в чем:

В какой-то момент я не могу получить пакет от девайса
Причем, в callback я изменяю статус о том, что данные приняты, и в функции по отправке я жду появление данного статуса
И в какой то момент функция зависает в ожидании статуса.

То есть callback даже не вызывается, и следовательно прерывание по приему тоже не происходит

Может кто сталкивался с такой проблемой?Или проблема в самом девайсе?

CODE
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;
}
Integro
1. На каких частотах работаете (ядро и шины)?
2. Какое состояние платы? Макетка с проводами или уже готовая разведенная плата?
Kot_Schrodingera
Цитата
1. На каких частотах работаете (ядро и шины)?
2. Какое состояние платы? Макетка с проводами или уже готовая разведенная плата?


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

Если думаете, что в проблема в разводке, было такое подозрение, потому что кривенько разведен участок от физики до разъема
Но под рукой оказалась отладка на 746 камне и там проблема та же
Integro
Если работаете на 216MHz тогда мой вопрос снят, с учетом того что и трассировку исключили, посоветую следующее:
1. Убедиться что Ваш код нигде не отключает прерывания на "длительное" время
2. Проверить\Обновить версию библиотек в кубе, но это вряд ли поможет, в последнее время, наверное уже как год, не замечено новых багов в USB\PCD
Kot_Schrodingera
Спасибо за советы, будем разбираться)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.