Pinmux、功能组与 GPIO 所有权

Pinmux、功能组与 GPIO 所有权

1. Pin、Group、Function

1
2
3
function "uart2"
-> allowed groups: uart2m0_xfer, uart2m1_xfer, ...
-> pins: gpio0_b5, gpio0_b6...

Core选择 function+group,controller把每个 pin写成对应 mux value。

2. Request

Mux setting enable时,Core为 group pins申请 mux ownership。Disable时释放。debugfs可显示 owner。

3. Strict

strict=true的 controller禁止同一 pin同时由 GPIO和 mux function申请。它防止两个使用者并发控制,但无法发现未通过框架的 bootloader/firmware寄存器修改。

本树 Rockchip pinmux_ops没有设置 strict,也没有 gpio_request_enable;GPIO direction callback会检查当前 mux,若发现已有 mux owner且非GPIO则首次 WARN,随后仍强制切换到 GPIO。故不能把 Core ownership当作 RK3588上的强冲突阻断机制。

4. GPIO range

1
gpio-ranges = <&pinctrl gpio_offset pin_offset count>;

RK3588:

  • gpio0:pin 0–31;
  • gpio1:32–63;
  • gpio2:64–95;
  • gpio3:96–127;
  • gpio4:128–159。

GPIOLIB方向设置会进入 Rockchip gpio_set_direction callback,将 pin切为 GPIO mux 0。

5. Direction

GPIO direction/output在 GPIO bank寄存器;pinconf的 output-high/output-low可能在 mux/config阶段预置 GPIO输出,避免 glitch。

6. Multiple mux routes

同一 peripheral可有 M0/M1/M2多套 pins。只能选择与板级布线一致的一组。某些 mux值还需 route寄存器选择内部信号路径。

7. Conflicts

常见:

  • UART debug与 PWM/IR;
  • I2C与 GPIO reset;
  • SPI与 camera/control;
  • SDMMC与 JTAG;
  • HDMI/DP辅助信号;
  • PCIe reset/clkreq;
  • PMIC interrupt;
  • USB VBUS control。

8. Dynamic switching

运行时在两个 states间切换时,外设应先 quiesce:

1
2
3
4
disable IRQ/DMA
-> put device safe
-> select state
-> restore hardware

只改 mux而不停止硬件会造成毛刺和总线争用。

文章互动

阅读 --

留言

0 条留言

正在加载留言…