瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內置獨立NPU,可用于輕量級人工智能應用。RK3568 支持安卓 11 和 linux 系統,主要面向物聯網網關、NVR 存儲、工控平板、工業檢測、工控盒、卡拉 OK、云終端、車載中控等行業。
第194章 如何在Linux中使用模擬SPI
在講解SPI基礎的時候提到過SPI可以分為硬件SPI和軟件SPI,在前面的章節中使用的都是硬件SPI,當硬件SPI不夠用時,可以使用GPIO來模擬SPI,在本節課將對軟件SPI進行講解。
與I2C協議相比,SPI通信協議比較簡單,沒有起始信號、應答信號和終止信號,所以不會從零編寫模擬SPI的驅動代碼,直接使用Linux源碼中已經寫好的驅動程序即可。
194.1 內核和設備樹配置
首先將模擬SPI驅動編譯進內核,在make menuconfig圖形化配置界面中選中如下選項
Device Drivers --->
[*]SPI support -->
<*> GPIO-based bitbanging SPI Master //選中
軟件SPI選定的引腳為開發板背面的4個GPIO,具體引腳功能圖如下所示:
設備樹修改步驟如下所示:
首先對rk3568-evb1-ddr4-v10.dtsi設備樹進行修改,在根節點添加SPI5節點,具體內容如下所示:
spi5: spi@gpiol {
compatible = "spi-gpio";
#address-cells = <1>;
gpio-sck = <&gpio0 RK_PB0_GPIO_ACTIVE_LOW>;
gpio-miso = <&gpio1 RK_PB0_GPIO_ACTIVE_LOW>;
gpio-mosi = <&gpio1 RK_PB1_GPIO_ACTIVE_LOW>;
cs-gpios = <&gpio1 RK_PB2_GPIO_ACTIVE_LOW>;
num-chipselects = <1>;
pinctrl-names = "default";
pinctrl-0 = <&spi5_gpios>;
status = "disabled";
};
然后對pinctrl節點進行追加,追加內容如下所示:
spi5_gpios: gpios {
rockchip,pins = <0 RK_PB0 0 &pcfg_pull_none>,
<1 RK_PB0 0 &pcfg_pull_none>,
<1 RK_PB1 0 &pcfg_pull_none>,
<1 RK_PB2 0 &pcfg_pull_none>,
>;
};
最后修改之前編寫的mcp2515節點,修改之后的內容如下所示:
&spi5 {
status = "okay";
mcp2515:mcp2515@0 {
compatible = "rockchip,spidev";
reg = <0>;
spi-max-frequency = <10000000>;
status = "okay";
};
};
修改完成之后保存,然后重新編譯內核鏡像,編譯完成的內核鏡像存放路徑為“iTOP-3568開發板\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動程序\120_soft_spi\01_修改好的內核”。
194.2 運行測試
首先要確保燒寫的是上一小節編譯出來的內核,燒寫完成開發板啟動之后,使用“ls /dev/spidev5.0”查看是否存在spidev5.0節點,如下圖所示:
修改完成之后保存,然后重新編譯內核鏡像,編譯完成的內核鏡像存放路徑為“iTOP-3568開發板\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動程序\120_soft_spi\01_修改好的內核”。
194.2 運行測試
首先要確保燒寫的是上一小節編譯出來的內核,燒寫完成開發板啟動之后,使用“ls /dev/spidev5.0”查看是否存在spidev5.0節點,如下圖所示:
可以看到TX和RX收發的數據是一樣,證明SPI回環成功,至此模擬SPI測試就完成了。
-
Linux
+關注
關注
87文章
11324瀏覽量
209938 -
SPI
+關注
關注
17文章
1715瀏覽量
91830 -
RK3568
+關注
關注
4文章
520瀏覽量
5125 -
迅為電子
+關注
關注
0文章
33瀏覽量
48
發布評論請先 登錄
相關推薦
評論