diff options
author | Daniel Campora <daniel@wipy.io> | 2015-09-09 22:42:42 +0200 |
---|---|---|
committer | Daniel Campora <daniel@wipy.io> | 2015-09-10 08:00:59 +0200 |
commit | f352fe82a5b41730fe6f72a48b92cb2705736d8c (patch) | |
tree | 534941a35b29d207b24a467d6bc2ab31e202ddf1 /tests/wipy | |
parent | d265df589e66113399eb065deb933d79895ac69e (diff) | |
download | micropython-f352fe82a5b41730fe6f72a48b92cb2705736d8c.tar.gz micropython-f352fe82a5b41730fe6f72a48b92cb2705736d8c.zip |
tests/wipy: Add I2C tests.
Diffstat (limited to 'tests/wipy')
-rw-r--r-- | tests/wipy/i2c.py | 165 | ||||
-rw-r--r-- | tests/wipy/i2c.py.exp | 48 |
2 files changed, 213 insertions, 0 deletions
diff --git a/tests/wipy/i2c.py b/tests/wipy/i2c.py new file mode 100644 index 0000000000..0673b80003 --- /dev/null +++ b/tests/wipy/i2c.py @@ -0,0 +1,165 @@ +''' +I2C test for the CC3200 based boards. +A MPU-9150 sensor must be connected to the I2C bus. +''' + +from pyb import I2C +from pyb import Pin +import os +import pyb + +machine = os.uname().machine +if 'LaunchPad' in machine: + i2c_pins = ('GP11', 'GP10') +elif 'WiPy' in machine: + i2c_pins = ('GP15', 'GP10') +else: + raise Exception('Board not supported!') + +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)) +pyb.delay(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)) +pyb.delay(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)) +pyb.delay(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") + +# reinitialization must work +i2c.init(baudrate=400000) +print(i2c) + diff --git a/tests/wipy/i2c.py.exp b/tests/wipy/i2c.py.exp new file mode 100644 index 0000000000..c50cbf0e52 --- /dev/null +++ b/tests/wipy/i2c.py.exp @@ -0,0 +1,48 @@ +I2C(0, I2C.MASTER, baudrate=100000) +I2C(0, I2C.MASTER, baudrate=400000) +I2C(0, I2C.MASTER, baudrate=400000) +104 +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +True +I2C(0) +Exception +Exception +Exception +Exception +Exception +Exception +Exception +I2C(0, I2C.MASTER, baudrate=400000) |