瑞芯微 RK3568 芯片 是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55 处理器 和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持/PCIE/3.0 外围 接口 。RK3568内置独立NPU,可用于轻量级 人工智能 应用。RK3568 支持安卓 11 和系统,主要面向 物联网 网关、N存储、工控平板、 工业 检测 、工控盒、卡拉 OK、云终端、车载中控等行业。
第194章 如何在Linux中使用 模拟 SPI在讲解SPI基础的时候提到过SPI可以分为 硬件 SPI和软件SPI,在前面的章节中使用的都是硬件SPI,当硬件SPI不够用时,可以使用GPIO来模拟SPI,在本节课将对软件SPI进行讲解。
与协议相比,SPI 通信 协议比较简单,没有起始 信号 、应答信号和终止信号,所以不会从零编写模拟SPI的驱动代码,直接使用Linux源码中已经写好的驱动程序即可。
194.1 内核和设备树配置首先将模拟SPI驱动编译进内核,在make menuconfig图形化配置界面中选中如下选项
Device Drivers --->
[*]SPI support -->
<*> GPIO-based bitbanging SPI Master //选中
软件SPI选定的引脚为开发板背面的4个GPIO,具体引脚功能图如下所示:
设备树修改步骤如下所示:
首先对rk3568-evb1-4-v10.dtsi设备树进行修改,在根节点添加SPI5节点,具体内容如下所示:
spi5: spi@gpiol {compable = "spi-gpio";#dress-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>;nctrl-names = "default";pinctrl-0 = <&spi5_gpios>;status = "disabled";};
然后对pinctrl节点进行追加,追加内容如下所示:
spi5_gpios: gpios {,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测试就完成了。