spi接口设备是一款使用率较高的设备,在用户使用okmx8mq-c时可能需要添加新的spi设备,或者将现有的spi设备从当前的总线上更换到别的总线上,或更换片选。
对于spi驱动不熟悉的人可能不是很了解在更改时都需要哪些操作和注意事项,下面我就来给大家介绍下如何修改。
首先,我们先来了解下okmx8mq–c spi的驱动现状。
关于okmx8mq –c spi的驱动现状
驱动是用bitbang的方式,驱动使用gpio作为spi的片选,而不是使用spi控制器的原生片选。i.mx8mq的spi控制器支持4个片选,我们可以在一个spi总线上添加4个片选连接4个设备。
i.mx8mq有3个spi总线,okmx8mq-c使用了2个,spi1连接了设备mcp2518fd,spi2没有连接设备,而是将引脚通过插座引出,并且片选0的驱动使用了spidev,用户可以通过这个spidev设备在用户空间访问cs0所连接的设备。
i.mx8mq核心板引出了spi3的引脚,但是在开发板上由于引脚复用,spi3的引脚复用成了其他的功能,所以没有作为spi使用。
接下来,我们看下该如何对spi驱动做出具体的修改。
01- 修改cs的gpio
修改spi2的cs0使用的gpio,由gpio5-13 到gpio3-19,修改设备树
ok8mq-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts,找到节点&ecspi2,将cs-gpios = 《&gpio5 13 0》,修改为cs-gpios = 《&gpio3 19 0》。
需要确认你使用的gpio3-19这个引脚的pinmux是gpio功能,如果不是,则需要将其修改成gpio。
代码修改前后对比:
修改前:
修改后:
02- 修改spi设备节点
比如将spi2的cs0从原来的spidev驱动修改为mcp2518fd驱动:
修改设备树
ok8mq-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts,找到节点&ecspi2,将其下spidev@0节点删除,添加mcp2518fd@0节点,这个节点下需要添加的特性需要根据这个设备的驱动添加,是这个spi设备的驱动需要的。
代码修改前后对比:
修改前:
修改后:
03- 增加一个spi设备
给spi2增加一个spidev设备,使用片选gpio3-19:
添加一个片选:
修改设备树
ok8mq-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts,找到节点&ecspi2,将cs-gpios = 《&gpio5 13 0》,修改为cs-gpios = 《&gpio5 13 0》, 《&gpio3 19 0》。
添加spidev设备节点:
继续修改刚才的节点,在节点下添加spidev节点,节点的reg值为1
测试:
使用spidev_test程序,spidev_test -d /dev/spidev1.0 测试片选0,spidev_test -d /dev/spidev1.1测试片选1,测试时是用示波器测量片选对应的gpio,gpio会保持一定时间的低电平,表明该片选被选通。
代码修改前后对比:
修改前:
修改后:
我们上面只是描述了如何将已有的spi设备驱动添加到spi总线上的方法,并不是spi设备自身的驱动的修改方法。
有的spi设备功能非常简单,只需要实现几个操作就行,有的spi设备功能实现非常复杂,对接了linux的驱动接口后,需要非常多的spi操作才能实现功能。
如果是复杂的设备,驱动只能是由芯片厂商来提供了。例如mcp2518fd设备节点。
当我们在添加这个节点的时候,肯定是已经有了2518fd的驱动,添加节点只需要根据硬件原理上的连接方法,将其添加到对应的片选上,而其内的属性在芯片提供的驱动例程上都有对应的例子,只需要添加到节点内即可。
总结:
在面对一个复杂设备时,如果你没有驱动,首先需要做的就是找驱动、添加驱动,然后在spi总线上添加该设备,编译镜像调试这个设备。
对于功能简单的spi设备,只需要些简单的spi操作,就可以使用spidev驱动在用户层完成操作,不需要专门的驱动。
例如一个spi接口的adc芯片,只需要1次spi读写操作就能使adc完成转化并读取转化值的操作,用户层打开spidev设备节点,配置完成后,读取adc值的时候,按照adc的手册,执行一次spi传输操作即可。
双11OPPO K7X发力,配备超大电池、高刷新率屏幕
西部数据公司利用新型高性能解决方案改变移动体验 满足当今及未来用户对高质量内容的需求
意法半导体推出适合LED照明和工业应用的STNRG012控制器
Imagination GPU获赛昉科技选用,助其打造高性能、小尺寸、低成本星光RISC-V AI单板计算机
激光二极管
如何对SPI驱动做出具体的修改
配电室环境监控系统在选煤配电室的应用
航向陀螺仪的组成_航向陀螺仪的功能
hanlp 如何快速从分词仅取出人名
科学家利用3D打印出人类心脏,足以乱真
北京宣布推出两类三款人工智能技术加持的新产品
如何利用示波器快速判断变压器的同名端和异名端
下一代智能电表采用量增长的原因是什么?
中颖电子净利达33%,产品线销售同比增长
如何选用里氏硬度计
高性能5G SoC 新品T820的安全性能分析
看看汽车生产厂商都有哪些360全景环视系统
浅谈计算机仿真技术对各行业发展的重要性和必要性
Auto-Scale如何大幅提升Virtuoso仿真效率?
FCC 5G频谱拍卖结果公示 共筹集25亿美元许可费