第三章 PX4-Pixhawk-SPI底层驱动解析

第三章 PX4-SPI底层驱动解析

         这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议,至于IIC和串口就可以类似的读写一下,大家看完这个解析后不妨去试试驱动一下can总线协议。

        首先大家是不是觉得奇怪,为什么PX4编译的是一个针对F4的程序而不是其他的。这里我们就需要从整个系统的架构考虑了。我们之前提到过这个系统是基于nuttx操作系统开发的,至于nuttx是一个什么样的系统我们不做过多介绍,总的来说他就是一个类似于ucos的系统就行了。

         nuttx系统的配置时就对处理的器做了选择,具体我们需要追踪到目录

下,里面有一个defconfig文件哦。打开这个文件你可以看到很多以CONFIG开头的定义,有的定义是y有的是not set。这些其实就是类似于C语言的define,定义一些宏,而y就代表yes也就是1。这里面你就可以看到

看到没,支持stm32的,

这些都是哦。里面还有定义了使用stm32AD,DMA,IIC,SDIO,SPI等等。这里can是没有开启的大家到时候开发的时候可以开启

。这个文件里面定义了很多的东西哦,下次找不到一些定义可以的到这里面来找,这里还有定义串口的波特率

。这里要特别记住有几个定义,我这里先贴出来,


这两个是解析rcs的相关东西哦。

         大家还记得PX4是有个协处理的,这个协处理的定义实在路径下的defconfig

,至于defconfig的连接处在哪,那个这个就是nuttx下的工具会自动连接过去的,这个我们不用管,因为我也没去仔细去研究,如果大家有兴趣不妨去研究一下。

         这里说明一下整个系统的启动是以__start开始的,至于为什么需要查看nuttx脚本了,这里贴出来一下

,剩下的大家自己去查看。

         说了这么多终于可以进入到驱动层了,关于SPI协议,其实nuttx这个系统是已经写好的,我们只需要链接过去就行了,can总线也是一样的。

         还记前面提到的nsh_main了吧,这里其实就是APP层的一个入口了文件在这个路径下

,这里我们具体的流程我们暂时不做详细描述,这一章节我们只对SPI这个驱动来解析,大家不要急,在后面我们会慢慢的对整个流程进行一部分一部分解析。在nsh_main中有个函数

。我们追踪进去发现只有一个函数,所以这个很容易就找到。这里面有这个函数

,这里我们我们用suoce insight来看的就需要用到搜索功能,结果一搜索出现好多个这样的文件,不过大家也不用急,告诉大家一个方法我们是针对PX4-V2的硬件。所以我们就针对有关于V2的硬件就行了。所以我们搜索到路径

,里面有个文件是px4fmu2_init.c

这个函数中你就可以看到很多的端口的初始化了哦。那些端口的标号你可查到就在board_config.h中,记住都是v2的硬件哦。我们要找的是SPI端口,所以我们还是去找SPI。在这个函数中你可以看到

这个就是对驱动层的APP链接层喽。


看到没这些初始化和CS片选了。

找到这个了没?这个up_spiinitializa函数需要继续追踪了,我们是针对stm32的,所以这个函数肯定在stm32的库中去找了

找到了哦。看一下这个函数,看到这个了没

,还记得defconfig文件吗?那里有定义哦。接着就是初始化端口了。

。说到这里大家是不是还是不知道怎么连接到nuttxspi库中。不要急,还是在stm32_spi.c这个文件中,大家不妨跑到最前一点去看看是不是有这样的一个结构体

看到没连接过来了哦。前一部分就是nutxx的库了,后面是自己写的,当然这个要一致还有一个宏要注意哦

它们之间存在映射的关系哦所以在之后写初始化的都是SPI_SELECT这个在spi.h中。到时写can的时候别忘了。这里我们再来找一个函数就行stm32_spi1select。这个函数因为有片选的参与,所以我们特别说明,至于其他的设置模式,设置速率大家就自己去研究。这个函数我们还是需要追踪,这下我们追踪到的就是

,这里就行PX4spi的片选了,后期的硬件的读写用到哦。这里面有三个参数

,端口、设备和片选。注意在PX4架构中对这些传感器都是有标号的哦,具体的查找在这个文件中哦

,还是那个原则,找与V2相关的,这里再提一句与硬件相匹配的还有board.h文件这个有两个文件一个是针对F4主控的一个是针对F1协处理器的里面有相关配置,比如晶振这块就在里面还有相关端口的配置也在其中的。在这个文件中我们可以找到这个,看到没都是进行标号的哦。

。在stm32_spi1select中有个片选


这些片选在文件中都是可以查到了,以后写驱动的引脚控制就要在这个文件中写了,便于维护。讲到这里底层的SPI就差不多了。后面我们将会对SPI的具体硬件上的应用做一个解析。

如果文章有什么问题欢迎大家提出来,本人将在第一时间进行更改。如果大家有什么问题也可以随时联系我,可以QQ给我或者邮箱给我,如果大家比较急也可以打电话给我13530699165不过尽量不要打哦。

猜你喜欢

转载自blog.csdn.net/csshuke/article/details/79632312