avrxml / asf

merry christmas, have some asf without registration
150 stars 108 forks source link

During the transfer by bulk, embedded soft crashes #7

Open AlstomJT opened 6 years ago

AlstomJT commented 6 years ago

I try to use your USB library for my ATSAM3U4E in my embedded system. I find that when I have save around 300Mbytes or more, my embedded system crash so I need to restart 2 or 3 times to finally achieve the full download. I can't figurate out why my embedded system crashes. I send you a quick view of my functions.

I create an app with Qt to download the data from the memory in my embedded system:

bool Device::usbWriteRead(t_usb_packet request, t_usb_packet response, int timeout) { mutex.lock(); / Send request / if (usb_bulk_write(dev_handle, udi_vendor_ep_bulk_out, (char)request, sizeof(t_usb_packet), 10) < 0) { mutex.unlock(); return false; } / Retrieve response / if (usb_bulk_read(dev_handle, udi_vendor_ep_bulk_in, (char)response, sizeof(t_usb_packet), timeout) < 0) { mutex.unlock(); return false; } mutex.unlock(); return true; }

My embedded system threat the bulk communication as follow: static void usb_bulk_in_received(udd_ep_status_t status, iram_size_t nb_transfered, udd_ep_id_t ep) { if (UDD_EP_TRANSFER_OK != status) return; udi_vendor_bulk_out_run((uint8_t*)&usb_packet, sizeof(usb_packet), usb_bulk_out_received); }

static void usb_bulk_out_received(udd_ep_status_t status, iram_size_t nb_transfered, udd_ep_id_t ep) { if (UDD_EP_TRANSFER_OK != status) return; switch (usb_packet.type) { case USB_PACKET_TYPE_GET_DATA: / Return data from flash / nand_flash_ecc_read_page(&nf_ecc, usb_packet.content.data.block, usb_packet.content.data.page, nf_data_buffer, NULL); memcpy(&usb_packet.content.data.buffer, &nf_data_buffer[usb_packet.content.data.subpage 512], 512); break; default: break; } udi_vendor_bulk_in_run((uint8_t)&usb_packet, sizeof(usb_packet), usb_bulk_in_received); }

I appreciate all the help you can give me. Thank you very much.

Jorge.