You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ENC28J60固件开发:传输长度检查错误排查求助

ENC28J60 传输长度校验错误排查:类型/长度字段的正确计算

核心问题拆解

你遇到的Transmit Length Check Error确实和以太网帧的类型/长度字段直接相关,但这个字段的取值逻辑不是简单填写实际数据长度,要结合以太网帧规范和ENC28J60的硬件要求:

类型/长度字段的两种工作模式

这个16位字段有两种作用,对应不同的校验逻辑:

  • 模式1:长度字段(值 < 0x0600)
    此时字段代表类型/长度字段之后的有效负载总长度,且必须满足以太网最小帧长要求:有效负载长度至少为46字节。
    你发送的"Hello World"只有11字节,远小于46,此时必须填充全0字节凑够46,类型/长度字段要填46,而不是11。如果不填充且填11,芯片会判定长度不合法,触发校验错误。
  • 模式2:协议类型字段(值 ≥ 0x0600)
    当字段值大于等于1536(0x0600)时,芯片会把它当作上层协议类型(比如0x0800对应IPv4,0x0806对应ARP),此时不会触发长度校验逻辑。这种模式更适合你的测试场景:直接把类型/长度字段设为一个合法的协议类型值,就能直接发送11字节的"Hello World",不需要填充。

针对你的测试场景的具体解决步骤

  1. 用协议类型模式(推荐)
    • 把帧的类型/长度字段设为0x0800(IPv4)或0x0806(ARP)这类标准值。
    • 直接把"Hello World"作为有效负载放入发送缓冲区,无需填充。
    • 确保发送缓冲区的帧结构正确:目的MAC(6字节)→ 源MAC(6字节)→ 类型/长度(2字节)→ 有效负载(11字节),CRC由ENC28J60自动生成,无需手动添加。
  2. 用长度字段模式
    • 给"Hello World"添加35字节的填充数据(比如全0),使有效负载总长度达到46字节。
    • 类型/长度字段设为46(十六进制0x002E)。
    • 同样确保帧结构的前14字节(MAC+类型/长度)正确,后接46字节的有效负载。

额外检查点

  • 确认发送缓冲区的起始地址和长度设置正确,芯片能正确读取到完整的帧数据。
  • 检查发送命令的时序是否符合ENC28J60的 datasheet 要求,比如写完缓冲区后是否正确触发发送指令。

内容的提问来源于stack exchange,提问作者Harmandeep Dubb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:37:52