micropython: add micropython component
This commit is contained in:
175
components/language/micropython/tests/wipy/i2c.py
Normal file
175
components/language/micropython/tests/wipy/i2c.py
Normal file
@@ -0,0 +1,175 @@
|
||||
"""
|
||||
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)
|
Reference in New Issue
Block a user