3dc324d3f1
This adds the Python files in the tests/ directory to be formatted with ./tools/codeformat.py. The basics/ subdirectory is excluded for now so we aren't changing too much at once. In a few places `# fmt: off`/`# fmt: on` was used where the code had special formatting for readability or where the test was actually testing the specific formatting.
176 lines
4.1 KiB
Python
176 lines
4.1 KiB
Python
"""
|
|
I2C test for the CC3200 based boards.
|
|
A MPU-9150 sensor must be connected to the I2C bus.
|
|
"""
|
|
|
|
from machine import I2C
|
|
import os
|
|
import time
|
|
|
|
mch = os.uname().machine
|
|
if "LaunchPad" in mch:
|
|
i2c_pins = ("GP11", "GP10")
|
|
elif "WiPy" in mch:
|
|
i2c_pins = ("GP15", "GP10")
|
|
else:
|
|
raise Exception("Board not supported!")
|
|
|
|
i2c = I2C(0, I2C.MASTER, baudrate=400000)
|
|
# try initing without the peripheral id
|
|
i2c = I2C()
|
|
print(i2c)
|
|
i2c = I2C(mode=I2C.MASTER, baudrate=50000, pins=i2c_pins)
|
|
print(i2c)
|
|
|
|
i2c = I2C(0, I2C.MASTER, baudrate=100000)
|
|
print(i2c)
|
|
i2c = I2C(0, mode=I2C.MASTER, baudrate=400000)
|
|
print(i2c)
|
|
i2c = I2C(0, mode=I2C.MASTER, baudrate=400000, pins=i2c_pins)
|
|
print(i2c)
|
|
|
|
addr = i2c.scan()[0]
|
|
print(addr)
|
|
|
|
reg = bytearray(1)
|
|
reg2 = bytearray(2)
|
|
reg2_r = bytearray(2)
|
|
|
|
# reset the sensor
|
|
reg[0] |= 0x80
|
|
print(1 == i2c.writeto_mem(addr, 107, reg))
|
|
time.sleep_ms(100) # wait for the sensor to reset...
|
|
|
|
print(1 == i2c.readfrom_mem_into(addr, 107, reg)) # read the power management register 1
|
|
print(0x40 == reg[0])
|
|
|
|
# now just read one byte
|
|
data = i2c.readfrom_mem(addr, 117, 1) # read the "who am I?" register
|
|
print(0x68 == data[0])
|
|
print(len(data) == 1)
|
|
print(1 == i2c.readfrom_mem_into(addr, 117, reg)) # read the "who am I?" register again
|
|
print(0x68 == reg[0])
|
|
|
|
# now try reading two bytes
|
|
data = i2c.readfrom_mem(addr, 116, 2) # read the "who am I?" register
|
|
print(0x68 == data[1])
|
|
print(data == b"\x00\x68")
|
|
print(len(data) == 2)
|
|
print(2 == i2c.readfrom_mem_into(addr, 116, reg2)) # read the "who am I?" register again
|
|
print(0x68 == reg2[1])
|
|
print(reg2 == b"\x00\x68")
|
|
|
|
print(1 == i2c.readfrom_mem_into(addr, 107, reg)) # read the power management register 1
|
|
print(0x40 == reg[0])
|
|
# clear the sleep bit
|
|
reg[0] = 0
|
|
print(1 == i2c.writeto_mem(addr, 107, reg))
|
|
# read it back
|
|
i2c.readfrom_mem_into(addr, 107, reg)
|
|
print(0 == reg[0])
|
|
|
|
# set the sleep bit
|
|
reg[0] = 0x40
|
|
print(1 == i2c.writeto_mem(addr, 107, reg))
|
|
# read it back
|
|
i2c.readfrom_mem_into(addr, 107, reg)
|
|
print(0x40 == reg[0])
|
|
|
|
# reset the sensor
|
|
reg[0] |= 0x80
|
|
print(1 == i2c.writeto_mem(addr, 107, reg))
|
|
time.sleep_ms(100) # wait for the sensor to reset...
|
|
|
|
# now read and write two register at a time
|
|
print(2 == i2c.readfrom_mem_into(addr, 107, reg2))
|
|
print(0x40 == reg2[0])
|
|
print(0x00 == reg2[1])
|
|
# clear the sleep bit
|
|
reg2[0] = 0
|
|
# set some other bits
|
|
reg2[1] |= 0x03
|
|
print(2 == i2c.writeto_mem(addr, 107, reg2))
|
|
# read it back
|
|
i2c.readfrom_mem_into(addr, 107, reg2_r)
|
|
print(reg2 == reg2_r)
|
|
|
|
# reset the sensor
|
|
reg[0] = 0x80
|
|
print(1 == i2c.writeto_mem(addr, 107, reg))
|
|
time.sleep_ms(100) # wait for the sensor to reset...
|
|
|
|
# try some raw read and writes
|
|
reg[0] = 117 # register address
|
|
print(1 == i2c.writeto(addr, reg, stop=False)) # just write the register address
|
|
# now read
|
|
print(1 == i2c.readfrom_into(addr, reg))
|
|
print(reg[0] == 0x68)
|
|
reg[0] = 117 # register address
|
|
print(1 == i2c.writeto(addr, reg, stop=False)) # just write the register address
|
|
# now read
|
|
print(0x68 == i2c.readfrom(addr, 1)[0])
|
|
|
|
i2c.readfrom_mem_into(addr, 107, reg2)
|
|
print(0x40 == reg2[0])
|
|
print(0x00 == reg2[1])
|
|
|
|
reg2[0] = 107 # register address
|
|
reg2[1] = 0
|
|
print(2 == i2c.writeto(addr, reg2, stop=True)) # write the register address and the data
|
|
i2c.readfrom_mem_into(addr, 107, reg) # check it back
|
|
print(reg[0] == 0)
|
|
|
|
# check for memory leaks...
|
|
for i in range(0, 1000):
|
|
i2c = I2C(0, I2C.MASTER, baudrate=100000)
|
|
|
|
# test deinit
|
|
i2c = I2C(0, I2C.MASTER, baudrate=100000)
|
|
i2c.deinit()
|
|
print(i2c)
|
|
|
|
# next ones should raise
|
|
try:
|
|
i2c.scan()
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
try:
|
|
i2c.readfrom(addr, 1)
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
try:
|
|
i2c.readfrom_into(addr, reg)
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
try:
|
|
i2c.readfrom_mem_into(addr, 107, reg)
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
try:
|
|
i2c.writeto(addr, reg, stop=False)
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
try:
|
|
i2c.writeto_mem(addr, 107, reg)
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
try:
|
|
i2c.readfrom_mem(addr, 116, 2)
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
try:
|
|
I2C(1, I2C.MASTER, baudrate=100000)
|
|
except Exception:
|
|
print("Exception")
|
|
|
|
# reinitialization must work
|
|
i2c.init(baudrate=400000)
|
|
print(i2c)
|