I am working on a design project involving a BeagleBone Black and an ADXL375 Accelerometer.
Per the data sheet (attached), in order to enable the maximum sampling rate of the ADXL375, I need my BBB to communicate with the ADXL375 over SPI (I2C is not fast enough for this).
I have used the Adafruit library for I2C just to test the functionality of the ADXL375, and I can confirm that the accel. does in fact work. However, I am unsure of how to even perform a simple read of the ADXL375 DEVID register using SPI. I have included my steps for how I think a read should be performed, but I suspect that this process is incorrect as I get no output.
I am using the Adafruit BBIO library which I understand is just a python wrapper for the file spimodule.c. All of this is available here:
https://github.com/adafruit/adafruit-beaglebone-io-python/
Based on that code, I am not sure if I will need to hold CS low using one of the methods/variables of an SPI object or if the writebytes()/readbytes() methods take care of this for me. In other words, I don’t know if I should be doing something like
spi.cshigh = low
spi.writebytes([list])
spi.readbytes(numBytes)
OR if I can just do
spi.writebytes([list])
spi.readbytes(numBytes)
Process for reading from SPI (from python terminal):
from Adafruit_BBIO.SPI import SPI
#using SPI bus 0 on P9 of BBB, assuming i’m using dev0, not really sure how to determine this, but I have no other peripherals connected
spi = SPI(0,0)
#set desired frequency, 2MHz
spi.msh = 2000000
#per the ADXL375 datasheet, when performing a read, need to send a byte where bits 0-5 are address bits (DEVID register is 0x0), bit 6 is a multiple bytes bit (for reading/writing multiple bytes), and bit 7 is a read/write bit where read is ‘1’ and write is ‘0’
#so I use 0b10000000 or 0x80 and call writebytes
spi.writebytes([0x80])
From here I receive no output, even if I do spi.readbytes(1), I get [0] back.
I have a pretty good understanding of Linux, Python, C, and the concept of SPI seems simple enough, but this is my first experience with a BBB. I feel like I am missing something simple like setting CS low, which I don’t think is very clearly documented in the attributes for the SPI library.
Here is some info about my BBB:
lsb_release -a
Distributor ID: Angstrom
Description: Angstrom GNU/Linux v2012.12 (Core edition)
Release: v2012.12
Codename: Core edition
uname -a
Linux beaglebone 3.8.13 #1 SMP Wed Sep 4 09:09:32 CEST 2013 armv7l GNU/Linux
I have also attached the breakout board user guide for the ADXL375. I would be happy to come back with any additional info.
Thanks,
Stuart
ADXL375.pdf (509 KB)
EVAL-ADXL375_User_Guide.pdf (87.7 KB)