IMX6Q EIM总线驱动设备树

EIM总线

EIM处理芯片外部设备的接口,包括生成外部外设和存储器的芯片选择,时钟和控制。 它提供

异步访问具有类似SRAM接口和同步访问的设备具有NOR-Flash-like或PSRAM类接口的设备。

前几天做了个通过EIM和FPGA通讯的驱动,特此记下

相关资料:

  1. IMX芯片手册EIM章节
  2. 总线驱动 :linux-imx_share\drivers\bus\imx-weim.c
  3. linux-imx_share\Documentation\devicetree\bindings\bus\imx-weim.txt

EIM总线的块是可以配置的(一共128M),默认应该只有一个区,如果要通过EIM连接多个外设,就需要对EIM进行配置,划分多个EIM块(多个片选)

以下是EIM支持的块大小配置

在linux初始化化时,imx-weim.c会被执行用于注册、配置EIM总线,下面说说设备树里几个比较重要的属性,以DM9000为例

Ranges

这个参数反应了EIM块的布局,一共有4个参数,分别代表:

1.CS的编号

2. 0(保留)

3.物理地址的映射

4.块大小

<cs-number> 0 <physical address of mapping> <size>

fsl,weim-cs-timing

是对总线的一些时序之类的配置,一共有6个值,其对应的意义在imx-weim.txt中有解释

– fsl,weim-cs-timing: The timing array, contains 6 timing values for the

child node. We can get the CS index from the child

node’s “reg” property. This property contains the values

for the registers EIM_CSnGCR1, EIM_CSnGCR2, EIM_CSnRCR1,

EIM_CSnRCR2, EIM_CSnWCR1, EIM_CSnWCR2 in this order.

 

superyin