Hardware serial debugging in USB stack (Teensy 3.2)

Status
Not open for further replies.

barsk

Member
I'm trying to modify the USB stack with support for Force Feedback (FFB). That involves some hefty modifications in the Teensy USB stack code. However, I lack some debugging method since the USB serial method normally used isn't even up yet when I need my debug output.

So, trying hardware serial instead. I've hooked up a SparkFun FTDI Basic in 3.3V mode and attached to pin 0 and 1 (RX/TX). I've modified the project to listen to that port (COM7) in my case. So far so god. The actual USB code by Paul contains commented lines like these:

serial_print("Desc found, ");

When removing the comments and compiling the code everyting compiles fine, but no output. What I need help with is how to set up the Hardware serial1 port to actually work, and how this is done with BAUD rates and so on. I guess this could be put in some early setup routines in the Teensy code, but I don't know where.
 
You’d have to track down where the (internal, not public) function serial_print() is defined. In Eclipse for example, highlight it and press F3 to open the corresponding source file and jump directly to the implementation of the function.

You’ll find that it’s defined in the serial1.c core file where it is defined to use Serial1 alias UART0. Thus, it definitively should work on pins 0 and 1. But this code does not handle pin multiplexing and other luxury stuff as in the higher level functions. You’ll have to put a Serial1.begin(yourdesiredbaudrate); in your code somewhere before.
 
Last edited:
I did all that. :)
Even on Eclipse even. Been an Eclipse user for 20 years almost (with Java).

Did some digging and found that I need this code to be inserted for instance at beginning of the usb_setup() method in usb_dev.c:
serial_begin(BAUD2DIV(9600));

BAUD2DIV will devide down the baud with respect to crystal settings etc. After this debug printing works, even inside Eclipse (Sloeber) Serial monitor view.
 
Did some more digging and Paul's own serial initialization is in usb_init() in usb_dev.c
I modified the code to include hardware flow control, otherwise I got buffer overruns all the time:
Code:
void usb_init(void)
{
	int i;

	serial_begin(BAUD2DIV(230400));
	serial_set_rts(2); // Added RTS flow control. I.e a wire between pin 2 and the CTS pin on the FTDI Basic from SparkFun (or similar).
	serial_print("usb_init\n");
 
Status
Not open for further replies.
Back
Top