写在前头

*.版权声明:本篇文章为原创,可随意转载,转载请注明出处,谢谢!另我创建一个QQ群82642304,欢迎加入!


开发环境

  1. Beaglebone black可使用的开发环境有两个,一个是TI官方提供的SDK,另外一个是由Beaglebone提供的SDK。
  2. 我使用的是TI官方提供的SDK(ti-processor-sdk-linux-am335x-evm-02.00.00.00)该SDK已支持Beaglebone black开发板,编译工具也是才用TI官方提供的(gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf),文件系统是自己用busybox做的。
  3. 可能是由于PROCESSOR SDK比较新吧,网上许多资料都是基于TI的Sitara SDK。

SPI接口

  1. PROCESSOR SDK使用的内核是4.x,支持设备树,所以我们不需要修改任何内核代码,即可使能SP1管脚。
  2. 先使用官方提供的管脚配置工具pin mux配置SP1管脚
功能管脚
SPI1_SCKA13
SPI1_D0B13
SPI1_D1D12
SPI1_CS0C12

这里需要注意的是要将SPI1_SCK和SPI1_D0配置成输入,SPI1_SCK配置成输入的原因参见TRM中Table 24-4的note1,如果没有配置成输入将会导致读取出来的数据全部为0.
3. 配置完管脚,生成设备树文件如下

mcspi1_pins: mcspi1_pins {
        pinctrl-single,pins = <
            0x190 ( PIN_INPUT | MUX_MODE3 ) /* (A13) mcasp0_aclkx.spi1_sclk */
            0x194 ( PIN_INPUT | MUX_MODE3 ) /* (B13) mcasp0_fsx.spi1_d0 */
            0x198 ( PIN_OUTPUT | MUX_MODE3 ) /* (D12) mcasp0_axr0.spi1_d1 */
            0x19c ( PIN_OUTPUT | MUX_MODE3 ) /* (C12) mcasp0_ahclkr.spi1_cs0 */
        >;
}
  1. 打开Beaglebone black的设备树文件arch/arm/boot/dts/am335x-boneblack.dts,将上面一段话复制到&am33xx_pinmux中,即完成了对SPI管脚的配置。
  2. 在该设备树文件中,写入SPI1的配置
&spi1 {
    status = "okay";//使能SPI1
    pinctrl-names = "default";
    pinctrl-0 = <&mcspi1_pins>;//设置SPI1的管脚
    spidev@0 {//创建SPI设备/dev/spidev1.0
        compatible = "rohm,dh2228fv";
        spi-max-frequency=<24000000>;
        reg = <0>;
    };
};
  1. 使能spidev驱动make menuconfig

Device Drivers —>
SPI support —>
User mode SPI device driver support

  1. 最后编译内核及设备树

make am335x-boneblack.dtb
make zImage

并将zImage和am335x-boneblack.dtb拷贝到开发板的/boot文件夹内,重启设备
8. 重启过后,即可在/dev下识别出设备/dev/spidev1.0。
9. 交叉编译内核目录下Documentation/spi/spidev_test.c的spi测试工具,生成bin文件拷贝到开发板上运行
10. 短接B12和D12管脚,运行结果如下即表示正常

/ # ./spidev_test -D /dev/spidev1.0

spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D  | ......@.......................
Logo

更多推荐