樹莓派 HATs ︰ I2C 拾遺《四》

若是對 I2C 與 python-smbus 不太熟悉的讀者,請先參考

W!o+ 的《小伶鼬工坊演義》︰ 從下而上‧由上往下

W!o+ 的《小伶鼬工坊演義》︰ 一窺全豹之系統設計《解讀》

文本相關對落以及鍊結。

此處以派生三 python3 為例,按造 24C32 Data Sheet 所言,

cat24c32-w1

cat24c32-w2

cat24c32-r1

cat24c32-2

 

建制隨選地址 Random Address 之位元組讀寫 Byte I/O 程式︰

pi@raspberrypi:~ sudo modprobe i2c_dev pi@raspberrypi:~ sudo dtoverlay i2c-gpio i2c_gpio_sda=0 i2c_gpio_scl=1
pi@raspberrypi:~ i2cdetect -y 3      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 00:          -- -- -- -- -- -- -- -- -- -- -- -- --  10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  70: -- -- -- -- -- -- -- --                          </pre>   <pre class="lang:python decode:true ">pi@raspberrypi:~ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from smbus import SMBus
>>> smb=SMBus(3)
>>> EEPROM = 0x50
>>> def 設置目前位置(地址):
...     高位元組 = 地址 // 256
...     低位元組 = 地址 % 256
...     smb.write_i2c_block_data(EEPROM, 高位元組, [低位元組])
... 
>>> def 讀一位元組(地址):
...     設置目前位置(地址)
...     return smb.read_byte(EEPROM)
... 
>>> def 寫一位元組(地址, 資料):
...     高位元組 = 地址 // 256
...     低位元組 = 地址 % 256
...     資料.insert(0,低位元組)
...     smb.write_i2c_block_data(EEPROM, 高位元組, 資料)
...     完成 = 0
...     while not 完成:
...         try:
...             smb.read_byte(EEPROM)
...             完成 = 1
...         except IOError:
...             完成 = 0
... 
>>> 讀一位元組(0)
82
>>> 寫一位元組(0, [80])
>>> 讀一位元組(0)
80
>>> 寫一位元組(0, [82])
>>> 讀一位元組(0)
82
>>> 

 

相信讀者自能掌握其餘的了。