am335x 添加SPI&测试

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.csdn.net/qqliyunpeng/article/details/53326226



猜你喜欢

转载自blog.csdn.net/wxxgoodjob/article/details/80583566