imx8mq開發板如何在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傳輸操作即可。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989353/viewspace-2769568/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux SPI匯流排和裝置驅動架構之四:SPI資料傳輸的佇列化Linux架構佇列
- 使用spi-gpio-custom模組配置SPI匯流排
- IMX6ULL開發板spi OLED驅動
- RS-485匯流排通訊裝置
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- 小白自制Linux開發板 六. SPI TFT螢幕修改與移植Linux
- 【iCore3 雙核心板_FPGA】實驗十六:基於SPI匯流排的ARM與FPGA通訊實驗FPGA
- OpenHarmony輕量裝置Hi3861晶片開發板啟動流程分析晶片
- platform裝置新增流程Platform
- linux平臺匯流排驅動裝置模型之點亮LEDLinux模型
- 框架-SPI四種模式+通用裝置驅動實現框架模式
- 飛凌嵌入式乾貨分享丨如何在iMX8MQ 核心板上實現低功耗音訊播放MQ音訊
- Linux驅動之I2C匯流排裝置以及驅動Linux
- linux下新增裸裝置Linux
- 【Linux SPI】RFID RC522 裝置驅動Linux
- 手持裝置掃描槍開發
- 如何在 JavaScript 中實現 Event Bus(事件匯流排)JavaScript事件
- 如何在 pyqt 中實現全域性事件匯流排QT事件
- 基於匯流排裝置驅動模型的按鍵讀取驅動程式模型
- Beaglebone Black開發板安裝驅動
- Libusb開發教程 USB裝置程式開發
- Linux裝置驅動探究第1天----spi驅動(1)Linux
- 深度解讀裝置的“萬能語言”HarmonyOS的分散式軟匯流排能力分散式
- HarmonyOS 裝置管理開發:USB 服務開發指導
- IOS 特定於裝置的開發:獲取額外的裝置資訊iOS
- 匯頂科技GR551x系列開發板已支援OpenHarmony
- 小白自制Linux開發板 四. 通過SPI使用ESP8266做無線網路卡Linux
- iMX8M mini開發板UBOOT新增新的顯示支援boot
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- Linux新增裸裝置空間(Redhat)LinuxRedhat
- CC:基於匯流排的android元件化開發框架Android元件化框架
- 水墨屏開發裝置,舊 Kindle 改造而成
- IOS 特定於裝置的開發:UIDeviceiOSUIIDEdev
- linux mdev實現裝置符重對映/裝置符手動新增Linuxdev
- 深度解讀裝置的“萬能語言”鴻蒙系統的分散式軟匯流排能力鴻蒙分散式
- 如何在Ubuntu保留檔案系統和備份當前開發板映象Ubuntu
- 如何在全志T507開發板上架設Samba服務Samba
- 匯流排