реклама на сайте
подробности

 
 
> USB HS, Проблемы при приеме
Kot_Schrodingera
сообщение Jan 24 2018, 06:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 28-11-17
Пользователь №: 100 395



Работаю с 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;
}


Сообщение отредактировал IgorKossak - Jan 24 2018, 08:48
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 08:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016