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的上升沿接管。