外部并行总线与板级扩展

外部并行总线与板级扩展

1. 共性

WEIM、EBI2、GMI、MBUS、UniPhier System Bus和IXP4xx Expansion Bus连接NOR、SRAM、FPGA、LCD、网卡等板级器件。核心任务是把CPU地址窗口映射到chip select,并配置时序。

1
2
3
4
5
CPU address
-> interconnect window
-> chip select
-> address/data/control pins
-> external device

2. i.MX WEIM

imx-weim.c

  • 从DT child读取fsl,weim-cs-timing
  • 根据SoC寄存器布局写每个CS timing;
  • 处理burst clock;
  • 调用of_platform_populate()创建外设。

时序数组长度必须与SoC data一致,错误值可能造成总线锁死或外部器件损坏。

3. Qualcomm EBI2

qcom-ebi2.c配置CS mode和设备timing,支持NAND、SRAM等。Parent完成寄存器配置后populate child。

EBI2 pinctrl、电压域和外部总线宽度必须与板级原理图一致。

4. Tegra GMI

tegra-gmi.c管理clock、reset、chip select、bus width和timing。Runtime/system PM需要确保外设操作期间GMI clock保持。

5. Marvell MBUS

mvebu-mbus.c管理地址decode windows:

  • target/attribute;
  • base/size;
  • remap;
  • DRAM window;
  • PCIe等master可见范围。

Window必须按硬件粒度对齐且不可重叠。错误窗口可能让DMA访问错误外设或越过内存边界。

6. UniPhier System Bus

uniphier-system-bus.c解析每个bank的地址、宽度和timing,将纳秒转换为时钟周期并写控制器,然后populate child。

若目标timing超过字段范围,driver应报错而不是截断。

7. IXP4xx Expansion Bus

intel-ixp4xx-eb.c通过syscon配置CS,支持flash及板级扩展器件。它必须先于child discovery完成,防止child driver以bootloader遗留时序访问。

8. HiSilicon LPC

hisi_lpc.c不同于memory-mapped并行总线:它为ARM64提供ISA I/O port到LPC transaction的间接PIO映射,处理I/O cycle和错误。

使用者调用inb/outb风格接口,底层并非普通MMIO load/store。

9. MOXTET与TS-NBUS

  • MOXTET通过SPI串行探测Turris MOX模块链,注册自定义module devices并控制GPIO/IRQ;
  • TS-NBUS通过GPIO和PWM产生FPGA NBUS时序。

它们是特定板级产品总线,不是通用SPI/GPIO替代层。

10. Device Tree要点

外部总线parent通常提供:

  • reg和clock/reset;
  • #address-cells/#size-cells
  • ranges
  • chip-select timing;
  • bus width;
  • pinctrl;
  • child device compatible。

DT地址转换错误时,child虽然probe成功,也可能访问错误物理地址。

11. 安全与可靠性

  • 不允许用户态随意修改timing/syscon;
  • 外部FPGA/NOR窗口不应映射到非特权进程;
  • DMA-capable child需IOMMU或受限DMA mask;
  • suspend前停止child I/O;
  • reset后必须恢复timing再恢复children。

12. RK3588

RK3588没有使用这些控制器。其外部存储、PCIe和低速外设由专用drivers目录负责;不能选择一个“类似AXI/并行总线”驱动来替代Rockchip控制器。

文章互动

阅读 --

留言

0 条留言

正在加载留言…