Other Parts Discussed in Thread: TLK110, TMDSICE3359, AM3358
主题中讨论的其他器件:TLK110、 AM3358
工具/软件:TI C/C++编译器
您好!
我使用 TMDSICE3359电路板、TLK110芯片 、在原理图中具有参考符号 U2。 我将其与计算机(Windows 10)连接、并使用 Wireshark 侦听以太网数据包。 TMDSICE3359电路板可读取并写入数据包、不会出现错误。
但并非所有计算机都可以从 TMDSICE3359电路板读取数据包。 大约40%的计算机无法读取这些数据包。 我用自己的主板(使用 am3358处理器)发现它不是操作系统的问题、一些以太网控制器会过滤这些数据包。 因此、我认为我在 MII PRU 的写数据包功能或设置上出错了。
当我使用 RX L1 FIFO -> TX L1 FIFO -> TX MII 端口数据路径模式时、所有计算机都可以正常工作。
我的设置:
RXCFG1 = 0x9 (RX_MUX_SEL = 1;RX_ENABLE = 1)
PRU->TX L1 FIFO -> TX MII 端口数据路径:TXCFG1 = 0x60400301 (TX_MUX_SEL = 1;TX_CLK_DELAY = 6;TX_START_DELAY = 0x40;TX_AUTO_SEQUENCE = 1;TX_ENABLE = 1)
PRU_ICSS_CFG 寄存器:
GP_CFG1 = 0x3 (PRU_GPI_MODE = Mi_RT_MODE)。
我的 PRU 代码:
void main (void) { //清除 SYSCFG[STANDBY_INIT]以启用 OCP 主端口*/ CT_CFG.SYSCFG_BIT.STANDBY_INIT = 0; /* MII_loopback */ _R31 =(1<<18);//rx_reset _R31 =(1<<30);//TX 复位 _DELAY_CYCLES (400); volatile int i = 1; 易失性 uint32_t rx_data; int arpArray[100]={ 0xFFFF、//MAC 0xFFFF、 0xFFFF、 0x3412、//MAC 0x7856、 bbc9a、// 0x0608、//type ARP 0x0100、 0x0080、 0x0406、 0x0100、 0x3412、//MAC 0x7856、 bbc9a、 0x060a、//IP 0x0201、 0x0000、 0x0000、 0x0000、 0x060a、//IP 0x0101、 0x0000 }; (i=22;i<80;i++) arpArray[i]= 0x0; arpArray[0]= 0xFFFF;//如果没有此行,我写入错误的 MAC,我不知道 为什么 arpArray[30]= 0xeac7;//CRC arpArray[31]= 0xfae9;//crc //如果我用命令__R31 =(1<<29)|(1<26)|(1)|(1 <27)进行写入,我不知道为什么 CRC 不等于0x27 while (1)//此周期仅用于写入 { 对于(i=0;i<34;i++) { _R30 = 0xFFFFFF0000|ARpArray[i];//pack 数据 _R31 =(1<<25);//push to the MII TX } _R31 =(1<<29);//EOF __DELAY_CYCLES (4000000);//数据包间的延迟 } 而(1)//此周期仅用于读取 { RX_DATA =_R31; _R31 =(1<<17);//rx_pop16 _DELAY_CYCLES (2); if ((rx_data & 1<<18)&&(1<<18))//get word { CT_SHAREMDMEM.mem[i]= rx_data;//写入字以共享内存 i++;//指针 如果(I >= 3000) I = 1; /*清除标志*/ if ((rx_data & 1<<22)&&(1<<22)) _R31 =(1<<20); CT_SHAREMDMEM.mem[0]= I;//将指针写入到共享内存 }
首先、我想错误是在 CRC 字节 缺失的情况下发生的。 我尝试使用和不使用 CRC 字节、但结果相同。 有些计算机可以读取数据包、另一台计算机不能读取数据包。 我在 PRU 文档中查看电池组结构:
我不会对帧间逻辑感到担心。
Preambule 和 SFD 由 PRU 插入。
数据正常(我可以在 Wireshark 上看到)。
我不会对 CRC 感到担心。 添加时、Wireshark 会显示并写入 CRC 正确。

