转载地址:https://blog.youkuaiyun.com/WXXGoodJob/article/details/80583566
1. make ARCH=arm menuconfig 配置
2. 配置设备树arch/arm/boot/dts/am335x-evm.dts:
......
mcspi0_pins: mcspi0_pins {
pinctrl-single,pins = <
0x150 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (A17) spi0.spi0_sclk */
0x154 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (B17) spi0_d0.spi0_d0 */
0x158 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (B16) spi0_d1.spi0_d1 */
0x15c ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (A16) spi0_cs0.spi0_cs0 */
>;
};
......
&spi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&mcspi0_pins>;
spidev@0 {
spi-max-frequency = <48000000>;
reg = <0>;
compatible = "rohm,dh2228fv";
};
};
......
3. 测试
启动系统后,spi的虚拟设备节点是spidev1.0, 而默认的是spidev1.1。所以我们可以利用官方提供spi测试程序的参数可以做很多事:
./spidev_test -D /dev/spidev1.0 -s 48000000 -p "aaaaaa"
~# ./spidev_test -h
./spidev_test: invalid option -- 'h'
Usage: ./spidev_test [-DsbdlHOLC3]
-D --device device to use (default /dev/spidev1.1)
-s --speed max speed (Hz)
-d --delay delay (usec)
-b --bpw bits per word
-l --loop loopback
-H --cpha clock phase
-O --cpol clock polarity
-L --lsb least significant bit first
-C --cs-high chip select active high
-3 --3wire SI/SO signals shared
-v --verbose Verbose (show tx buffer)
-p Send data (e.g. "1234\xde\xad")
-N --no-cs no chip select
-R --ready slave pulls low to pause
-2 --dual dual transfer
-4 --quad quad transfer
测试结果
4. 编译spidev_test.c出现的错误:
arm-linux-gcc spidev_test.c -o spidev_test
spidev_test.c: In function 'transfer':
spidev_test.c:116: error: 'SPI_TX_QUAD' undeclared (first use in this function)
spidev_test.c:116: error: (Each undeclared identifier is reported only once
spidev_test.c:116: error: for each function it appears in.)
spidev_test.c:117: error: 'struct spi_ioc_transfer' has no member named 'tx_nbits'
spidev_test.c:118: error: 'SPI_TX_DUAL' undeclared (first use in this function)
spidev_test.c:119: error: 'struct spi_ioc_transfer' has no member named 'tx_nbits'
spidev_test.c:120: error: 'SPI_RX_QUAD' undeclared (first use in this function)
spidev_test.c:121: error: 'struct spi_ioc_transfer' has no member named 'rx_nbits'
spidev_test.c:122: error: 'SPI_RX_DUAL' undeclared (first use in this function)
spidev_test.c:123: error: 'struct spi_ioc_transfer' has no member named 'rx_nbits'
spidev_test.c: In function 'parse_opts':
spidev_test.c:234: error: 'SPI_TX_DUAL' undeclared (first use in this function)
spidev_test.c:237: error: 'SPI_TX_QUAD' undeclared (first use in this function)
spidev_test.c:246: error: 'SPI_RX_DUAL' undeclared (first use in this function)
spidev_test.c:248: error: 'SPI_RX_QUAD' undeclared (first use in this function)
spidev_test.c: In function 'main':
spidev_test.c:269: error: 'SPI_IOC_WR_MODE32' undeclared (first use in this function)
spidev_test.c:273: error: 'SPI_IOC_RD_MODE32' undeclared (first use in this function)
这个问题其实是交叉编译工具的头文件spidev.h没有包含到这几个宏和结构体。所以屏蔽掉原来的头文件,使用内核spi头文件即可:
include/uapi/linux/spi/spidev.h
源码&测试代码
参考:
https://blog.youkuaiyun.com/qqliyunpeng/article/details/53326226
---------------------
作者:WXXGoodJob
来源:优快云
原文:https://blog.youkuaiyun.com/WXXGoodJob/article/details/80583566
版权声明:本文为博主原创文章,转载请附上博文链接!