DA14580带有I2C 24AA02E48 MAC地址

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个职位/ 0个新职位
最后发表
bruno_ferrarezi
离线
最后看到:6天13小时前
加入:2017-05-15十八33
DA14580带有I2C 24AA02E48 MAC地址

你好,对话框的团队,
我正在开发一个解决方案使用DA14580 sps蓝牙,它工作得很好,没有问题!对话团队干得好!
现在我需要在我的设计中添加一个24AA02E48 i2c内存来获得一个唯一的MAC地址。
几周前,我设计了一个以太网解决方案,使用另一个arm微控制器和i2c内存没有问题。我使用了下面的代码:
(i = 0 xfa;我< = 0 xff;我+ +)
{
i2c_write_eeprom_poll (i2c1, 0xA0, (unsigned char *)i, 1);
i2c_read_eeprom_polling (i2c1, i, buffer, 1);
mac [i-0xFA][0] =缓冲区;
如果(i = = 0 xff)
{
sprintf(缓冲,“\ n \ rMAC_ADDRESS: % 2 x: % 2 x: % 2 x: % 2 x: % 2 x: % 2 x”,mac [0], mac [1], mac [2], mac [3], mac [4], mac [5]);

现在我试着用DA14580来做它,有些东西是错误的。我正在使用“i2c_eeprom_write_byte(uint32_t address, uint8_t byte)”和“i2c_eeprom_read_byte(uint32_t address, uint8_t *byte)”。
空白read_i2c_mac(空白)
{
uint32_t i, j。
uint8_t缓冲区;

i2c_eeprom_init(I2C_SLAVE_ADDRESS, I2C_SPEED_MODE, I2C_ADDRESS_MODE, I2C_ADDRESS_SIZE);
(i = 0 xfa;我< = 0 xff;我+ +)
{
i2c_eeprom_write_byte (0 xa0我);
i2c_eeprom_read_byte(我、缓冲);
mac (i-0xFA) =缓冲区;
如果(i = = 0 xff)
{
sprintf(缓冲,“\ n \ rMAC_ADDRESS: % 2 x: % 2 x: % 2 x: % 2 x: % 2 x: % 2 x”,mac [0], mac [1], mac [2], 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
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨bruno ferrarezi

嗨bruno ferrarezi

我不确定你到底想做什么,就我所知,你在一个字节的i2c读写交互后释放i2c,在for循环的第一个循环后,i2c将被禁用,因为i2c_eeprom_release。

由于MT_dialog

bruno_ferrarezi
离线
最后看到:6天13小时前
加入:2017-05-15十八33
谢谢你的回复。

谢谢你的回复。

我想发送0xFB, 0XFC字节到0x0A地址。之后,我需要读取0x0A地址。我期望读取0x04和0xA3,但它没有发生。
注意:0x04和0x03表示mac地址号的开始(内置此内存)。

致以最亲切的问候。

布鲁诺。

MT_dialog
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨bruno_ferrarezi,

嗨bruno_ferrarezi,

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

既然你想做上面,把i2c_eeprom_release()以外的循环,以释放I2C事务结束后,我也不该得到场景中你提到你想写两个不同的值在同一个内存地址然后读回相同的内存位置和读0 x03或0 x04,如果你想从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 (0 x0a, 0 xfb);//写入一个字节0xFB到地址0x0A
i2c_eeprom_write_byte (0 x0a, 0 xfc);//写入一个字节0xFC地址0x0A
i2c_eeprom_read_byte (0 x0a,缓冲);//读取0x0A的值
i2c_eeprom_release ();//在I2C事务结束后释放I2C外围设备

还请检查SDK中peripheral_examples文件夹中的i2c_eeprom示例,查看驱动是如何使用的。

由于MT_dialog

bruno_ferrarezi
离线
最后看到:6天13小时前
加入:2017-05-15十八33
嗨。

嗨。

我用以下方法解决这个问题:
(i = 0 xfa;我< = 0 xff;我+ +)
{
i2c_eeprom_read_byte(我、缓冲);

谢谢!