提问人:thebeekeeper 提问时间:11/13/2023 更新时间:11/13/2023 访问量:75
从AT24CS32读取序列号
Reading Serial Number from AT24CS32
问:
我正在使用连接到AT24CS32的 Microchip dsPIC33EP 构建嵌入式系统。我正在尝试从 AT24 读取序列号但失败。我的电路板上有 SOT23 封装部件,因此 [A2:A0] 接地并且逻辑为 0。根据数据表的第 6.1 节,我应该使用设备地址来读取序列号。每当我在虚拟写入中使用此地址来设置 eeprom 地址时,我都会在代码和逻辑分析仪上得到一个 NACK。0x58
我可以用相同的代码成功地读取和写入主 eeprom 存储区 uisng 设备地址0x50。
为了尝试调试这一点,我还尝试将所需的序列号内存地址 (0x0800) 写入主设备类型标识符地址。虚拟写入成功,但我总是从读取的数据中接收。这对我来说是有道理的,因为0x0800在主 eeprom 数组的有效范围内。0xFF
作为参考,以下是我用于设置序列号的代码:
I2C1_MESSAGE_STATUS status;
// Serial number 7-bit device type identifier: 0b1011xxx
uint8_t ser_addr = 0x58;
// Word address specified in table 6-2
uint8_t addr_buf[2] = {0x08, 0x00};
I2C1_MasterWrite(addr_buf, 2, ser_addr, &status);
while (status == I2C1_MESSAGE_PENDING) {
__delay32(9000);
}
// Only ever see I2C1_DATA_NO_ACK here, never see the address word make it to the wire
if(status != I2C1_MESSAGE_COMPLETE) {
return false;
}
我的问题是,当试图从这部分读取序列号时,有人能看到我做错了什么吗?我想我一定是误解了数据表的某些内容,但据我所知,我的逻辑分析仪迹线看起来与数据表示例相同。
答: 暂无答案
评论