最后的data值为b'orld!, W\xff\xff\xff\xff\xff',无法解码
时间: 2023-08-26 11:19:07 浏览: 32
非常抱歉,看起来在读取数据时出了一些问题。由于 AT2402 内存芯片的数据存储是按页进行的,所以读取数据时需要注意页的边界。
以下是修正后的示例代码,用于正确读取 AT24C02 内存芯片的数据:
```python
import machine
import time
# 定义 AT24C02 模块的地址
i2c_address = 0x50
# 初始化 I2C 总线
i2c = machine.I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=100000)
# 写入数据到 AT24C02
def write_data(address, data):
i2c.writeto_mem(i2c_address, address, data)
# 从 AT24C02 读取数据
def read_data(address, length):
data = bytearray(length)
i = 0
while i < length:
chunk_size = min(length - i, 32)
chunk = i2c.readfrom_mem(i2c_address, address + i, chunk_size)
data[i:i+chunk_size] = chunk
i += chunk_size
time.sleep_ms(5) # 为了避免读取过快导致错误,延时一小段时间
return data
# 测试写入数据
write_data(0x00, b"Hello, World!")
# 延时一段时间,以便写入完成
time.sleep(1)
# 测试读取数据
data = read_data(0x00, 13)
print(data.decode())
```
在这个修正后的代码中,我使用了 `bytearray` 类型来存储读取的数据,并且使用循环逐页读取数据。每次读取一个页的数据,并将其复制到 `bytearray` 中,直到读取完所有数据。
请再次尝试运行修正后的代码,看看能否正确地解码数据。如果还有其他问题,请随时提问。非常抱歉给你带来困扰!