SPI驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd
01 Linux SPI驱动架构 02 Linux设备树添加SPI设备 03 Linux SPI用户模式设备接口驱动
01 Linux SPI驱动架构 第 1 部分
Linux SPI驱动架构 04 广州创龙电子科技有限公司
02 Linux设备树添加SPI设备 第 2 部分
Linux设备树添加SPI设备 在设备树中添加设备——使用SOC的SPI控制器 在设备树中添加设备——使用GPIO模拟SPI 设备树相关说明文档: Documentation/devicetree/bindings/spi/spi-bus.txt Documentation/devicetree/bindings/spi/omap-spi.txt Documentation/devicetree/bindings/spi/spi-gpio.txt 06 广州创龙电子科技有限公司
Linux设备树添加SPI设备 1. 在设备树中添加设备——使用SOC的SPI控制器 (1)查看原理图,确定所用管脚 07 广州创龙电子科技有限公司
Linux设备树添加SPI设备 1. 在设备树中添加设备——使用SPC的SPI控制器 (1)配置SPI的pinmux ti,pindir-d0-out-d1-in spi-cpha; 四种模式….. --------------------- spi0_pins_default: spi0_pins_default { pinctrl-single,pins = < AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE0) /* (A17) spi0_sclk.spi0_sclk */ AM33XX_IOPAD(0x954, PIN_INPUT_PULLUP | MUX_MODE0) /* (B17) spi0_d0.spi0_d0 */ AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE0) /* (B16) spi0_d1.spi0_d1 */ AM33XX_IOPAD(0x95c, PIN_INPUT_PULLUP | MUX_MODE0) /* (A16) spi0_cs0.spi0_cs0 */ >; }; &spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins_default>; m25p80@0 { /* 增加spiflash的节点 */ }; 08 广州创龙电子科技有限公司
Linux设备树添加SPI设备 2. 在设备树中添加设备——使用GPIO模拟SPI (1)查看原理图,确定所用管脚 09 广州创龙电子科技有限公司
Linux设备树添加SPI设备 2. 在设备树中添加设备——使用GPIO模拟SPI (1)配置GPIO的pinmux spi0_gpio_pins_default: spi0_gpio_pins_default { pinctrl-single,pins = < AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE7) /* (A17) spi0_sclk.gpio0_2 */ AM33XX_IOPAD(0x954, PIN_INPUT_PULLUP | MUX_MODE7) /* (B17) spi0_d0.gpio0_3 */ AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE7) /* (B16) spi0_d1.gpio0_4 */ AM33XX_IOPAD(0x95c, PIN_INPUT_PULLUP | MUX_MODE7) /* (A16) spi0_cs0.gpio0_5 */ >; }; spi@2 { pinctrl-0 = <&spi0_gpio_pins_default>; pinctrl-names = "default"; compatible = "spi-gpio"; #address-cells = <0x1>; #size-cells = <0>; /*ranges;*/ gpio-sck = <&gpio0 2 0>; gpio-miso = <&gpio0 3 0>; gpio-mosi = <&gpio0 4 0>; cs-gpios = <&gpio0 5 0>; num-chipselects = <1>; /* clients */ 10 广州创龙电子科技有限公司
Linux设备树添加SPI设备 2. 在设备树中添加设备——使用GPIO模拟SPI (3)在menuconfig中选中spi-gpio 10 spi0_gpio_pins_default: spi0_gpio_pins_default { pinctrl-single,pins = < AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE7) /* (A17) spi0_sclk.gpio0_2 */ AM33XX_IOPAD(0x954, PIN_INPUT_PULLUP | MUX_MODE7) /* (B17) spi0_d0.gpio0_3 */ AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE7) /* (B16) spi0_d1.gpio0_4 */ AM33XX_IOPAD(0x95c, PIN_INPUT_PULLUP | MUX_MODE7) /* (A16) spi0_cs0.gpio0_5 */ >; }; spi@2 { pinctrl-0 = <&spi0_gpio_pins_default>; pinctrl-names = "default"; compatible = "spi-gpio"; #address-cells = <0x1>; #size-cells = <0>; /*ranges;*/ gpio-sck = <&gpio0 2 0>; gpio-miso = <&gpio0 3 0>; gpio-mosi = <&gpio0 4 0>; cs-gpios = <&gpio0 5 0>; num-chipselects = <1>; /* clients */ 10 广州创龙电子科技有限公司
03 Linux SPI用户模式设备接口驱动 第 3 部分
Linux SPI用户模式设备接口驱动 SPI的用户模式设备接口的驱动spidev.c,在应用层生成/dev/spidev*的节点,可以通过read、write达到与硬件设备的SPI通信。 1. 在SPI的节点下添加spidev的节点 spidev0: spi@0 { compatible = "spidev"; reg = <0>; spi-max-frequency = <40000000>; }; 使用am335x-idk的拓展口的spi1 (A13/EHRPWM0A 9) 990h conf_mcasp0_aclkx A13/ehrpwm0A spi1_sclk mode3 994h conf_mcasp0_fsx B13ehrpwm0B spi1_d0 mode3 998h conf_mcasp0_axr0 D12/EHRPWM0_TRIPZONE_INPUT spi1_d1 mode3 99Ch conf_mcasp0_ahclkr C12/ECAP2_IN_PWM2_OUT/GPIO3[17] spi1_cs0 mode3 12 广州创龙电子科技有限公司
Linux SPI用户模式设备接口驱动 2. 在menuconfig中选中spidev的驱动 Device Drivers > SPI support > User mode SPI device driver support 13 广州创龙电子科技有限公司
Linux SPI用户模式设备接口驱动 3. 测试程序 (1)路径:Documentation/spi/spidev_test.c (2)编译程序:arm-linux-gnueabihf-gcc spidev_test.c -o spidev_test (3)测试方法:用一根杜邦线短接MISO和MOSI,运行程序即可实现SPI自发自收回环测试。 14 广州创龙电子科技有限公司
广州创龙电子科技有限公司 谢谢 官网: www.tronlong.com 论坛: www.51ele.net 微信公众号:广州创龙