FTDI Community
General Category => Discussion - Software => Topic started by: Rajavelu on December 04, 2018, 06:00:25 am
-
Dear Sir,
We use the VNC2-32L1C USB Host controller for controlling 2 USB devices(USB Pen-drive & USB Keyboard) simultaneously through single UART. I’m able to detect both devices on both ports, but data is not available in the file created on pen-drive. Please refer the attachment for reference.
• Is data in-availability on pen-drive - due to single thread creation(USB_Check)/lack of separate stack memory?, i.e no memory created separately for setup, UART and BOMS. In such case what is the minimum and maximum stack size should i use for USB_Check thread.(Refer attachment)
• What is the maximum stack size available for VNC2-32L1C. Minimum and maximum stack size to be used by pen-drive and keyboard functions and how they are calculated?
• In order to detect which device is connected on which port, created a thread and using getDescriptors checked the port status.(Refer Attachment).Both devices were connected and appropriate configured leds were ON indicating the working of the function.
• But when i call the function of the respective devices, the USB Keyboard works on both ports but with USB Pen-drive a file is created but no data within. The same functions of Pen-drive namely Setup,UART,BOMS were used separately without checking port status and device, but created 3 threads separately the data is copied into file.
• Through debugging it was found the data was present in the buf1 during fwrite operation but after fwrite on halt the cursor stops at assembly window
fwrite(buf1, (size_t)pBuf1, sizeof(char), file);
Kindly do the needful.
Best regards,
Rajavelu Balasubramanian
9841136718
LCS Controls Pvt., Ltd.,
Chennai.
-
Hello,
The controllers in some flash drives don't commit a file fully to their flash array correctly unless you do either a dummy open-close operation (i.e. finish data, close, open and close) or call fat_fileFlush(). If you see the file but the content isn't there, then one of these should help.
Best Regards, FTDI Community
-
Hi
Thanks for the response.
I have used fclose(file); while creating separate threads for setup, uart, boms it worked. But when i used getdescriptors and check condition and then call the function i face this issue.
Please share the stack size calculation for a thread. How does 1024 bytes arrived. Any specific calculation ??
Regards
Rajavelu Balasubramanian
-
Hello,
You can find details on threads and resources in these application notes below and you can use the Thread Manager to check usage.
https://www.ftdichip.com/Support/Documents/AppNotes/AN_169_Vinculum_II_RTOS_Using_the_Kernel_Diagnostic_Service.pdf
https://www.ftdichip.com/Support/Documents/AppNotes/AN_157_Vinculum%20II%20Memory%20Management.pdf
Best Regards, FTDI Community
-
Hi
Now i'm able to copy the data into pendrive. I have given a delay of 2000 milli seconds at receiving end in the UART function
// get bytes available...
uart_iocb.ioctl_code = VOS_IOCTL_COMMON_GET_RX_QUEUE_STATUS;
vos_delay_msecs(2000); //delay to overcome data issue in pendrive
vos_dev_ioctl(hUART, &uart_iocb);
Is this the right way to do it, will it have any effects on other operations? Because i didn't use any delay here when i created three threads separately namely setup,uart and boms
And why im not able to use delay(milliseconds); function here and whats the key difference between vos_delay_msecs(millisecs); and delay(millisecs);
------------------------------------------------------------------------------------------------------------------------------------------------------
And now when i connect keyboard on port1 and then disconnect and insert pendrive-im able to do data copying but when i do vice versa im not able to do it. and similarly if i disconnect pendrive and re insert im not able to copy data.
how to resolve this issue?