We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
(Sorry for my limited English ability.)
I have been assigned to develop an USB based I/O board (software portion). The requirement of this I/O board has never been discussed and never been defined, and the hardware has not been made. So I am working on the LPC23xx evaluation boards. What I have been told is that, this USB based I/O board is made to work with a X86 platform running Linux.
I read some Tsuneo's (Tsuneo Chinzei) articles, and eventually decided to choose the LPCUSB for my LPC2378 evaluation board. The major reasons are: 1. Tsuneo said that it is the best open source project for LPC23xx. 2. Its Linux driver is ready. (The standard one in the Linux kernel.)
I built a Cygwin/YAGARTO GNU ARM toolchain environment to perform some simple tests for LPCUSB. And found that, the main_serial.c works. Then, I migrated the LPCUSB to the KEIL environment, and the main_serial.c still works. But during the migrations and the tests, I found that, or I guessed that, the LPCUSB USB stack is good; however, its examples are only for demonstrating purpose, so they are not well tested.
The major problem for me currently is that, the [static void USBFrameHandler(U16 wFrame)] function does not work properly, because the [fBulkInBusy] variable has never been reset to FALSE. Actually, the real circumstance is: If I send one byte from the X86 desktop to the LPC2378 board, the LPC2378 can send one byte back to the X86 desktop. If I do not send one byte from the X86 desktop to the LPC2378 board, then the LPC2378 board can not send anything to the X86 desktop. I am not so sure that, it is a bug that I have to fix, or it is not a bug, I just need to implement some more USB functions to complete the mechanism.
I don't actually know that, how it works originally. Is that the host sends data with a BulkOut, and this BulkOut invokes a BulkIn? Or the LPC2378 board sends data to the host when it is polled every milisecond by the host? What is the correct way to send data from the LPC2378 board to the host?
Is there any USB-CDC tutorial for a novice? Or could someone please kindly provide some advices?
Then a "raw IN EP" (not a "bulk IN EP", right?) responds to the host with DATA0/DATA1 Packet.
I think this response is done by the SIE automagically?
I think the physical endpoints are some kind of hardware, equipped with EP_RAM and some USB functionality. But what is the logic endpoints?
Is the BulkIn() function something like the interrupt driven UART Tx procedure? called when the Tx buffer is empty?
Hi Tamir,
Thanks.
My technique is surely an issue. Especially I am an old and "forever junior" engineer. No big company wants to hire me. And the company which hired me, hires me to develop, not to learn. :)
what makes you so sure working for a big company is better? I have worked for a number of large organizations in the past and decided to stop with it more than a year ago, never to return unless I have to. Why? stupid managers all around you, bloated staff, the lack of freedom to do things your way, red-tape, procedures. there are of course advantages, but if you are in this because you like it, I think you'll be much better of in a smaller organization. believe me, what I'm doing now a thousand times for satisfying compared to anything I've done in the past.
As Tamir says, that would not necessarily be any different in a big company!
Any development project must, by definition, involve breaking some new ground - and must, therefore, include some "learning".
Your timescale estimates must include an allowance for this!