第三章 PX4-SPI底层驱动解析
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
第三章?PX4-SPI底層驅(qū)動(dòng)解析
?????????這一章節(jié)我們會(huì)對(duì)PX4的底層驅(qū)動(dòng)進(jìn)行解析,我們這里主要解析的是SPI協(xié)議,因?yàn)檫@個(gè)協(xié)議是所有傳感器的一個(gè)協(xié)議,至于IIC和串口就可以類似的讀寫(xiě)一下,大家看完這個(gè)解析后不妨去試試驅(qū)動(dòng)一下can總線協(xié)議。
????????首先大家是不是覺(jué)得奇怪,為什么PX4編譯的是一個(gè)針對(duì)F4的程序而不是其他的。這里我們就需要從整個(gè)系統(tǒng)的架構(gòu)考慮了。我們之前提到過(guò)這個(gè)系統(tǒng)是基于nuttx操作系統(tǒng)開(kāi)發(fā)的,至于nuttx是一個(gè)什么樣的系統(tǒng)我們不做過(guò)多介紹,總的來(lái)說(shuō)他就是一個(gè)類似于ucos的系統(tǒng)就行了。
?????????在nuttx系統(tǒng)的配置時(shí)就對(duì)處理的器做了選擇,具體我們需要追蹤到目錄
下,里面有一個(gè)defconfig文件哦。打開(kāi)這個(gè)文件你可以看到很多以CONFIG開(kāi)頭的定義,有的定義是y有的是not set。這些其實(shí)就是類似于C語(yǔ)言的define,定義一些宏,而y就代表yes也就是1。這里面你就可以看到
看到?jīng)],支持stm32的,
這些都是哦。里面還有定義了使用stm32的AD,DMA,IIC,SDIO,SPI等等。這里can是沒(méi)有開(kāi)啟的大家到時(shí)候開(kāi)發(fā)的時(shí)候可以開(kāi)啟
。這個(gè)文件里面定義了很多的東西哦,下次找不到一些定義可以的到這里面來(lái)找,這里還有定義串口的波特率
。這里要特別記住有幾個(gè)定義,我這里先貼出來(lái),
這兩個(gè)是解析rcs的相關(guān)東西哦。
?????????大家還記得PX4是有個(gè)協(xié)處理的,這個(gè)協(xié)處理的定義實(shí)在路徑下的defconfig
,至于defconfig的連接處在哪,那個(gè)這個(gè)就是nuttx下的工具會(huì)自動(dòng)連接過(guò)去的,這個(gè)我們不用管,因?yàn)槲乙矝](méi)去仔細(xì)去研究,如果大家有興趣不妨去研究一下。
?????????這里說(shuō)明一下整個(gè)系統(tǒng)的啟動(dòng)是以__start開(kāi)始的,至于為什么需要查看nuttx腳本了,這里貼出來(lái)一下
,剩下的大家自己去查看。
?????????說(shuō)了這么多終于可以進(jìn)入到驅(qū)動(dòng)層了,關(guān)于SPI協(xié)議,其實(shí)nuttx這個(gè)系統(tǒng)是已經(jīng)寫(xiě)好的,我們只需要鏈接過(guò)去就行了,can總線也是一樣的。
?????????還記前面提到的nsh_main了吧,這里其實(shí)就是APP層的一個(gè)入口了文件在這個(gè)路徑下
,這里我們具體的流程我們暫時(shí)不做詳細(xì)描述,這一章節(jié)我們只對(duì)SPI這個(gè)驅(qū)動(dòng)來(lái)解析,大家不要急,在后面我們會(huì)慢慢的對(duì)整個(gè)流程進(jìn)行一部分一部分解析。在nsh_main中有個(gè)函數(shù)
。我們追蹤進(jìn)去發(fā)現(xiàn)只有一個(gè)函數(shù),所以這個(gè)很容易就找到。這里面有這個(gè)函數(shù)
,這里我們我們用suoce insight來(lái)看的就需要用到搜索功能,結(jié)果一搜索出現(xiàn)好多個(gè)這樣的文件,不過(guò)大家也不用急,告訴大家一個(gè)方法我們是針對(duì)PX4-V2的硬件。所以我們就針對(duì)有關(guān)于V2的硬件就行了。所以我們搜索到路徑
,里面有個(gè)文件是px4fmu2_init.c中
這個(gè)函數(shù)中你就可以看到很多的端口的初始化了哦。那些端口的標(biāo)號(hào)你可查到就在board_config.h中,記住都是v2的硬件哦。我們要找的是SPI端口,所以我們還是去找SPI。在這個(gè)函數(shù)中你可以看到
這個(gè)就是對(duì)驅(qū)動(dòng)層的APP鏈接層嘍。
看到?jīng)]這些初始化和CS片選了。
找到這個(gè)了沒(méi)?這個(gè)up_spiinitializa函數(shù)需要繼續(xù)追蹤了,我們是針對(duì)stm32的,所以這個(gè)函數(shù)肯定在stm32的庫(kù)中去找了
找到了哦。看一下這個(gè)函數(shù),看到這個(gè)了沒(méi)
,還記得defconfig文件嗎?那里有定義哦。接著就是初始化端口了。
。說(shuō)到這里大家是不是還是不知道怎么連接到nuttx的spi庫(kù)中。不要急,還是在stm32_spi.c這個(gè)文件中,大家不妨跑到最前一點(diǎn)去看看是不是有這樣的一個(gè)結(jié)構(gòu)體
看到?jīng)]連接過(guò)來(lái)了哦。前一部分就是nutxx的庫(kù)了,后面是自己寫(xiě)的,當(dāng)然這個(gè)要一致還有一個(gè)宏要注意哦
它們之間存在映射的關(guān)系哦所以在之后寫(xiě)初始化的都是SPI_SELECT這個(gè)在spi.h中。到時(shí)寫(xiě)can的時(shí)候別忘了。這里我們?cè)賮?lái)找一個(gè)函數(shù)就行stm32_spi1select。這個(gè)函數(shù)因?yàn)橛衅x的參與,所以我們特別說(shuō)明,至于其他的設(shè)置模式,設(shè)置速率大家就自己去研究。這個(gè)函數(shù)我們還是需要追蹤,這下我們追蹤到的就是
,這里就行PX4的spi的片選了,后期的硬件的讀寫(xiě)用到哦。這里面有三個(gè)參數(shù)
,端口、設(shè)備和片選。注意在PX4架構(gòu)中對(duì)這些傳感器都是有標(biāo)號(hào)的哦,具體的查找在這個(gè)文件中哦
,還是那個(gè)原則,找與V2相關(guān)的,這里再提一句與硬件相匹配的還有board.h文件這個(gè)有兩個(gè)文件一個(gè)是針對(duì)F4主控的一個(gè)是針對(duì)F1協(xié)處理器的里面有相關(guān)配置,比如晶振這塊就在里面還有相關(guān)端口的配置也在其中的。在這個(gè)文件中我們可以找到這個(gè),看到?jīng)]都是進(jìn)行標(biāo)號(hào)的哦。
。在stm32_spi1select中有個(gè)片選
這些片選在文件中都是可以查到了,以后寫(xiě)驅(qū)動(dòng)的引腳控制就要在這個(gè)文件中寫(xiě)了,便于維護(hù)。講到這里底層的SPI就差不多了。后面我們將會(huì)對(duì)SPI的具體硬件上的應(yīng)用做一個(gè)解析。
如果文章有什么問(wèn)題歡迎大家提出來(lái),本人將在第一時(shí)間進(jìn)行更改。如果大家有什么問(wèn)題也可以隨時(shí)聯(lián)系我,可以QQ給我或者郵箱給我,如果大家比較急也可以打電話給我13530699165不過(guò)盡量不要打哦。
http://blog.csdn.net/qq_18112493/article/details/69951086
總結(jié)
以上是生活随笔為你收集整理的第三章 PX4-SPI底层驱动解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第二章 PX4-RCS启动文件解析
- 下一篇: 第四章MPU6000传感器驱动解析