与EEPROM-24LC08B的I2C通信

6个帖子/ 0新
最后一篇
Mohit3112.
离线
最后一次露面:1年1个月前
专家
加入:2014-08-04 13:45
与EEPROM-24LC08B的I2C通信

我尝试将EEPROM-24LC08B接口到DA14580。写作正在发生,但读书时,它陷入了困境的行为_for_received_byte();.Slave地址也是正确的0x50,我用2k和4.7k上拉电阻检查,但在任何情况下都没有工作。I2C初始化部分与EEPROM_TEST.c中给出的相同。
我正在粘贴下面的代码 -
主要代码
#ifdef eeprom_test.
i2c_eeprom_init(0x50,i2c_fast,i2c_7bit_addr,i2c_2bytes_addr);

i2c_eeprom_write_byte(34,85);
read = i2c_eeprom_read_byte(34);
i2c_eeprom_release();
#万一

读取功能:
UINT8_T I2C_EEPROM_READ_BYTE(UINT32_T地址)
{
/ / i2c_wait_until_eeprom_ready ();
i2c_send_address(地址);

// wait_whille_i2c_fifo_is_full();//等待TX FIFO已满
send_i2c_command(0x0100);//将R / W位设置为1(读取访问)
// wait_until_i2c_fifo_is_empty();//等到I2C TX FIFO空
wait_for_received_byte();//等待收到的数据
返回(0xff&getword16(i2c_data_cmd_reg));//获得收到的字节
}

写作功能:
void i2c_eeprom_write_byte(uint32_t地址,uint8_t wr_data)
{
/ / i2c_wait_until_eeprom_ready ();
i2c_send_address(地址);

// wait_whille_i2c_fifo_is_full();//等待i2c tx fifo已满
send_i2c_command(wr_data&0xff);//发送写入数据
// wait_until_i2c_fifo_is_empty();//等到TX FIFO是空的

wait_until_no_master_actity();//等到没有主活动
}

设备:
SUMMER20100514.
离线
最后一次露面:4年8月前
格鲁鲁
加入:2014-12-30 05:01
为什么你评论这些

为什么你在这里发布的司机中评论这些行?EEPROM的对话框官方驱动程序似乎在没有任何修改的情况下工作。

肯尼斯
离线
最后一次露面:5年1个月前
加入:2015-09-03 15:31
你仔细检查了i2c

如果EEPROM真正确实确实确实确实确实确实确实ack,则在示波器上仔细检查i2c总线如果没有弄错的话,写入是非阻塞的,所以即使没有nack,代码也会通过。
您的代码也注意到您评论了i2c_wait_until_eeprom_ready()。如果您的EEPROM没有响应,则会进入无限循环。我建议您首先尝试使用示波器,如果可能的话。

ops.
离线
最后一次露面:1年3个月前
加入: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术语)断开开发板(套件)。
然后我开始示例代码,它成功运行而不卡住!
当然,我在终端上看不见。但将此AT24C32置于Arduino Uno,我可以看到EEPROM的内容是由DA14580成功写的!
因此,我意识到UART和I2C在线之间存在冲突。返回检查手册,是,P0_2和P0_3确实连接到Build-In FTDI芯片的RTS和CTS。
对于我的开发套件(出口,而不是Pro或Basic),只需删除J26的跳线。然后是示例代码工作。
我还尝试一些其他EEPROM芯片,如Microchip 24aa02和semi 24512.只需更改一些参数(大小,页面,地址大小,......),然后是代码工作。

ajay98
离线
最后一次露面:3天2小时前
加入:2018-07-10 12:12
你好,

你好,

我也与EEPROM MR24M01.I想要在EEPROM中编写债券数据的问题相同。

EEPROM_READ_BYTE(),

i2c_wait_until_eeprom_ready()遇到错误,调试已经停止。I2C参数已正确纠正。

PM_DIALOG.
离线
最后一次露面:1天22小时前
职员
加入:2018-02-08 11:03
嗨ajay98,

嗨ajay98,

正如在另一个论坛线程中引发的先前问题中所提到的那样,I2C_WAIT_UNTIL_EEPROM_READY()通过发送0x08字节来轮询设备,直到设备用ACK响应。此外,不支持MR24M01是I2C_EEPROM驱动程序。请检查SDK中的I2C_EEPROM.H头文件。您需要引用MR24M01数据表并添加相应的配置。

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

谢谢,PM_DIALOG.