工作中遇到一个客户需要通过IMX6DL的EIM总线和fpga通信。需要配置一条8位数据位,5位地址位的EIM总线。

飞凌6DLlinux4.1.15默认没有配置EIM总线。需要添加EIM总线的配置,实际上,和添加一个串口类似,同样是三步:1、添加EIM总线节点2、配置引脚复用3、去掉其他的引脚功能复用。

一、首先进行节点添加。
1、arch/arm/boot/dts/imx6qdl-sabresd.dtsi文件中添加如下

&weim {pinctrl-names = "default";pinctrl-0 = <&pinctrl_weim_fpga &pinctrl_weim_cs0>;#address-cells = <2>;#size-cells = <1>;ranges = <0 0 0x08000000 0x08000000>;status = "disabled"; /* pin conflict with SPI NOR */fsl,weim-cs-gpr = <&gpr>;fpga@0,0 {compatible = "fpga-user";reg = <0 0 0x08000000>;#address-cells = <1>;#size-cells = <1>;bank-width = <2>;fsl,weim-cs-timing = <0x00640081 0x00000010 0x1c0200000x0000c000 0x1404a38e 0x00000000>;};
};

为eim总线的一些配置信息。
2、arch/arm/boot/dts/imx6dl-c-sabresd.dts文件中添加weim节点的控制。

&weim {status = "okay";
};

添加一个weim节点的控制,并设置其状态为okay。

二、添加引脚配置
arch/arm/boot/dts/imx6qdl-sabresd.dtsi文件中添加一个fpga的pinctrl和一个cs引脚的pinctrl。这部分在第一步的weim节点中的pinctrl-0参数对这两个pinctrl有调用。对应的是相应的名字。

 pinctrl_weim_fpga: weimfpgagrp {fsl,pins = <MX6QDL_PAD_EIM_OE__EIM_OE_B             0xb0b1MX6QDL_PAD_EIM_RW__EIM_RW               0xb0b1MX6QDL_PAD_EIM_WAIT__EIM_WAIT_B         0xb060MX6QDL_PAD_EIM_DA5__EIM_AD05            0xb0b1MX6QDL_PAD_EIM_DA4__EIM_AD04            0xb0b1MX6QDL_PAD_EIM_DA3__EIM_AD03            0xb0b1MX6QDL_PAD_EIM_DA2__EIM_AD02            0xb0b1MX6QDL_PAD_EIM_DA1__EIM_AD01            0xb0b1MX6QDL_PAD_EIM_DA0__EIM_AD00            0xb0b1MX6QDL_PAD_CSI0_DATA_EN__EIM_DATA00     0xb0b1 MX6QDL_PAD_CSI0_VSYNC__EIM_DATA01       0xb0b1MX6QDL_PAD_CSI0_DAT4__EIM_DATA02        0xb0b1MX6QDL_PAD_CSI0_DAT5__EIM_DATA03        0xb0b1MX6QDL_PAD_CSI0_DAT6__EIM_DATA04        0xb0b1MX6QDL_PAD_CSI0_DAT7__EIM_DATA05        0xb0b1MX6QDL_PAD_CSI0_DAT8__EIM_DATA06        0xb0b1MX6QDL_PAD_CSI0_DAT9__EIM_DATA07        0xb0b1>;};pinctrl_weim_cs0: weimcs0grp {fsl,pins = <MX6QDL_PAD_EIM_CS0__EIM_CS0_B           0xb0b1>;};

三、去掉用到的引脚的其他复用功能。

  pinctrl_i2c1: i2c1grp {fsl,pins = <
-                               MX6QDL_PAD_CSI0_DAT8__I2C1_SDA          0x4001b8b1
-                               MX6QDL_PAD_CSI0_DAT9__I2C1_SCL          0x4001b8b1
+                       /*      MX6QDL_PAD_CSI0_DAT8__I2C1_SDA          0x4001b8b1
+                               MX6QDL_PAD_CSI0_DAT9__I2C1_SCL          0x4001b8b1      */>;};@@ -1097,10 +1127,10 @@MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17    0x80000000MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18    0x80000000MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19    0x80000000
-                               MX6QDL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN 0x80000000
-                               MX6QDL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN 0x80000000
+                               //MX6QDL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN 0x80000000MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK   0x80000000MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC      0x80000000
-                               MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC     0x80000000
+                               //MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC     0x80000000MX6QDL_PAD_SD1_DAT2__GPIO1_IO19            0x80000000MX6QDL_PAD_SD1_DAT0__GPIO1_IO16            0x80000000MX6QDL_PAD_GPIO_2__GPIO1_IO02              0x80000000

在这次EIM调试中,是以连接fpga来举例的。所以下面是添加fpga的过程:
首先需要添加一个fpga的驱动,这个是提前准备好的,添加到/drvier/misc目录下。然后修改misc下的Makefile:

 obj-$(CONFIG_ECHO)             += echo/obj-$(CONFIG_VEXPRESS_SYSCFG)  += vexpress-syscfg.oobj-$(CONFIG_CXL_BASE)         += cxl/
+obj-y                       += fpga.o

添加上fpga.o的编译需求。
添加完成后编译,烧写。
启动之后查看信息。
root@imx6qsabresd:~# dmesg | grep weim
[ 0.356060] imx-weim 21b8000.weim: Driver registered.

root@imx6qsabresd:~# dmesg | grep fpga
[ 1.500836] imx6q-fpga
[ 1.513477] imx6q-fpga 8000000.fpga: FPGA Driver registered.
出现如上信息,说明eim总线和fpga驱动都挂载正常。
且查看/dev下有fpga节点。
使用测试脚本测试:
oot@imx6qsabresd:~# ./fpga_test write
[ 244.739123] done the fram_open
[ 244.743919] begain the fram_write
[ 244.747259] done the fram_write
[ 245.750637] begain the fram_write
[ 245.754091] done the fram_write
[ 246.757442] begain the fram_write
[ 246.760781] done the fram_write

root@imx6qsabresd:~# ./fpga_test read
[ 258.910519] done the fram_open
[ 258.913744] begain the fram_read
[ 258.916994] addr=0x1-------183-----
[ 258.920497] addr=0x1<<1-------183-----
[ 258.924779] addr=0x3FFFFF<<1-------183-----
[ 258.928988] begain the fram_read
[ 258.932232] addr=0x1-------183-----
[ 258.935804] addr=0x1<<1-------183-----
[ 258.939573] addr=0x3FFFFF<<1-------183-----
[ 258.943845] begain the fram_read
[ 258.947094] addr=0x1-------183-----
[ 258.950596] addr=0x1<<1-------183-----
[ 258.954400] addr=0x3FFFFF<<1-------183-----
[ 258.958602] begain the fram_read
[ 258.961845] addr=0x1-------183-----
[ 258.965432] addr=0x1<<1-------183-----
[ 258.969203] addr=0x3FFFFF<<1-------183-----
示波器看响应引脚是有波形的。说明总线工作正常:

至此EIM总线调试完成,剩下的和fpga设备联调就需要客户自己解决了。

IMX6DL4.1.15支持EIM总线(上)——实际操作,修改内容。相关推荐

  1. OTA在线升级Android7.1系统迅为IMX6Q开发板支持SATA,PCIE,EIM总线,WIFI蓝牙

    iTOP-IMX6 开发平台是基于 NXP 的 IMX6 系列芯片开发的产品,该产品广泛应用于车载系统.数字标牌.金融设备.人机界面.机上娱乐系统.工业控制.医疗设备.仪器仪表.智慧城市.商业电子等多 ...

  2. imx6芯片通过EIM总线外扩多路sja1000 CAN控制器

    有时会需要扩展多个CAN接口,在CAN设备比较多的时候作分组控制.这里使用imx6q芯片,它本身已经自带了两个CAN接口,如果需再扩展4个接口,就要想想办法了.sja1000是一个经典的CAN控制器, ...

  3. STM32外设有哪些?外设在总线上是怎么挂载的?

    一:STM32外设有哪些? 外设在STM32库文件的下面路径下:(STM32库:stm32f10x_stdperiph_lib) stm32f10x_stdperiph_lib\STM32F10x_S ...

  4. 查看pcie总线上的设备ID以及带宽计算

    1.获取设备在pcie总线上的ID:lspci 00:00.0 Class 0600: Device 8086:190f (rev 07)00:01.0 Class 0604: Device 8086 ...

  5. Verilog自制NIOS2外设,Avalon总线上的HelloWorld

    虚无的目录 嘿嘿嘿,开新坑 这个时候有个CPU来测试就太好了 总线 这次只用到下面几个必要的信号 接下来干什么 自制外设的代码 Qsys配置新组件 连接到Nios内核 配置顶层连接 来吧,eclips ...

  6. 总线上加三个终端电阻可以吗_什么是RS485总线?怎么使用RS485总线?

    一.什么是RS485总线? 工业现场经常要采集多点数据,模拟信号或开关信号,一般用到RS485总线,RS-485采用半双工工作方式,支持多点数据通信.RS-485总线网络拓扑一般采用终端匹配的总线型结 ...

  7. IIC总线上挂载多个从机的程序实现

    文章目录 IIC总线上挂载多个从机的程序实现 IIC简介: 1.项目的硬件参考电路: 2.程序实现: 2.1.程序框架设计: 2.2 IIC 总线接口程序实现: 2.3 加速度传感器的配置: 2.4 ...

  8. lumen 支持多文件上传及php 原生多文件上传

    1.webform (注意:name后面一定要加[]号) <form method="post" enctype="multipart/form-data" ...

  9. 看门狗(APB watchdog)简介,各个寄存器简介,把看门狗挂到APB总线上,看门狗的验证测试(1)

    看门狗简介: 在系统运行时,可能会在外界的干扰下,出现程序跑飞的情况,看门狗的出现就是为了解决这种故障.看门狗是一个独立于系统的计数器即它的时钟和系统时钟不是同一个时钟,在看门狗时钟的驱动下,计数器会 ...

  10. 将GPIO外设挂到Cortex_M3 AHB总线上详细流程扩展外设步骤总结

    使用一个外设之前,你要弄明白这个外设是干什么的,它是怎样工作的,它的输入输出接口都是啥,你还要知道怎样给外设分配地址. GPIO的具体硬件结构在这里不多说了.(如果你要自己写代码,那硬件结构必须弄得明 ...

最新文章

  1. java 企业付款_java实现微信企业付款到个人功能
  2. 为什么没有MMU的处理器无法安装操作系统?
  3. ubuntu apt-get彻底卸载软件包
  4. 分布式认证需求-开放认证体系
  5. 使用qt的qtcore库怎么包含_GitHub - coologic/QtCoreExamples: QtCore模块相关类库范例
  6. 最长回文子串java_5. 最长回文子串
  7. 如何使用scss/sass
  8. 【Alpha】Daily Scrum Meeting——Day2
  9. 线上多服务管理工具实例剖析
  10. 在命令行中使用vs编译器
  11. 基于Citespace和vosviewer的文献信息可视化分析技术
  12. 微信公众号一次群发多个推文
  13. 2018年06月 Godaddy自助建站 国内购买域名转入
  14. 句子重写任务近年有哪些值得关注的工作?看这一篇就够了!
  15. vue element-ui table表格自定义纵向合计横向合计
  16. 科学计算自由软件SCILAB
  17. IN和EXISTS的区别和使用
  18. 思科isis路由的优先级_ISIS路由基本配置实验
  19. Android 后台保活,这里有你需要的所有姿势。2019,flutterlistview滚动卡顿
  20. DarkSiders

热门文章

  1. matlab pn码捕获,直扩系统PN码捕获和跟踪的FPGA实现
  2. 震旦adc225打印机连接计算机,震旦ADC225打印机驱动
  3. eclipse java字体大小设置_eclipse怎样设置java代码字体大小? 值得收藏
  4. Redis项目应用场景与实例汇总
  5. python 爬虫基础——淘宝评论
  6. Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。
  7. windows charles 使用教程
  8. 小学数学与计算机整合课优质教案,优秀小学数学教学案例【小学数学教学与信息技术的结合】...
  9. Google 推出的编程学习应用 Grasshopper
  10. MSSQL SQL简繁转换函数