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

Infineon SLB 9670 TPM寄存器写入失败求助(ADSP-BF607平台)

问题分析与解决方案

额外问题解答

是的,操作码中第2-7位(规范中实际为Bit5~Bit0,见下文位定义修正)的传输大小,仅指后续要传输的字节总数:

  • 读操作时:仅包含4字节地址
  • 写操作时:包含4字节地址 + 数据字节数
    不包含操作码本身的1字节。

核心错误点与修正方案

1. 操作码位定义完全理解错误

你混淆了比特位的编号顺序(高位/低位),这是导致写操作被识别为读操作的根本原因。根据PC Client Platform规范第7.4.6节,操作码字节的正确位定义为:

  • Bit7(最高位):读/写标识(1=读,0=写)
  • Bit6:保留位,必须设为0
  • Bit5~Bit0(低6位):传输长度,即后续要传输的字节总数

你当前的操作码把最低位(Bit0)当成第1位,导致读写位、保留位、长度字段的位置全部错位。比如读操作中你用0b10000011,实际低6位是000011(十进制3),但后续传输了4字节地址,仅靠TPM的容错机制才成功;写操作时容错失效,TPM无法解析指令,默认按读操作处理。

2. 写操作的传输长度设置错误

你的写操作中,操作码0b00000011的低6位是3,但后续实际传输了4字节地址+4字节数据=8字节,长度完全不匹配,TPM无法识别为写操作。

3. 数据字节序错误

规范要求传输采用大端序(Big-Endian),即先传最高有效字节。TPM_STS寄存器的commandReady位在最低有效字节(地址0xFED40018)的Bit6,对应值0x40。你当前传的0x40, 0x00, 0x00, 0x00是小端序,会把0x40写到最高有效字节,而非目标位置,导致写入无效。


修正后的写操作示例代码

uint8_t TxData[] = {
        0b00001000,     // Bit7=0(写),Bit6=0(保留),低6位=8(后续8字节:4地址+4数据)
        0xFE, 0xD4,     // 地址高2字节(0xFED4)
        0x00, 0x18,     // 地址低2字节(0x0018),完整地址0xFED40018
        0x00, 0x00,     // 数据高2字节(无意义,保持0)
        0x00, 0x40      // 数据低2字节,最低字节设为0x40(置位commandReady)
};

额外排查建议

  1. 确认Blackfin的通信接口(SPI/I2C)是MSB优先传输比特位,符合TPM的要求;
  2. 写操作前检查TPM状态:确保commandReady位已清零(TPM完成前序命令),否则置位操作可能无效;
  3. 验证SLB9670的电源、复位时序是否符合 datasheet 要求,异常供电会导致TPM指令解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:42:19