以前に↓でおおまかなプロセスを記述

 

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])