My question is regarding SPI for the Adafruit's BBIO library: https://github.com/adafruit/adafruit-be ... fruit_BBIO
We upgraded to Adafruits BBIO since we upgraded to Debian 9.X where we cannot use PyBBIO. Overall, the library is fantastic, there is just one point of confusion regarding the xfer2 function for SPI and setting bpw to 16. Our PyBBIO read/write/multi-read/multi-write functions were based on 16bits per word instructions to the device. Examples of a read and write to register below:
Code: Select all
def read_adxl_register(reg_number):
spi_read_data = bbio.SPI0.transfer(0, [(((reg_number << 1) | 0x01) << 8)])
return spi_read_data[0] & 0x00FF
def write_adxl_register(reg_number, reg_value):
spi_read_data = bbio.SPI0.transfer(0, [(reg_number << 9) | reg_value])
return spi_read_data[0]
Code: Select all
def read_adxl_register(reg_number):
spi_read_data = spi.xfer2([((reg_number << 1) | 0x01), 0x00]) #R/W set to 1 for read
return spi_read_data[1]
def write_adxl_register(reg_number, reg_value):
spi_read_data = spi.xfer2([(reg_number << 1), reg_value]) #R/W set to 0 for write
return spi_read_data[1]
Code: Select all
def read_adxl_register(reg_number):
spi_read_data = spi.xfer2(0, [(((reg_number << 1) | 0x01) << 8)])
return spi_read_data
As an example, with bpw set to 8, reading register 0x01 as shown below
Code: Select all
print(spi.xfer2([ ((0x01 << 1) | 0x01), 0x00]))
The other SPI settings are set as follows:
spi = SPI(1,0)
spi.mode = 1
spi.msh = 5000000 # default is 16000000 (16Mhz)
Thanks,
Robert