I was playing with my BrickPi last night and encountered a weird error. If I use the latest NOOBS and map BT to miniuart (http://www.briandorey.com/post/Raspberry-Pi-3-UART-Boot-Overlay-Part-Two), I get odd read/write io errors with LEGO-Motor_test.py. When I update boot/config.txt to disable BT and disable hciuart, it works much better.
I’m not sure why exactly, but I’m guessing the bt hciuart settings causes inconsistent read/write.
I did more experimenting to track down what’s causing the odd io error and I think it’s the serial port. When I disable the serial interface with raspi-config both workarounds don’t get any errors. When I enable the serial interface, after a few iterations of forward and reverse, it gets an IO error.
woolfel, not sure what to do about this. The serial definitely needs to work, but as you point out there still seems to be some issues with the BT and Serial working at the same time. I haven’t tried out the BT, but I can see that as more folks start using the Pi 3, it will become a more pressing issue. What to do? (Seriously, what to do . . . I’m not exactly sure what to do about this)
atleast the experiment confirms there’s issues with the latest Raspbian. I tried it on both Pi 2 B and Pi 3. With Pi 2 and the older raspbian, I didn’t have these odd issues. I can using the older Noobs 1.8.0 this week and report my results. I suspect my Pi 2 will magically work fine with Noobs 1.8.0.
I decided to download the last raspbian wheezy release to see if the serial interference happens with my Pi 2 B. The answer is everything works fine with BrickPi. Tonight I will try looking at raspi forum to see if there are any other work arounds that will work with Raspbian jessie.
with any jessie release of Raspbian, the minute I do sudo apt-get update, it ends up with the latest code and messes up the serial interface.
Good news, I finally found a fix to get around the interference with the serial interface. I had to edit /boot/config.txt by adding this line to the end of the file
device_tree=bcm2709-rpi-2-b.dtb
reboot and that got things to work without any IO errors. The downside is it turns off the built-in Wifi and Bluetooth. I’m going to post a thread on raspi forum and see if there’s some way to hack the device tree so it’s like pi2 but with wifi. I will write up the instructions tonight on my blog.
Hey woolfel, thanks for such an in-depth stab at this! So I just want to clarify: I tested the latest image we published with the BrickPi and it worked. However, I didn’t test the Pi 3 BT. Is this test only necessary for using the BT? Also, is this a general update we should make to our Raspberry Pi image?
I don’t know the answer to that. I don’t fully understand it, but it appears the issue is how Pi 3 connects to the Wifi/BT chip. Using the Pi2 device tree seems to shut off that chip and avoids the IO inference. I have an USB wifi, so I can live with the trade off.
Since Pi 3 uses a single chip that does both Wifi and BT, I don’t know if it’s possible to change the device tree to enable just the Wifi. I suspect the answer isn’t straight forward. I plan to read up on how to edit the device tree and see if I can’t hack a new device tree that enables just the Wifi.
I was thinking of getting another brick pi instead of moving it from my Pi 3 to 2 to B+. I’ll report back what I find.
I was able to download the .rar file instead. That image works fine with my BrickPi and Raspberry Pi 3 running LEGO-Motor_test.py. Since that image is based on Raspbian Wheezy, I’ll go back to my custom Jessie image on Pi 3.
I just tested the latest BrickPi with and without the Pi2 device tree. The serial interference happens with the latest BrickPi and Pi 3 device tree. The same pi 2 device tree fix works for the latest brickpi. Now if only raspberry pi foundation could find a better solution that doesn’t cause interference, and still use the built-in Wifi.