This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LC4357网口部分有些外设寄存器读写异常

现象1:如下图,调试模式期间,观察EMAC Module寄存器组中从地址0xFCF78500开始到地址0xFCF7867C这个范围内所有寄存器,都显示的是不能读取寄存器的值

现象2:如下图,MACADDRLO地址偏移量是0x500,MACADDRHI地址偏移量是0x504,这两个寄存器都位于现象1中的地址范围内,但MACADDRLO赋值的数据能在程序中用变量i读出,此数据和希望配置的是一致的,而MACADDRHI配置的数据无论配置为多少,读出的都是零

现象3:(1)下图是我给MACADDRLO和MACADDRHI打算配置的MAC地址值,第二行是我屏蔽了的配置值,如果我配置第一行,然后拿另外一个板子给LC4357发送数据,发送的目标地址就是未屏蔽的这行地址,

则LC4357报告接收到的地址和本机MAC地址不匹配,所有收到的数据全部抛弃,在EMAC Module寄存器组中的统计寄存器分组中的RXFILTERED寄存器会同步刷新显示被过滤的数据帧数量;MACADDRHI配置的都是非零值,但系统初始化过程中读取MACADDRHI时显示的是全部为零;MACADDRLO配置的数据在读取后显示是一致的。

(2)如果我采用第二行MAC地址,即LC4357的MAC地址的高32位都配置为0,低16位配置为x51和0xBC,然后另一个板子按此MAC地址给LC4357发送数据,则LC4357报告接收成功,接收到的MAC地址和本机MAC地址匹配成功,所有接收到的数据都进入了接收缓存

对于现象3比较费解,因为如果按第一行MAC地址来配置LC4357的MACADDRLO和MACADDRHI,发送端按此地址给LC4357发数据,结果是LC4357报告MAC地址不匹配,如果按第二个数组来配置,则就成功了,似乎表明LC4357的MAC地址的高32位只能配置成全零。

以上是LC4357网口这块的一些疑问。

  • 更正下,现象2中,MACADDRHI读出来的数据不是全零,而是和写入的数据差别很大

  • 感谢您对TI产品的关注!

    目前手边没有板子,且受公司网络的限制,不方便为您测试并解答该问题。

    为更加有效地解决您的问题,我们建议您将问题发布在E2E英文技术论坛上,将由资深的英文论坛工程师为您提供帮助。

    https://e2e.ti.com/support/microcontrollers/hercules-safety-microcontrollers-group/ 

  • 对于现象2和3,找到解决办法了,下图是我自己写的EMAC中MACADDRLO和MACADDRHI两个寄存器的位域结构体

    对于MACADDRLO寄存器,配置时可以对定义的每个位单独配置数据,如下截图所示。读取得到的数据和配置的是一致的,

    而MACADDRHI则不行!!!!!

    MAC地址数组MAC_Address的值如果按上面代码截图中被屏蔽的那四段代码来配置,我发现只能是最后那条语句能把数据配置进去,前面三条配置的数据都将变成零,而且不管这四条配置语句的顺序如何,都是只能第四条配置语句有效,前三条都将变成零。然后我把配置方式改成一次性写入整个32位,也就是截图中没有屏蔽的那一行代码,结果就配置正确了,然后接收数据就能正确的进行地址匹配来过滤数据包。

    旧问题解决了,但新问题又出现了,就是MACADDRLO可以按位来配置,也能配置正确,为什么MACADDRHI却不能按位来配置呢,只能一次性写入所有的32位。

    关于在英文论坛发帖的问题,我英语不怎么好,所以就没去发帖子,目前虽然不知道这个新出现的问题的根源,但至少把之前的问题解决了,所以就一边用,一边想法解决吧,毕竟也不是主要问题了

  • 谢谢您的详细反馈。若是您还有需要,后续我可以在英文论坛为您发帖

  • 非常感谢,目前这个问题已不是大问题,后面有需要再说吧Slight smile

  • 好的,之后有其他问题欢迎随时来发帖Grinning