我正在尝试通过I2C接口EEPROM-24LC08B到DA14580。写正在发生,但当读取时,它被卡在这一行WAIT_FOR_RECEIVED_BYTE();.从地址也是正确的0x50,我检查了2K以及4.7K上拉电阻,但无论如何,它不工作。I2C初始化部分与eeprom_test.c中给出的相同。
我正在粘贴我的代码下面-
主要代码
# ifdef EEPROM_TEST
i2c_eeprom_init(0×50,I2C_FAST、I2C_7BIT_ADDR I2C_2BYTES_ADDR);
i2c_eeprom_write_byte (85);
阅读= i2c_eeprom_read_byte (34);
i2c_eeprom_release ();
# endif
读功能:
uint8_t i2c_eeprom_read_byte (uint32_t地址)
{
/ / i2c_wait_until_eeprom_ready ();
i2c_send_address(地址);
/ / WAIT_WHILE_I2C_FIFO_IS_FULL ();//如果Tx FIFO已满,则等待
SEND_I2C_COMMAND (0 x0100);//设置R/W位为1 (read access)
/ / WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待I2C Tx FIFO空
WAIT_FOR_RECEIVED_BYTE ();//等待收到的数据
返回0xFF & GetWord16(I2C_DATA_CMD_REG);//接收字节
}
写功能:
无效i2c_eeprom_write_byte(uint32_t address, uint8_t wr_data)
{
/ / i2c_wait_until_eeprom_ready ();
i2c_send_address(地址);
/ / WAIT_WHILE_I2C_FIFO_IS_FULL ();// I2C Tx FIFO已满时等待
SEND_I2C_COMMAND (wr_data & 0 xff);//发送写数据
/ / WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待Tx FIFO为空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待直到没有主活动
}
你为什么要评论你在这里发布的司机的这些行?Dialog官方的eeprom驱动程序似乎在没有任何修改的情况下工作得很好。
你是否检查了示波器上的I2C总线,eeprom是否真的确认了你的写请求?如果没有弄错,那么写入是非阻塞的,因此即使存在NACK,代码也将自始至终执行。
还注意到您的代码注释了i2c_wait_until_eeprom_ready()。如果你的eeprom没有响应,这将进入一个无限循环。如果可能的话,我建议你先用示波器试试看。
对于i2c EEPROM示例代码,我有(几乎)相同的问题。我使用AT24C32 EEPROM。电线也没什么特别的:SCL和SDA的P0_2和P0_3。
首先,样例代码(SDK 5.0.3)在向EEPROM写入数据时总是卡住。我试图改变一些参数(大小,页面,地址模式,地址大小,…),但没有任何工作。
此AT24C32 EEPROM在其他开发板(Arduino Uno, M0 pro)上工作良好。
经过几天的努力工作,奇怪的事情发生了。不小心,终端(Tera Term)从开发板(套件)断开。
然后我开始示例代码,它成功地运行而没有卡住!
当然,我在终端上什么也没看到。但是把这个AT24C32放到Arduino Uno上,我可以看到EEPROM的内容是由DA14580成功编写的!
所以,我意识到UART和I2C在电线上有冲突。回看手册,P0_2和P0_3确实连接了内置FTDI芯片的RTS和CTS。
对于我的开发工具包(Export,而不是Pro或Basic),只需删除J26的跳线即可。然后示例代码就可以工作了。
我也尝试了一些其他的EEPROM芯片,如Microchip 24AA02和ON Semi 24512。只需改变一些参数(大小,页面,地址大小,…),然后代码工作。
你好,
我也面临同样的问题与EEPROM MR24M01。我想在EEPROM中写入bond数据。
eeprom_read_byte (),
I2c_wait_until_eeprom_ready()正在得到错误,调试已经停止。已正确校正I2C参数。
嗨ajay98,
正如您在另一个论坛线程中提出的上一个问题中提到的,i2c_wait_until_eeprom_ready()通过发送0x08字节轮询设备,直到设备以ACK响应。i2c_eeprom驱动不支持MR24M01。请查看SDK中的头文件i2c_eeprom.h。您需要参考MR24M01数据表并添加适当的配置。
如果你有任何后续问题,请创建一个新的论坛帖子,因为这个帖子是旧的和关闭的,
谢谢,PM_Dialog