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