PWM (Pulse Width Modulation)
PWM 頻率公式: (PWM 頻率 = 波形完整週期重複速度)
Fpwm = Fclock / (DIV × PERIOD)
DIV:粗調,分大塊控制 PWM 頻率
PERIOD:細調,精確控制 PWM 頻率與 DUTY 解析度
最常見做法:
先選適合應用的 PWM 頻率 → 透過 DIV 粗調
再用 PERIOD 精調 DUTY 解析度
PWM 頻率公式: (PWM 頻率 = 波形完整週期重複速度)
Fpwm = Fclock / (DIV × PERIOD)
DIV:粗調,分大塊控制 PWM 頻率
PERIOD:細調,精確控制 PWM 頻率與 DUTY 解析度
最常見做法:
先選適合應用的 PWM 頻率 → 透過 DIV 粗調
再用 PERIOD 精調 DUTY 解析度
Processor Pin 設定值
Processor 的 Pin 的設定值是可以透過設定暫存器值進行修改調整的,通常可以設定的值如下:
Driver Disable State(腳位預設/三態)
MAC 與 PHY 之間的 SGMII
以太網介面
GMII, RGMII, SGMII, XGMII, XFI 都是以太網介面(Ethernet Interface)標準。
用來描述 MAC(媒體存取控制)和 PHY(物理層)之間的連接方式,以及支援的速率和訊號線結構。
簡單比較表
D-Bus 簡介
D-Bus 就像是一個「訊息總線」,允許應用程式彼此發送訊息、呼叫函數或訂閱事件。
以下簡單說明以 busctl 指令來跟 D-Bus 互動的範例:
busctl [list]
- 顯示 bus 上所有的 service names,包含 system 及 user session。
- UNIT: System daemon,
- PROCESS: System daemon 所呼叫執行的執行檔。
- NAME: PROCESS 在 D-Bus 所用到的名稱,稱為 bus name,也稱為 service name 或 bus name owner。
- Well-Known Names (Service Names): 由其它 client 使用。
- Unique Names (Connection Names): 由 D-Bus 分配,並於內部使用。
- 在 D-Bus 上的 service 的用途:
- 提供 interfaces 及 objects 供其它 client 端程式使用。
SPI (Serial Peripheral Interface)
SPI 是 SPI Bus 簡稱,是一種用於晶片通信的同步串行通信介面規範,SPI 裝置之間使用全雙工模式通信,是一個 master 搭配一個或多個 slave 的模式。
SPI 使用四根訊號線,如下:
1, SCLK (Serial CLocK): 串列時脈,由 master 發出。
2, MOSI (Master Output Slave Input): 由 master 輸出訊號到 slave。
3, MISO (Master Input Slave Output): 由 slave 輸出訊號到 master。
4, CS/SS (Chip/Slave Select): 選擇 chip/slave,由主機發出。
下圖為 SPI 線路範例,由一個 master 裝置 及三個 slave 裝置組成:

可以看到對 SPI Master 來說,MOSI, SCLK, SS 為 output,MISO 為 input。
SPI 的線路圖範例為:

UART (Universal Asynchronous Receiver/Transmitter)
UART 是一種異步收發傳輸器,是電腦硬體的一部分,將數據透過串列通訊和平行通訊間作傳輸轉換,沒有額外的 clock 資料,所以取樣頻率只能相近,不會相等,即非同步。
UART 通常用在與其他通訊接口 (如 EIA RS-232) 的連接上。
最精簡的情況下,具有收、送訊息的 UART,只需要使用兩根訊號線,如下:
TX (Transmitter): 輸出訊號。
RX (Receiver): 接收訊號。
下圖為 UART 線路範例,由兩個 UART 裝置組成:

裝置的 RX 要與另一個裝置的 TX 互接。
I2C (Inter-Integrated Circuit)
I2C 是 I2C Bus簡稱,也就是 Inter-Integrated Circuit Bus,也就是在 IC 之間的匯流排,使得 IC 跟 IC 可以通訊。
I2C 是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主機板、嵌入式系統或手機用以連接低速週邊裝置而發展。
I2C 使用兩條雙向漏極開路(Open Drain)線,如下:
1, SDA (Serial DAta line): 傳輸資料。
2, SCL (Serial CLock line): 啟動或停止傳輸以及傳送時鐘序列。
下圖為 I2C 線路範例,由兩個 master/slave 裝置 及兩個 slave 裝置組成,並搭配使用上拉電阻:

可以看到 SDA 及 SCL 都是雙向的。
I2C 的線路圖範例為:

在線路圖中,可以看到 SCL 是單向的,表示這個 I2C slave 裝置無法控制 SCL,也就是沒有支援 時脈擴展(clock stretching) 的功能。
Device Tree (DTS) 簡介
Device Tree 的存在,是為了把在 Platform Device 架構中,用來描述硬體資源的部份給抽出來,因為 Platform Device 的檔案是用 C 語言描述的,但概念上,硬體資源的描述應和程式無關也與 Linux 版本無關。
用 C 去描述的話,只要重新定義硬體資源就需要重新編譯核心,很浪費時間,如果不熟 C 語言,也無法修改,因為可能會導致編譯失敗。
Device Tree架構,解決了上述這些問題,不用懂 C 語言也能定義硬體資源,如此硬體工程師也可以做了,因為 pin 腳的功能,硬體工程師最清楚。
硬體資源: 包含 SoC-level (.dtsi)及 board level (.dts)
描述 CPU、RAM size。
描述 Memory-mapped 上的元件、PWM、UART、I2C、SPI 等晶片內部元件的描述,如暫存器位址及大小,中斷號碼、DMA、pinctrl。
描述外部連接裝置,如裝置規格,以 flash 來說,包含 page size、flash size 等資訊,通常寫 device driver 會從這裡取得裝置資訊。
外部裝置通常使用 device tree overlay (產生.dtbo) 的方式而不要直接修改.dts。
Device Tree 的優點:
1. 不用重新 compile source code 就可以更改系統的 configuration。
2. 當硬體只有小小的更改,只需要 dts 檔小改、然後再重新編譯出 dtb 即可。
3. 可以重複使用已存在的 dts 檔,也可以覆蓋過去定義的功能。
4. 從 C 語言中分離出來,使得硬體的描述架構更清楚。
dts vs. dtc vs. dtb
.dts(Device Tree Source) 檔案是一種 ASCII 文字格式的 Device Tree 描述,文字格式非常人性化,適合人類的閱讀習慣。
基本上,在 ARM Linux,一個 .dts 檔案對應一個 ARM 的 machine,一般放置在核心的 arch/arm64/boot/dts/ 目錄。
由於一個 SoC 可能對應多個 machines(一個 SoC 可以對應多個產品和電路板),這些 .dts 檔案可能會包含許多共同的部分,Linux 核心為了簡化,把 SoC 公用的部分或者多個 machines 共同的部分一般提煉為 .dtsi,類似於 C 語言的標頭檔案。其他的 machines 對應的 .dts 就 include 這些 .dtsi。
透過 Tera Term MODEM 傳輸資料
在 PC 端執行 teraterm 與 DUT 透過 UART 連接後,即可在 tera term 視窗開始控制 DUT。
如果此時有檔案傳輸的需求,則可以以 XMODEM 或 YMODEM 或 ZMODEM 直接透過 UART 來進行檔案的傳輸。
以下的傳輸以 ZMODEM 來做為範例,如果要以 XMODEM 或 YMODEM 來傳輸的話,則選在 DUT 以執行 sx 或 sy 來傳送檔案。
而在 Tera Term 上,就直接選擇 XMODEM 或 YMODEM 即可
從 DUT 傳送檔案到 PC 端
在 DUT 端透過執行 sz 來傳送檔案:
s 表示 send,傳送檔案
z 表示使用 ZMODEM 傳輸協議。

USB Pinout 線路
USB 2 (Type A) pinout

最早的 USB 1.1 界面只有定義了四隻接腳:
其中,D+/D- 是一對差分(differential)的雙向資料傳輸界面。
而 V+ / GND 則是用來作為供電使用。