OKMX8MQ-C如何在SPI總線上添加設(shè)備

原創(chuàng) 2021-04-23 11:36:00 iMX8MQ 飛凌嵌入式
SPI接口設(shè)備是一款使用率較高的設(shè)備,在用戶使用OKMX8MQ-C時可能需要添加新的SPI設(shè)備,或者將現(xiàn)有的SPI設(shè)備從當前的總線上更換到別的總線上,或更換片選。
對于SPI驅(qū)動不熟悉的人可能不是很了解在更改時都需要哪些操作和注意事項,下面我就來給大家介紹下如何修改。

首先,我們先來了解下OKMX8MQ–C SPI的驅(qū)動現(xiàn)狀。


關(guān)于OKMX8MQ –C SPI的驅(qū)動現(xiàn)狀


驅(qū)動是用bitbang的方式,驅(qū)動使用GPIO作為SPI的片選,而不是使用SPI控制器的原生片選。i.MX8MQ的SPI控制器支持4個片選,我們可以在一個SPI總線上添加4個片選連接4個設(shè)備。

i.MX8MQ有3個SPI總線,OKMX8MQ-C使用了2個,SPI1連接了設(shè)備MCP2518FD,SPI2沒有連接設(shè)備,而是將引腳通過插座引出,并且片選0的驅(qū)動使用了spidev,用戶可以通過這個spidev設(shè)備在用戶空間訪問cs0所連接的設(shè)備。
i.MX8MQ核心板引出了SPI3的引腳,但是在開發(fā)板上由于引腳復(fù)用,SPI3的引腳復(fù)用成了其他的功能,所以沒有作為SPI使用。

接下來,我們看下該如何對SPI驅(qū)動做出具體的修改。


01- 修改CS的gpio

修改spi2的cs0使用的gpio,由gpio5-13 到gpio3-19,修改設(shè)備樹OK8MQ-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts,找到節(jié)點&ecspi2,將cs-gpios = <&gpio5 13 0>,修改為cs-gpios = <&gpio3 19 0>。
需要確認你使用的gpio3-19這個引腳的pinmux是GPIO功能,如果不是,則需要將其修改成GPIO。

代碼修改前后對比:

修改前:



修改后:


02- 修改spi設(shè)備節(jié)點

比如將spi2的cs0從原來的spidev驅(qū)動修改為mcp2518fd驅(qū)動:
修改設(shè)備樹OK8MQ-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts,找到節(jié)點&ecspi2,將其下spidev@0節(jié)點刪除,添加mcp2518fd@0節(jié)點,這個節(jié)點下需要添加的特性需要根據(jù)這個設(shè)備的驅(qū)動添加,是這個spi設(shè)備的驅(qū)動需要的。


代碼修改前后對比:
修改前:



修改后:


03- 增加一個SPI設(shè)備

給spi2增加一個spidev設(shè)備,使用片選gpio3-19:
添加一個片選:

修改設(shè)備樹OK8MQ-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts,找到節(jié)點&ecspi2,將cs-gpios = <&gpio5 13 0>,修改為cs-gpios = <&gpio5 13 0>, <&gpio3 19 0>。
添加spidev設(shè)備節(jié)點:

繼續(xù)修改剛才的節(jié)點,在節(jié)點下添加spidev節(jié)點,節(jié)點的reg值為1
測試:

使用spidev_test程序,spidev_test -D /dev/spidev1.0 測試片選0,spidev_test -D /dev/spidev1.1測試片選1,測試時是用示波器測量片選對應(yīng)的GPIO,GPIO會保持一定時間的低電平,表明該片選被選通。
代碼修改前后對比:
修改前:



修改后:


我們上面只是描述了如何將已有的SPI設(shè)備驅(qū)動添加到SPI總線上的方法,并不是SPI設(shè)備自身的驅(qū)動的修改方法。

有的SPI設(shè)備功能非常簡單,只需要實現(xiàn)幾個操作就行,有的SPI設(shè)備功能實現(xiàn)非常復(fù)雜,對接了Linux的驅(qū)動接口后,需要非常多的spi操作才能實現(xiàn)功能。
如果是復(fù)雜的設(shè)備,驅(qū)動只能是由芯片廠商來提供了。例如mcp2518fd設(shè)備節(jié)點。
當我們在添加這個節(jié)點的時候,肯定是已經(jīng)有了2518fd的驅(qū)動,添加節(jié)點只需要根據(jù)硬件原理上的連接方法,將其添加到對應(yīng)的片選上,而其內(nèi)的屬性在芯片提供的驅(qū)動例程上都有對應(yīng)的例子,只需要添加到節(jié)點內(nèi)即可。

總結(jié):

在面對一個復(fù)雜設(shè)備時,如果你沒有驅(qū)動,首先需要做的就是找驅(qū)動、添加驅(qū)動,然后在spi總線上添加該設(shè)備,編譯鏡像調(diào)試這個設(shè)備。
對于功能簡單的spi設(shè)備,只需要些簡單的spi操作,就可以使用spidev驅(qū)動在用戶層完成操作,不需要專門的驅(qū)動。
例如一個SPI接口的ADC芯片,只需要1次SPI讀寫操作就能使ADC完成轉(zhuǎn)化并讀取轉(zhuǎn)化值的操作,用戶層打開spidev設(shè)備節(jié)點,配置完成后,讀取ADC值的時候,按照ADC的手冊,執(zhí)行一次SPI傳輸操作即可。




相關(guān)產(chǎn)品 >

  • OKMX8MQ-C開發(fā)板

    飛凌嵌入式提供基于 NXP/Freescale iMX8、i.MX 8MQ處理器設(shè)計ARM核心板FETMX8MQ-C。i.MX8M處理器具有音頻、語音和視頻處理功能,飛凌iMX8核心板充分發(fā)揮NXP iMX8 系列 ARM 處理器性能,對功能做了優(yōu)化。提供10~15年產(chǎn)品長期供貨計劃。工作環(huán)境溫度為-40℃~85℃,滿足工業(yè)及泛工業(yè)場景應(yīng)用。 了解詳情
    OKMX8MQ-C開發(fā)板
  • FETMX8MQ-C核心板

    基于 NXP/Freescale iMX8、 iMX8X、i.MX 8MQ處理器的ARM核心板。 四核ARM Cortex-A53 ,主頻最高1.3GHz,板載2GB RAM,8GB ROM;工作環(huán)境溫度為-40℃~85℃,滿足工業(yè)及泛工業(yè)場景應(yīng)用。i.MX8M處理器具有音頻、語音和視頻處理功能,提供高水平的音頻保真度,適用于無風扇運行,散熱系統(tǒng)成本低、電池壽命長。具有高速接口可提供靈活連接等優(yōu)勢,并且提供10~15年產(chǎn)品長期供貨計劃。
    了解詳情
    FETMX8MQ-C核心板

推薦閱讀 換一批 換一批