Processor Pin 設定值
Processor 的 Pin 的設定值是可以透過設定暫存器值進行修改調整的,通常可以設定的值如下:
- 電壓(1.8V / 3.3V / 2.5V)
- 電流(2mA / 4mA / 8mA / 12mA)
- 三態輸出/預設電平(Hi-Z / Pull-Up / Pull-Down / Bus Keeper)
- 輸入抗噪訊號(Schmitt Trigger / No Hysteresis)
- 信號邊沿速度(Slew Rate Slow / Fast)
- 輸入接收器(Receiver Enable / Input to Core 0)
Driver Disable State(腳位預設/三態)
Driver Disable State 是指「當該腳位的輸出驅動器被關閉(disable)」時,也就是「腳位不主動輸出高電位或低電位」的狀態下,該腳位會呈現什麼電氣特性。
|
(High Impedance) (高阻抗狀態)
|
例子:在三態匯流排(Tri-state bus)上,未被選中的裝置輸出端為 Hi-Z。 |
|
(上拉) |
例子:按鈕輸入腳位常設為 Pull Up,按下時接地產生邏輯 0。 |
|
(下拉) |
|
|
(Keeper) (匯流排保持) |
例子:在多主匯流排(multi-master bus)上避免訊號線因 Hi-Z 而浮動。 |
Schmitt Trigger(SMT)
Schmitt Trigger(施密特觸發器) 是一種帶有「遲滯(Hysteresis)」特性的比較器或輸入電路。
它的功能是:
當輸入電壓緩慢變化時,避免因雜訊或微小擾動而讓輸出抖動(不穩定)。
|
(無遲滯) |
|
|
(有施密特遲滯) |
|
Slew Rate(SR,邊沿速率)
Slew Rate(SR)指的是信號從低電位到高電位(或高到低)變化的速度,也就是:
SR = ΔV / Δt,單位通常是 V/ns 或 V/μs
影響:
- 信號邊沿(rising/falling edge)快慢
- EMI(電磁干擾)大小
- 訊號完整性
|
(慢速上升/下降) |
|
|
(快速上升/下降) |
|
波形示意:
Slow: __/ ̅ ̅ ̅ ̅\__ (邊沿平緩)
Fast: __ ̅ ̅ ̅ ̅__ (邊沿尖銳)
Receiver Enable (REN)
Receiver Enable (REN) 控制 GPIO 腳位的「輸入緩衝器(Input Receiver / Input Buffer)」是否開啟,以及輸入訊號被送往哪裡。
簡單來說,GPIO 腳位可以當作輸出腳(output)或輸入腳(input)。
當它是輸入時,REN 決定:
- 接收器要不要打開?
- 接收的訊號要送給誰(核心或其他模組)?
|
|
|
|
|
|
|
|
|
訊號流差異:
Input to Core 0: 外部訊號 GPIO Receiver Core 0
Receiver Enabled: 外部訊號 GPIO Receiver 內部模組(不一定進核心)
PIN 實例設定
以下是 CPU 的 BGA 針腳(PAD ),每一個 PAD 都是一根 pin 腳。
而它全部的 PAD ,就是 CPU 所支援的所有 pins,GPIO pins 當然也被包含在其中。

在 PAD Ring 文件中,會對每個 PAD 進行說明。
PAD 名稱、IO Ball 位置、IO Domain、Voltage Rail、PWR Ball 及 電壓值。
依 Voltage Rail 的值,可以查看如何修改該 Voltage Rail,例如:
VDDIO_3 0x1082052E [5:4] 00:3.3V - 01:1.8V - 10:2.5V - 11:RSVD
表示此 Voltage Rail - VDDIO_3 的電壓值可以藉由修改暫存器 0x1082052E 的第 4 跟 5 個 bits 值來進行調整。
調整方式如下:
// 先讀取 0x1082052E 的暫存器值:
# devmem 0x1082052E
0x03296592
// 再依讀取到的值,修改其第4 跟 5 個 bits 值來進行調整。
// 讀到的 [5:4] 值為 b01,為 1.8V,調整為 b10,也就是 2.5V:
# devmem 0x1082052E w 0x032165A2
而依據 PAD 名稱,可以找到調整該 pin 設定值的暫存器位址,例如:
GPIO_0 Base Address: 0x10820A00 Offset: 0C Bits:[6:0]
搭配文件裡如下圖的說明,即可透過修改存器值對該 pin 設定值進行調整:

// 先讀取 0x10820A0C 的暫存器值:
# devmem 0x10820A0C
0x02676582
此時,讀到的 [6:0] 值為: b111 0101。
搭配上圖的說明來看,也就是 enable schmitt trigger、enable slew-rate control、8 mA、weak pull-down、enable input receiver。
如果要調整設定值的話,只需要將調整過的值進行寫入即可。
GPIO pin 設定值
Processor 的 Pin 中,有些 Pins 屬於 GPIO pins,可以再依其 GPIO 的 IP 做如下的設定:
Bypass Mode, Direction Mode, Output Enable, Output Value, Input Value, Interrupt Mask, Interrupt Enable, Interrupt Disable, Interrupt Status, Interrupt Type, Interrupt Value, Interrupt On Any.
在以下的例子中,每個 GPIO group 包含 32 根 GPIO Pins。



在 Processor 的 data sheet 中,會有 Address Map 來清楚說明每個 peripheral interface 暫存器的 Address Range。
所以只要找到其 GPIO 暫存器的 Address Range,搭配上述的 offset,就可以從 GPIO 暫存器的值看出來該 GPIO pin 的設定。
舉例來說,如果在 DTS 中,該 GPIO controller 的位址如下:
gpio2:gpio@fec30000 {
reg = <0x0 0xfec30000 0x0 0x400>;
...
...
}
表示此 gpio controller 的暫存器 mapping 到 0xfec30000 的位址。
// 透過讀取 0xfec30000 的暫存器值來取得所包含的 32 根 pins 的 Bypass Mode:
# devmem 0xfec30000
0x000003ff
// 透過讀取 0xfec30004 的暫存器值來取得所包含的 32 根 pins 的 Direction Mode:
# devmem 0xfec30004
0x5ffff800
// 透過讀取 0xfec30008 的暫存器值來取得所包含的 32 根 pins 的 Output Mode:
# devmem 0xfec30008
0xA0010400
除了直接查詢暫存器的值之外,也可以在作業系統透過程式進行查詢:
Reference
ChatGPT
文字內容 或 影像內容 部份參考、引用自網路,如有侵權,請告知。
