I2C与EEPROM-24LC08B通信

6个职位/ 0个新职位
最后发表
mohit3112
离线
最后看到:10个月2周之前
专家
加入:2014-08-04一点
I2C与EEPROM-24LC08B通信

我正在尝试通过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 ();//等待直到没有主活动

设备:
summer20100514
离线
最后看到:4年5个月前
大师
加入:2014-12-30 05:01
你为什么评论这些

你为什么要评论你在这里发布的司机的这些行?Dialog官方的eeprom驱动程序似乎在没有任何修改的情况下工作得很好。

kenneth.er
离线
最后看到:4年10个月前
加入:2015-09-03 15:31
你检查过I2C了吗

你是否检查了示波器上的I2C总线,eeprom是否真的确认了你的写请求?如果没有弄错,那么写入是非阻塞的,因此即使存在NACK,代码也将自始至终执行。
还注意到您的代码注释了i2c_wait_until_eeprom_ready()。如果你的eeprom没有响应,这将进入一个无限循环。如果可能的话,我建议你先用示波器试试看。

运维
离线
最后看到:1年1个月前
加入:2016-01-04 09:20
我有(几乎)一样的

对于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。只需改变一些参数(大小,页面,地址大小,…),然后代码工作。

ajay98
离线
最后看到:两个月三个星期前
加入:2018-07-10个身子
你好,

你好,

我也面临同样的问题与EEPROM MR24M01。我想在EEPROM中写入bond数据。

eeprom_read_byte (),

I2c_wait_until_eeprom_ready()正在得到错误,调试已经停止。已正确校正I2C参数。

PM_Dialog
离线
最后看到:1天9小时前
工作人员
加入:2018-02-08 11:03
嗨ajay98,

嗨ajay98,

正如您在另一个论坛线程中提出的上一个问题中提到的,i2c_wait_until_eeprom_ready()通过发送0x08字节轮询设备,直到设备以ACK响应。i2c_eeprom驱动不支持MR24M01。请查看SDK中的头文件i2c_eeprom.h。您需要参考MR24M01数据表并添加适当的配置。

如果你有任何后续问题,请创建一个新的论坛帖子,因为这个帖子是旧的和关闭的,

谢谢,PM_Dialog