足 IEEE 802.3 中规定最小帧长度为46或者64字节,ST提供的驱动默认情况下不足64字节的会补0x00,填满64字节再发送出去,现在发现一些路由器对于64字节的ARP广播包不应答,该如何设置不自动补0呢?
电脑的IP为192.168.1.3,路由器的IP为192.168.1.1,电脑发送42字节长度(wiresharp不显示4字节CRC)的ARP广播包很快得到路由器的回复。
arp4.png (137.4 KB, 下载次数: 0)
下载附件
数据手册中描述 disable PAD
2019-10-20 16:27 上传
按照手册的描述,修改HAL提供的驱动,HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength) 函数中的一句
heth->TxDesc->Status |=ETH_DMATXDESC_FS|ETH_DMATXDESC_LS|ETH_DMATXDESC_DP;//有修改,帧小于64byte时,自带补齐64B数据,原来为:heth->TxDesc->Status |=ETH_DMATXDESC_FS|ETH_DMATXDESC_LS;
也就是发送时将DP为置1,这样修改过后,wiresharp完全侦听不到设备发出数据了,怀疑是disable PAD置位后,补位项和CRC一起去掉了,导致侦听不到数据
一周热门 更多>