TI中文支持网
TI专业的中文技术问题搜集分享网站

PROCESSOR-SDK-AM64X: AM64X-EVM网络模块I2C读取地址

Part Number:PROCESSOR-SDK-AM64XOther Parts Discussed in Thread:SYSCONFIG

 我这边现在运行网络模块的例程,所有的例程(例如C:\ti\mcu_plus_sdk_am64x_09_01_00_41\examples\networking\lwip\enet_cpsw_socket)必须把I2C Address这里更改为0x68程序才能运行,否则报错

Enabling clocks!
Assertion @ Line: 364 in syscfg/ti_board_config.c: ENET_GET_NUM_MAC_ADDR(numMacMax) <= ENET_BOARD_NUM_MACADDR_MAX : failed !!!

但是这个地方按照我的理解应该是EEPROM的地址,那么他的地址就是0X50,而0x68是RTC的位置,而且所有的例程都是用的0x50,我这边运行例程C:\ti\mcu_plus_sdk_am64x_09_01_00_41\examples\drivers\i2c\i2c_read读取0x50的数据是正常的

1 为什么我在网络模块中用0x50不行?

2 如果我用0x68会不会对我的程序有影响?

Gary Lu:

nub 说:我的理解应该是EEPROM的地址,那么他的地址就是0X50,而0x68是RTC的位置

这个理解是正确的,0x50是EEPROM地址,0x68是RTC地址、

nub 说: 如果我用0x68会不会对我的程序有影响?

改地址会有影响

,

nub:

那根据报错能不能帮忙看下是啥问题?

,

nub:

  这是变量numMacMax在status = EEPROM_read(gEepromHandle[CONFIG_EEPROM0],  I2C_EEPROM_MAC_CTRL_OFFSET, &numMacMax, sizeof(uint8_t));前后的变化,EEPROM模块我是贴的AT24CO2

,

Gary Lu:

我不太理解您的意思,您能重述一下问题吗

,

Gary Lu:

您可以提供一下EEPROM_read实现细节吗

,

nub:

我这边将例程C:\ti\mcu_plus_sdk_am64x_09_01_00_41\examples\networking\lwip\enet_cpsw_socket从SDK添加到CCS里面,不做任何修改,运行的时候程序出错在Assertion @ Line: 364 in syscfg/ti_board_config.c,

报错内容:ENET_GET_NUM_MAC_ADDR(numMacMax) <= ENET_BOARD_NUM_MACADDR_MAX : failed !!!

uint8_t numMacMax;uint8_t validNumMac = 0;status = EEPROM_read(gEepromHandle[CONFIG_EEPROM0],I2C_EEPROM_MAC_CTRL_OFFSET, &numMacMax, sizeof(uint8_t));EnetAppUtils_assert(status == ENET_SOK);EnetAppUtils_assert(ENET_GET_NUM_MAC_ADDR(numMacMax) <= ENET_BOARD_NUM_MACADDR_MAX);macAddrCnt = EnetUtils_min(ENET_GET_NUM_MAC_ADDR(numMacMax), maxMacEntries);

上面代码是报错的地方,出错在EnetAppUtils_assert(ENET_GET_NUM_MAC_ADDR(numMacMax) <= ENET_BOARD_NUM_MACADDR_MAX);

我调试看了EEPROM_read前后numMacMax的值,EEPROM_read前numMacMax值是7,EEPROM_read后numMacMax的值是255,所以

ENET_GET_NUM_MAC_ADDR(255)<=ENET_BOARD_NUM_MACADDR_MAX(这个的值为4)是不成立的

EEPROM我使用的是AT24C02

,

nub:

EEPROM_read是你们官方做的API

int32_t EEPROM_read(EEPROM_Handle handle,uint32_t offset,uint8_t *buf,uint32_t len)
{int32_tstatus = SystemP_FAILURE;EEPROM_Config*config = (EEPROM_Config *) handle;if(config && config->fxns && config->fxns->readFxn){status = config->fxns->readFxn(config, offset, buf, len);}return (status);
}

,

Gary Lu:

nub 说:出错在EnetAppUtils_assert(ENET_GET_NUM_MAC_ADDR(numMacMax) <= ENET_BOARD_NUM_MACADDR_MAX);

建议您依次检查一下EEPROM设备连接正确和初始化过程其次EEPROM读取函数的实现,确保一下它能够正确地读取一个字节的数据,并且不会读取多余的数据。再看看地址设置对不对

,

Gary Lu:

nub 说:EEPROM_read是你们官方做的API

它只是简单地调用了config->fxns->readFxn函数来执行读取操作,可能应该出在EEPROM驱动中

,

nub:

我在运行https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/latest/exports/docs/api_guide_am64x/EXAMPLES_DRIVERS_I2C_READ.html的时候是正常的,都是能读取都255的数据,和官方的一样说明读取是正常的,是不是在EEPROM在网络模块使用的时候得先擦除数据?要不然读取出来得时候一直都是255;地址看了原理图是在0X50的位置,地址是没有问题;还有能否帮忙升级英文论坛问下,谢谢了

,

Gary Lu:

好的,感谢您对TI产品的关注!已将您的问题发布在E2E英文技术论坛上,由资深的英文论坛工程师为您提供帮助。 您也可以点击下帖链接了解进展:

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1319376/processor-sdk-am64x-am64x-evm-network-module-i2c-read-address

,

Gary Lu:

抱歉回复延迟。

从您的问题中我们了解到您有一个定制板。

如果您想根据您的配置更改 EEPROM 地址,则无需在代码中更改,而是在 sysconfig 中更改

我们的 EVM 上没有 RTC,所以您能否提供更多背景信息您想要实现什么以及如何实现?

,

nub:

现在我这边就是想连接上网络,我看了官方的例程都是在0X50的位置读取,但是我这边需要将读取位置更改为0X68,0X68是RTC的,根据您说的我们的 EVM 上没有 RTC,那么是不是我更改为0X68来使用也是没有影响的?

,

Gary Lu:

已跟进

,

Gary Lu:

nub 说:但是我这边需要将读取位置更改为0X68,0X68是RTC的

看起来这是您的定制板(RTC 位于 0x68)。

根据 AM64x-EVM 原理图,我们没有使用 0x68。

https://www.ti.com/lit/zip/sprr462

https://www.ti.com/lit/ug/spruix0d/spruix0d.pdf?ts=1708408084766&ref_url=https%253A%252F%252Fwww.google.com%252F

尽管如此,我还是建议您检查主板和软件上的其他冲突。

www.ti.com/…/spracu5c.pdf

赞(0)
未经允许不得转载:TI中文支持网 » PROCESSOR-SDK-AM64X: AM64X-EVM网络模块I2C读取地址
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1