| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- '''
- 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)
|