I’m looking for help from someone much more knowledgeable than me, or my BBB is likely to go flying out the window!
I am running Debian Jessie 8.2 (BBB-eMMC-flasher-debian-8.2-lxqt-4gb-armhf-2015-09-20-4gb) on a BBB Rev C, with Kernel 4.0.8 PREEMPT RT.
I have spidev1.0 enabled, currently connected with an SPI device (a MS5611 barometer, if curious). In running my code, sometimes my SPI command goes out, sometimes nothing goes out (all channels are flat-lined). I would say only about 1/3 of the commands actually go out. It is very repeatable (exactly the same behavior every time the code runs), and depends on what I compile in my code (e.g., if I add a printf statement, different SPI commands will fail).
Here is an example from a logic analyzer. SPI is in mode 3, command is 0xA2, exactly what I wanted to see. I slowed the clock down to 100 kHz even though the barometer is capable of 20 MHz, just to make sure the timing wasn’t too fast for the BBB. (Note: the reply is supposed to be 2 bytes, but clock stops after 1 byte, so clearly I need to figure out what is going on there. However, at least the right command is going out the door.)
When it doesn’t work, the ioctl command returns -1 and the logic analyzer shows that all of the signals are flatline. Not even the clock or CS lines! This is what happens at least 2 out of 3 times, maybe more.
Here is a snippet from the code, in case someone spots an error. In this case, Tx would have been 0xA2, and length would be 2.
`
transfer.tx_buf = (unsigned long) send; //the buffer for sending data
transfer.rx_buf = (unsigned long) receive; //the buffer for receiving data
transfer.len = length; //the length of buffer
transfer.speed_hz = 100000; //the speed in Hz
transfer.bits_per_word = 8; //bits per word
transfer.delay_usecs = 0; //delay in us
// send the SPI message (all of the above fields, inc. buffers)
int status = ioctl(fd, SPI_IOC_MESSAGE(1), &transfer);
`
So… HELP!! Does anyone have a reasonable idea on what might be happening, or how I can fix it? I’ve wasted more than 24 solid hours trying to debug this, to no avail. I’m counting on you experts out there…
Thanks (in advance)!!
Larry