以前に↓でおおまかなプロセスを記述
1ページ64バイトのデータを複数ページで読み書きを実施。
以下コード
'''EEPROMデバイスの接続
・ピンアサイン
Vcc:3.3V
SDA:GPIO14(I2C1)
SCL:GPIO15(I2C1)
GND:GND
・ボード上のジャンパ
WP:Write Protect、H:書込禁止、L:書込許可
A0、A1、A2:アドレスセット(すべてオフでEEPROMスレーブアドレス0x50)
'''
from machine import I2C,Pin
from time import sleep
# setting I2C
id_i2c=1
pin_sda=Pin(14)
pin_scl=Pin(15)
num_freq=400000
mcs_timeout=50000
i2c = I2C(id_i2c,scl=pin_scl,sda=pin_sda,freq=num_freq,timeout=mcs_timeout)
#slave address of i2c
address_i2c = 80 #0x50
#データ領域のbyte数
num_byte_data = 64
#データの数だけバイトアレイでセット(テスト用に64文字を2つ)
str_data_write = [
"PAT24C256_B064M0512XCSTRUDD0006DT0001______L512I081U0911Y2026013",
"S001$3_005_005_016$9_012_003_002_005_005_009_002_021_005$_______"
]
num_page_data = len(str_data_write)
num_head_page = 0
num_end_page = num_head_page + num_page_data
for i_data in range(num_head_page,num_end_page):
#data conversion to bytes
b_data_write = str_data_write[i_data].encode()
#data conversion to bytearray
data_write = bytearray(b_data_write)
#address of データ書込page
address_register = i_data * num_byte_data
#print(address_i2c,address_register)
#EEPROMスレーブアドレス、レジスタアドレス、data,レジスタアドレスビット幅=16
i2c.writeto_mem(address_i2c,address_register,data_write,addrsize=16)
#スリープ(0では次の書込が早すぎてエラーEIOになる)
sleep(0.01)
#データ読出
for i_data in range(num_head_page,num_end_page):
address_register = i_data * num_byte_data
data_read = i2c.readfrom_mem(address_i2c,address_register,num_byte_data, addrsize=16)
print(data_read.decode())
sleep(0.01)
#1データ(1byte)ずつデータの数だけデータを表示。
#for i in range(0,num_data):
#print(i," :",data_read[i])
