• <tr id='hbrrUv'><strong id='hbrrUv'></strong><small id='hbrrUv'></small><button id='hbrrUv'></button><li id='hbrrUv'><noscript id='hbrrUv'><big id='hbrrUv'></big><dt id='hbrrUv'></dt></noscript></li></tr><ol id='hbrrUv'><option id='hbrrUv'><table id='hbrrUv'><blockquote id='hbrrUv'><tbody id='hbrrUv'></tbody></blockquote></table></option></ol><u id='hbrrUv'></u><kbd id='hbrrUv'><kbd id='hbrrUv'></kbd></kbd>

    <code id='hbrrUv'><strong id='hbrrUv'></strong></code>

    <fieldset id='hbrrUv'></fieldset>
          <span id='hbrrUv'></span>

              <ins id='hbrrUv'></ins>
              <acronym id='hbrrUv'><em id='hbrrUv'></em><td id='hbrrUv'><div id='hbrrUv'></div></td></acronym><address id='hbrrUv'><big id='hbrrUv'><big id='hbrrUv'></big><legend id='hbrrUv'></legend></big></address>

              <i id='hbrrUv'><div id='hbrrUv'><ins id='hbrrUv'></ins></div></i>
              <i id='hbrrUv'></i>
            1. <dl id='hbrrUv'></dl>
              1. <blockquote id='hbrrUv'><q id='hbrrUv'><noscript id='hbrrUv'></noscript><dt id='hbrrUv'></dt></q></blockquote><noframes id='hbrrUv'><i id='hbrrUv'></i>

                OKMX8MQ-C如何在SPI总线上→添加设备

                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传输操作即可。