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)」時,也就是「腳位不主動輸出高電位或低電位」的狀態下,該腳位會呈現什麼電氣特性。

 

Hi-Z
(High Impedance)
(高阻抗狀態)

 

  • 腳位與內部電路幾乎斷開,沒有輸出電流。
  • 就像是「輸出端變成開路(Open)」的狀態。
  • 腳位電壓會被外部電路影響,若無外部拉電阻,電壓會「浮動(Floating)」。
  • 常用於:
  • 腳位暫時不使用時
  • 作為輸入模式
  • 多個裝置共用一條匯流排(避免衝突)

例子:在三態匯流排(Tri-state bus)上,未被選中的裝置輸出端為 Hi-Z。

Pull-Up
(上拉)
  • 當輸出驅動器關閉時,內部會接上一個「弱上拉電阻」到電源電壓(VCC)。
  • 腳位預設會維持在 高電位 (logic 1),除非被外部拉低。
  • 常用於:
    • 開放集極(Open-drain)輸出
    • 防止輸入腳浮動造成不穩定

例子:按鈕輸入腳位常設為 Pull Up,按下時接地產生邏輯 0。

Pull-Down
(下拉)
  • 當輸出驅動器關閉時,內部接上一個「弱下拉電阻」到接地(GND)。
  • 腳位預設會維持在 低電位 (logic 0),除非被外部拉高。
  • 常用於:
    • 類似按鈕輸入設計,但預設狀態是 0
Bus Keeper
(Keeper)
(匯流排保持)
  • 腳位會「記住上一次的邏輯狀態」,並用一個弱回授電路(feedback latch)保持該電位。
  • 若外部沒有驅動,腳位會保持不變;若外部有驅動,腳位會被輕易改變。
  • 用於:
    • 共用匯流排(bus)上避免 Hi-Z 浮動,但又不影響其他裝置驅動
    • 節省功耗(比起 Pull Up/Down 常通電阻)

例子:在多主匯流排(multi-master bus)上避免訊號線因 Hi-Z 而浮動。

 

Schmitt Trigger(SMT)

Schmitt Trigger(施密特觸發器) 是一種帶有「遲滯(Hysteresis)」特性的比較器或輸入電路。

它的功能是:
當輸入電壓緩慢變化時,避免因雜訊或微小擾動而讓輸出抖動(不穩定)。

No Hysteresis
(無遲滯)
  • 只要輸入略高於閾值就變 1,略低就變 0。
  • 若輸入有雜訊在閾值附近抖動,輸出就會不停切換。
    • 無遲滯 反應快但怕雜訊
  • 輸入閾值特性:
    • 只有一個固定閾值(例如 1.5 V)
  • 適合用途:
    • 高速、乾淨信號(例如晶體振盪、數位線)
Schmitt Triggered
(有施密特遲滯)
  • 有兩個不同的閾值:
    • 上升電壓到某點(例如 1.7 V)才轉成 1
    • 降下來到更低電壓(例如1.3 V)才回到 0
  • 在中間的小雜訊範圍內輸出不會跳動 穩定許多
    • 有雜訊抑制(遲滯) 穩定但稍慢
  • 輸入閾值特性:
    • 具有兩個閾值:上升閾值與下降閾值(例如上升 1.7 V、下降 1.3 V)
  • 適合用途:
    • 噪聲較大的輸入信號(例如按鈕、外部感測器)

 

Slew Rate(SR,邊沿速率)

Slew Rate(SR)指的是信號從低電位到高電位(或高到低)變化的速度,也就是:
SR = ΔV / Δt,單位通常是 V/ns 或 V/μs

影響:

  • 信號邊沿(rising/falling edge)快慢
  • EMI(電磁干擾)大小
  • 訊號完整性
Slow
(慢速上升/下降)
  • 電壓變化緩慢 邊沿不尖銳
    • 邊沿緩慢 減少電磁干擾(EMI)
    • 避免 PCB 線路上產生振鈴(ringing)
    • 信號切換較慢 速度受限
Fast
(快速上升/下降)
  • 電壓變化快 邊沿尖銳
    • 邊沿尖銳 訊號切換快,邏輯反應快
    • EMI 可能較大 對 PCB 設計要求高
    • 適合短線或高速匯流排(SPI、I2C clock 高速模式)

波形示意:
Slow:   __/ ̅ ̅ ̅ ̅\__  (邊沿平緩)
Fast:   __ ̅ ̅ ̅ ̅__  (邊沿尖銳)

 

Receiver Enable (REN)

Receiver Enable (REN) 控制 GPIO 腳位的「輸入緩衝器(Input Receiver / Input Buffer)」是否開啟,以及輸入訊號被送往哪裡。

簡單來說,GPIO 腳位可以當作輸出腳(output)或輸入腳(input)。

當它是輸入時,REN 決定:

  • 接收器要不要打開?
  • 接收的訊號要送給誰(核心或其他模組)?
Input to Core 0
  • 啟用接收器,將 GPIO 輸入連接到核心(CPU)。
  • 使用場景:
    • 一般 GPIO 輸入(按鈕、開關、感測器),核心需要知道腳位狀態。
  • 電路上:
    • 啟用接收器,並把訊號送到 Core 0。
Receiver Enabled
  • 啟用接收器,但不送到核心,可能只提供給其他內部模組或外部匯流排監控。
  • 使用場景:
    • 高速匯流排監控、DMA、邏輯比較器或其他內部邏輯模組需要讀腳位,但核心程式不一定直接讀。
  • 電路上:
    • 接收器開啟,可供內部邏輯模組使用(例如 DMA、比較器、外部中斷模組等)。
Receiver Disabled
  • 接收器關閉,GPIO 腳位輸入端不連接到內部邏輯,核心讀不到訊號,腳位像「透明」給外部電路。
  • 使用場景:
    • 純輸出腳(不用接收輸入)。
  • 電路上:
    • 接收器關閉。

訊號流差異:
Input to Core 0: 外部訊號 GPIO Receiver Core 0
Receiver Enabled: 外部訊號 GPIO Receiver 內部模組(不一定進核心)

 

 

PIN 實例設定

以下是 CPU 的 BGA 針腳(PAD ),每一個 PAD 都是一根 pin 腳。
而它全部的 PAD ,就是 CPU 所支援的所有 pins,GPIO pins 當然也被包含在其中。

Processor Pin / GPIO Pin 設定值

在 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 設定值進行調整:
Processor Pin / GPIO 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 Pin / GPIO Pin 設定值
Processor Pin / GPIO Pin 設定值
Processor Pin / GPIO Pin 設定值

在 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

 

除了直接查詢暫存器的值之外,也可以在作業系統透過程式進行查詢:

查詢 GPIO pin 的方向及值

 

 

Reference

ChatGPT

 

 

文字內容 或 影像內容 部份參考、引用自網路,如有侵權,請告知。