工具/软件:TI-RTOS
您好!
在我的项目中、我希望通过 TI-RTOS 中的 i2协议从器件的 EEPROM 读取 MAC 地址。为此、我创建了一个新任务、从 EEPROM 寄存器读取 MAC 并写入相关的 lUser0和 lUser1、如下所示:
void macInitFxn()
{
I2C_Handle i2c6Handle;
I2C_Params i2c6Params;
uint8_t txBuffer[1];
/* 48位 MAC 地址*/
uint8_t getMacBuffer[6];
I2C_Transaction i2cTransaction;
I2C_Params_init (&i2c6Params);
i2c6Handle = I2C_open (DK_TM4C129X_I2C6、&i2c6Params);
if (i2c6Handle == NULL)
{
log ("I2C 无法正确打开 MAC 地址!\n"\});
返回;
}
/*获取 MAC 地址信息*/
/*从0xFA 到0xFF 的 MAC 地址起始寄存器*/
TxBuffer[0]= 0xFA;
/* EEPROM 的从器件地址*/
i2cTransaction.slaveAddress = 0x50;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = getMacBuffer;
i2cTransaction.ReadCount = 6;
IF (I2C_transfer (i2c6Handle、&i2cTransaction))
{
uint32_t HMAC =((getMacBuffer[0]<<16)|(getMacBuffer[1]<<8)|(getMacBuffer[2]));
uint32_t LMAC =((getMacBuffer[3]<<16)|(getMacBuffer[4]<<8)|(getMacBuffer[5]));
if (FlashUserSet (HMAC、LMAC)!=成功)
{
LOGERR ("MAC 地址无法成功编程");
I2C_Close (i2c6Handle);
返回;
}
if (FlashUserSave()!=成功)
{
LOGERR("无法提交更改 MAC 地址");
I2C_Close (i2c6Handle);
返回;
}
日志("MAC 地址已成功更改");
I2C_Close (i2c6Handle);
返回;
}
LOGERR ("I2C 总线故障\n");
I2C_Close (i2c6Handle);
返回;
}
我看到 LM Flah 编程器的 MAC 地址已成功更改为从 EEPROM 读取的值、即使在 cmd 中使用"arp -a "命令时该值不能被更改。 我看到 FF-FF-FF-FF-FF-FF-FF。在我的代码中更改 MAC 是否存在任何问题? 我是否只读取 LM Flah Porgrammer 的寄存器值? 感谢您的回答。
此致、
Cengizhan YAPICIOĞLU ć