DA14580使用I2C 24AA02E48 MAC地址

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
bruno_ferrarezi.
离线
最后一次露面:2个月3天前
加入:2017-05-15 18:33
DA14580使用I2C 24AA02E48 MAC地址

您好对话团队,
我正在使用DA14580 SPS蓝牙开发解决方案,它没有问题,它很好!好的工作对象团队!
现在我需要在设计中添加24AA02E48 I2C内存以获得唯一的MAC地址。
几个星期前,我使用另一个ARM微控制器设计了以太网解决方案,并没有问题。我用这个代码来做到这一点:
for(i = 0xfa; i <= 0xff; i ++)
{
I2C_WRITE_EEPROM_POLLED(I2C1,0xA0,(未签名字符*)I,1);
i2c_read_eeprom_polled(i2c1,i,buffer,1);
Mac [I-0xFA] =缓冲器[0];
如果(i == 0xff)
{
Sprintf(缓冲区,“\ n \ rmac_address:%02x:%02x:%02x:%02x:%02x:%02x”,Mac [0],Mac [1],Mac [2],Mac [3],Mac [3],Mac[4],Mac [5]);
}
现在我试图使用da14580来做到这一点问题。我正在使用“i2c_eeprom_write_byte(uint32_t地址,uint8_t字节)”和“i2c_eeprom_read_byte(uint32_t地址,uint8_t * byte)”。
void read_i2c_mac(void)
{
uint32_t i,j;
UINT8_T缓冲区;

i2c_eeprom_init(i2c_slave_address,i2c_speed_mode,i2c_address_mode,i2c_address_size);
for(i = 0xfa; i <= 0xff; i ++)
{
i2c_eeprom_write_byte(0xa0,i);
i2c_eeprom_read_byte(i,&buffer);
Mac [I-0xFA] =缓冲区;
如果(i == 0xff)
{
Sprintf(&Buffer,“\ n \ RMac_Address:%02x:%02x:%02x:%02x:%02x:%02x”,Mac [0],Mac [1],Mac [2],Mac [3],Mac [3],Mac[4],Mac [5]);
}
i2c_eeprom_release();

}
}
你有任何思想来解决我的问题吗?
我正在使用4k7上拉,i2c_scl_pin = gpio_pin_2,i2c_sda_pin = gpio_pin_3,i2c_slave_address 0x50。
此致。
布鲁诺

设备:
mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
嗨Bruno Ferrarezi,

嗨Bruno Ferrarezi,

我不确定您究竟尝试做什么,就我可以告诉,在一个字节I2C读写交互后,在循环的第一个循环之后释放I2C后,由于I2C_EEPROM_RELEASE,将禁用I2C。

谢谢mt_dialog.

bruno_ferrarezi.
离线
最后一次露面:2个月3天前
加入:2017-05-15 18:33
谢谢你剧烈。

谢谢你剧烈。

我想向0x0a地址发送0xFB,0xFC字节。之后,我需要读取0x0a地址。我希望读0x04和0xA3,但它没有发生。
注意:0x04和0x03意味着MAC地址编号的开头(内置此内存)。

此致。

布鲁诺。

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 11:34
嗨bruno_ferrarezi,

嗨bruno_ferrarezi,

如上所述,您已实现的代码将失败,因为您在实际停止SPI交互之前释放I2C。

由于您想执行上面的操作,请将I2C_EEPROM_REASE()放在循环之外,以便在交易结束后释放I2C,此外,我没有收到您提到的方案您想在同一个中编写两个不同的值内存位置然后读回相同的内存位置并读取0x03或0x04,如果您想从0x0a开始写入内存,则可以使用i2c_eeprom_write_data()。无论如何,为了做你提到的一个测试,你可以尝试如下:

i2c_eeprom_init(i2c_slave_address,i2c_speed_mode,i2c_address_mode,i2c_address_size);//初始化I2C接口
i2c_eeprom_write_byte(0x0a,0xfb);//将一个字节0xFB写入到地址0x0a
i2c_eeprom_write_byte(0x0a,0xfc);//将一个字节0xFc写入到地址0x0a
i2c_eeprom_read_byte(0x0a,buffer);//读回0x0a的值
i2c_eeprom_release();// I2C事务结束后,释放I2C外设后

另请在SDK中的Peripheral_examples文件夹中查看I2C_EEPROM示例,以检查如何使用驱动程序。

谢谢mt_dialog.

bruno_ferrarezi.
离线
最后一次露面:2个月3天前
加入:2017-05-15 18:33
你好。

你好。

我用以下方式解决问题:
for(i = 0xfa; i <= 0xff; i ++)
{
i2c_eeprom_read_byte(i,&buffer);
}

谢谢!