13、SPI串行外设接口
13.1 介绍
主要功能
SPI 总线是⼀种以全双工模式运行的同步串行数据链路。TLF35584 在从机模式下进行通信,其中主机(μC)启动数据帧。TLF35584应该通过专用片选线进行寻址。这允许其他从设备连接到SPI总线。
数据传输
开始通信,μC首先使用小于或等于最大频率的频率配置时钟,µC拉低TLF35584的片选。
功能描述
SPI基本访问:MOSI(引脚SDI)上的所有数据均在 SPI 时钟信号(引脚 SCL)的上升沿接收,并且在 SPI 时钟信号(引脚SCL)的下降沿移位(SpiIf_ShiftClock_shiftTransmitDataOnTrailingEdge
)。
CPOL = 0,表示 CLK = 0 时处于空闲态,所以有效状态为 CLK 为高电平时。
CPOL = 1,表示 CLK = 1 时处于空闲态,所以有效状态为 CLK 为低电平时。
CPHA = 0,在时钟的第一个跳变沿(上升沿/下降沿)进行数据采样,在第二个边沿发送数据。
CPHA = 1,在时钟的第二个跳变沿(上升沿/下降沿)进行数据采样,在第一个边沿发送数据。
LeadingEdge:前沿,对应上述的第一个跳变沿
TrailingEdge: 后沿,对应上述的第一个跳变沿
TLF35584 的 SPI 格式:
CMD(1bit)+ Address(6bit)+ Data(8bit)+ Parity(1bit)
0bit:CMD = 1为写操作;CMD = 0为读操作
1~6bit:16进制地址
7~14bit:数据
15bit:Parity,前面15个bit里,1为奇数个,则此位为1;1为偶数个,则此位为0
13.2 对受保护寄存器的SPI写访问
某些内部寄存器(SYSPCFG0、SYSPCFG1、WDCFG0、WDCFG1、FWDCFG、WWDCFG0、WWCDFG1)(04H - 0AH)
需要防止被意外覆盖。可以通过读取寄存器 PROTSTAT(28H)
中的 LOCK 位来检查保护状态。
仅在通过 SPI 发送专用 32 位 UNLOCK 序列后才能对这些寄存器进行写访问。需要发送四个字节,中间没有任何其他SPI写访问。执行此操作时出错将重置序列检测,即必须发送新的 UNLOCK 序列。如果在期间检测到对任何其他寄存器的写访问,然后访问 PROTCFG,则会生成中断,并且成功检测到的 UNLOCK 序列字节数将设置为零。在 INIT、NORMAL 和 WAKE 状态下可以访问受保护的寄存器。
UNLOCK 序列由 4 个连续字节 (1:0xAB; 2:0xEF; 3:0x56; 4:0x12)
的 32 位序列组成,必须在其间没有其他 SPI 写访问的情况下发送这些序列。通过读取寄存器 PROTSTAT(28H)
可以检查每个写入字节的正确性。⼀旦成功执行解锁序列,就可以写入任何受保护的配置请求寄存器。为了确保正确写入受保护的配置请求寄存器,微控制器应读回寄存器值并通过检查数据来验证正确性。写入受保护的配置请求寄存器的数据位在读取操作期间被反转发回,这意味着微控制器可以计算读取的寄存器数据和预期的数据的异或。如果寄存器数据正确,结果应为 0xFF。TLF35584 不会检查寄存器中值的正确性。
仅在成功执行 LOCK 序列后,所有受保护的配置请求寄存器值才会由相应的功能捕获。成功的 LOCK 序列由 4 个连续字节(1:0xDF;2:0x34;3:0xBE;4:0xCA)
组成的 32 位序列组成,发送时必须在其间没有其他 SPI 写访问。通过读取寄存器 PROTSTAT可以检查每个写入字节的正确性。
执行此操作时出错将重置序列检测,即必须发送新的 LOCK 序列。在这种情况下(LOCK 序列之间的任何 SPI 写访问)都会生成中断。
检测到成功的 LOCK 序列后,配置寄存器和所有内部功能都会使用受保护的配置请求寄存器中的值进行更新。uC的责任是通过将新值写入特定寄存器或读回应该保持不变的寄存器来确保所有寄存器都正确配置。不支持对受保护寄存器进行部分重新配置,即仅配置单个功能并保持其他功能不变,因为成功的 LOCK 序列会将所有受保护的配置请求寄存器接管到配置中(RSYSPCFG0、RSYSPCFG1、RWDCFG0、RWDCFG1、RFWDCFG、RWWDCFG0、RWWDCFG1)(0BH-11H)
。
锁定序列后,最大内部配置时间。必须考虑 60µs 以确保新配置被接管。
受影响的功能:
- WWD 和 FWD 的所有看门狗配置寄存器
- 在器件处于休眠状态时启用 WD
- 所有错误引脚监控配置寄存器
- 在 FSM 处于休眠状态时启⽤错误引脚监控
- 用于启用或禁用 STDBY LDO 的专用寄存器
- 不配置 SS2 延迟时间故障事件导致 FAILSAFE 状态
对任何受保护的配置请求寄存器的读访问始终是可能的
13.3 SPI 写启动状态转换请求和稳压器配置
为了请求 LDO 配置的状态转换或更改,请求数据必须依次写入两个独立的寄存器 DEVCTRL(15H)和DEVCTRLN(16H)
。与写入DEVCTRL
的数据相比,写入 DEVCTRLN
的数据必须按位反转。仅当两个寄存器连续写入(第⼀个 DEVCTRL 和第⼆个DEVCTRLN
)时,该请求才会被接受,并将在第⼆个命令结束时由CS的上升沿接管。