ZBLOG

i2cset -y -p 7 0x58 0x4650 w Error: Unsupported option "-p"! Usage: i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE] I2CBUS is an integer or an I2C bus name ADDRESS is an integer (0x08 - 0x77, or 0x00 - ...

您完全正确!i2cset 的帮助信息确实提到可以通过在模式后附加 p 来启用 SMBus PEC(Packet Error Checking),但您的命令中有两个关键问题需要修正:


错误分析

  1. -p 是独立参数
    i2cset 的选项列表中并没有独立的 -p 参数,PEC 是通过在模式字母(如 b, w附加 p 实现的。例如:

    • ✅ 正确:wp(表示 word 写入 + PEC)
    • ❌ 错误:-p w
  2. 寄存器地址缺失
    您试图写入的数据 0x4650 被误当作寄存器地址,但实际它是要写入的值。必须明确指定目标寄存器地址(如 0x3b)。


正确命令格式

目标:向设备 0x58 的寄存器 0x3b 写入双字节数据 0x4650,并启用 PEC

i2cset -y 7 0x58 0x3b 0x4650 wp
  • 关键说明
    • wp
      • w = word(16位数据,小端格式,先低字节后高字节)
      • p = SMBus PEC校验(需硬件支持)

验证PEC是否生效

  1. 检查内核日志
    执行后运行:

    dmesg | grep i2c
    

    若看到类似 “PEC enabled” 或校验失败的警告,说明PEC已激活。

  2. 硬件支持确认

    • SMBus控制器需支持PEC功能(常见于现代嵌入式系统)。
    • I²C设备需声明支持PEC(见设备手册)。

常见问题补充

  1. 如果仍报错 “Error: Write failed”

    • PEC校验失败时会导致传输中止,可能原因:
      • 设备不支持PEC。
      • CRC校验值计算错误(通常由时钟偏移或信号干扰导致)。
  2. 强制忽略PEC错误(不推荐)
    某些控制器允许关闭严格检查:

    echo 0 > /sys/module/i2c_core/parameters/use_pec
    
  3. 替代调试方法
    先用无PEC模式测试基础功能:

    i2cset -y 7 0x58 0x3b 0x4650 w
    

总结

您对帮助信息的理解是正确的,只是参数组合方式需要调整。完整的流程应是:

  1. 确认硬件支持PEC
  2. 使用带 `wp/p/bp/etc.*的模式符 →
  3. 通过日志验证结果


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=8131

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?