估计说起以太网半双工,很多人快遗忘了,说了你不信,我们最近用起了以太网半双工,说到底为了节省成本,由于通讯机制简单,是个独立网络,用简单的HUB代替了小型网关需要的交换机芯片。
GD32F450的半双工模式下可以选择是否进行冲突检测,寄存器MAC_CFG有个配置位CSD,早期我们调试时,CSD一旦配置为0(即启用冲突检测),通讯就失败。
为此我们也找了GD32的技术支持,对方给的原因是,启动冲突检测时PHY的CRS_DV脚必须在MAC发送时拉高才能正常发送
于是我们找到了PHY确实存在寄存器可以使能发送状态下的载波检测,通过示波器检测,也确实有在MAC发送时拉高,但是这个拉高只拉了一小会,MAC就停止发送了,通过逐个BIT数下来,发现MAC只发送了前导码部分就停止发送了,这又是什么原因呢?
我们做了个推论,可能MAC需要的不仅仅是CRS_DV脚使能,同时需要将MAC发出的数据返回做对比才能正常发送,可是PHY只能返回载波使能信号,不能将发送的数据返回,无奈我们在FPGA内做了逻辑,在无通讯冲突的情况下,将MAC发出的数据返回给MAC,于是乎,通讯成功了,MAC层的冲突检测成功启用。