你好,对话框的团队,
我正在开发一个解决方案使用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。
致以最亲切的问候。
布鲁诺
嗨bruno ferrarezi
我不确定你到底想做什么,就我所知,你在一个字节的i2c读写交互后释放i2c,在for循环的第一个循环后,i2c将被禁用,因为i2c_eeprom_release。
由于MT_dialog
谢谢你的回复。
我想发送0xFB, 0XFC字节到0x0A地址。之后,我需要读取0x0A地址。我期望读取0x04和0xA3,但它没有发生。
注意:0x04和0x03表示mac地址号的开始(内置此内存)。
致以最亲切的问候。
布鲁诺。
嗨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
嗨。
我用以下方法解决这个问题:
(i = 0 xfa;我< = 0 xff;我+ +)
{
i2c_eeprom_read_byte(我、缓冲);
}
谢谢!