summaryrefslogtreecommitdiffstatshomepage
path: root/tests/wipy
diff options
context:
space:
mode:
authorDaniel Campora <daniel@wipy.io>2015-09-09 22:42:42 +0200
committerDaniel Campora <daniel@wipy.io>2015-09-10 08:00:59 +0200
commitf352fe82a5b41730fe6f72a48b92cb2705736d8c (patch)
tree534941a35b29d207b24a467d6bc2ab31e202ddf1 /tests/wipy
parentd265df589e66113399eb065deb933d79895ac69e (diff)
downloadmicropython-f352fe82a5b41730fe6f72a48b92cb2705736d8c.tar.gz
micropython-f352fe82a5b41730fe6f72a48b92cb2705736d8c.zip
tests/wipy: Add I2C tests.
Diffstat (limited to 'tests/wipy')
-rw-r--r--tests/wipy/i2c.py165
-rw-r--r--tests/wipy/i2c.py.exp48
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)