時序圖

霍北北發表於2024-05-10

時序圖

  • 時序圖
    • 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. 分析

分析這張時序圖:

  1. 預設電平狀態:CLK和DATA都是預設高電平
  2. 開始訊號及結束訊號:開始訊號CLK拉低5ms;結束訊號CLK和DATA恢復高電平
  3. 操作時序:上升沿接收資料,根據影像,需要先將CLK拉低、配置DATA資料,延時一個週期,再將CLK拉高延時一個週期。
  4. 資料順序:接收資料低位在先

4.3. 列邏輯

列出詳細邏輯:

  1. 初始化高電平
  2. CLK拉低延時5ms
  3. 獲取data最低位資料(儘可能放在資料傳送之外)
  4. 迴圈8次,MCU傳送8位資料
  5. CLK拉低(第1次迴圈的時候沒有明顯作用,但是後續需要)
  6. DATA設定為指令對應邏輯電平
  7. CLK延時一個週期
  8. CLK拉高
  9. CLK延時一個週期
  10. 更新待傳送的資料(儘可能放在資料傳送之外)
  11. 迴圈執行完成之後將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. 總結

  1. 請依據時序圖寫出虛擬碼

others

我記得最一開始接觸時序圖的時候,覺得它好難,不想看。但是這次複習這部分知識的時候,又覺得好簡單,影片兩倍速我都覺得速度有點慢。複習的時候這種時刻最爽了,感覺現在的自己比之前厲害好多。

從我的經驗來說,根據時序圖進行編碼的時候需要注意兩個問題:

  • 一是在通訊的程式碼中不要隨便列印內容進行debug。這個說起來很蠢,但是我就是這樣乾的,為了檢查程式碼執行是否正常,在通訊程式中新增了串列埠列印,本身程式執行就是需要時間的,這種處理很有可能影響正常通訊。
  • 二是如果專案是在RTOS基礎上構建的情況下,需要注意最小的延時範圍。比如我之前的實踐當中,配置FreeRTOS的tick是1ms,我如果想要實現300us的延時,是沒有辦法直接透過系統的delay函式實現的,還是需要使用硬體定時器去處理。

相關文章