時序圖
- 時序圖
- 1. 參考資料
- 2. 基礎
- 3. 符號
- 3.1. 斜線形式的上升沿、下降沿
- 3.2. Either or 訊號
- 3.3. 波形省略
- 3.2.1. 虛線
- 3.2.2. 波浪號
- 3.4. 地址&資料表示
- 4. 例項-WT588F語音晶片時序圖
- 4.1. 瞭解背景
- 4.2. 分析
- 4.3. 列邏輯
- 4.4. 根據邏輯寫程式碼(虛擬碼)
- 5. 總結
- others
1. 參考資料
- 時序圖秒懂指南--微控制器時序圖基本觀看原理--STM32微控制器資料手冊時序圖/波形圖的電平邏輯入門--洋桃電子大百科P009
- 微控制器晶片時序圖究竟怎麼看? - jason的回答 - 知乎
2. 基礎
- 時序圖:用於表示微控制器硬體的底層通訊原理
- 多波形時序圖:同一時間內,多個埠組合出的電平關係變化
- 橫軸:表示時間
- 縱軸:表示邏輯訊號0或者邏輯訊號1
3. 符號
3.1. 斜線形式的上升沿、下降沿
上升沿、下降沿除了直線以外,也有斜線(因為在物理上不可能出現狀態的秒變化)。
3.2. Either or 訊號
表示訊號在這一時間既可以高電平,也可以是低電平,常見於資料線。
3.3. 波形省略
波形省略在圖中有兩種常見的表現形式:
3.2.1. 虛線
3.2.2. 波浪號
3.4. 地址&資料表示
時序圖上常用A來表示Address, D來表示Data
4. 例項-WT588F語音晶片時序圖
4.1. 瞭解背景
MCU向語音晶片傳送控制指令,語音晶片按照指令執行
4.2. 分析
分析這張時序圖:
- 預設電平狀態:CLK和DATA都是預設高電平
- 開始訊號及結束訊號:開始訊號CLK拉低5ms;結束訊號CLK和DATA恢復高電平
- 操作時序:上升沿接收資料,根據影像,需要先將CLK拉低、配置DATA資料,延時一個週期,再將CLK拉高延時一個週期。
- 資料順序:接收資料低位在先
4.3. 列邏輯
列出詳細邏輯:
- 初始化高電平
- CLK拉低延時5ms
- 獲取data最低位資料(儘可能放在資料傳送之外)
- 迴圈8次,MCU傳送8位資料
- CLK拉低(第1次迴圈的時候沒有明顯作用,但是後續需要)
- DATA設定為指令對應邏輯電平
- CLK延時一個週期
- CLK拉高
- CLK延時一個週期
- 更新待傳送的資料(儘可能放在資料傳送之外)
- 迴圈執行完成之後將DATA和CLK拉高
4.4. 根據邏輯寫程式碼(虛擬碼)
#define CLK P1 // 引腳定義
#define DATA P2
void operation(data) // data是傳送的指令資料
{
CLK = 1; // 初始化高電平
DATA = 1;
CLK = 0; // CLK拉低延時5ms
delay_ms(5);
b_data = data & 0x01; // 獲取data最低位資料
for(int i=0; i<8; i++) // 迴圈8次,MCU傳送8位資料
{
CLK = 0; // 第1次迴圈的時候沒有明顯作用,但是後續需要
DATA = b_data; // DATA設定為指令對應邏輯電平
delay_us(300); // CLK延時一個週期
CLK = 1; // CLK拉高
delay_us(300); // CLK延時一個週期
data = data >> 1;
b_data = data & 0x01; // 更新待傳送的資料
}
CLK = 1; // 迴圈執行完成之後將DATA和CLK拉高
DATA = 1;
}
5. 總結
- 請依據時序圖寫出虛擬碼
others
我記得最一開始接觸時序圖的時候,覺得它好難,不想看。但是這次複習這部分知識的時候,又覺得好簡單,影片兩倍速我都覺得速度有點慢。複習的時候這種時刻最爽了,感覺現在的自己比之前厲害好多。
從我的經驗來說,根據時序圖進行編碼的時候需要注意兩個問題:
- 一是在通訊的程式碼中不要隨便列印內容進行debug。這個說起來很蠢,但是我就是這樣乾的,為了檢查程式碼執行是否正常,在通訊程式中新增了串列埠列印,本身程式執行就是需要時間的,這種處理很有可能影響正常通訊。
- 二是如果專案是在RTOS基礎上構建的情況下,需要注意最小的延時範圍。比如我之前的實踐當中,配置FreeRTOS的tick是1ms,我如果想要實現300us的延時,是沒有辦法直接透過系統的delay函式實現的,還是需要使用硬體定時器去處理。