zoukankan      html  css  js  c++  java
  • Am335x 应用层之SPI操作

    SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合。图1中表现了这四种时序,
    时序与CPOL、CPHL的关系也可以从图中看出。


    图1

    CPOL是用来决定SCK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,

    空闲电平为高电平。CPHA是用来决定采样时刻的,CPHA=0,在每个周期的第一个时钟沿采样,

    CPHA=1,在每个周期的第二个时钟沿采样。

     

    经由上面我们就可以比对实际设备的时序来对SPI的MODE进行配置了。

    找到头文件里的SPI mode的一定义如下:

     

      1.     #define SPI_CPHA 0x01 /* clock phase *
      2.     #define SPI_CPOL 0x02 /* clock polarity *
      3.     #define SPI_MODE_0 (0|0/(original MicroWire*/
      4.     #define SPI_MODE_1 (0|SPI_CPHA
      5.     #define SPI_MODE_2 (SPI_CPOL|0
      6.     #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)
      7. 大家很容易可以分析出SPI四种模式的配置了吧,后面的速率,字节数就都很好配置了。
      8.     int Spi0Mode = SPI_MODE_2; //配置模式
      9.     ioctl(Spi0Handle, SPI_IOC_WR_MODE, &Spi0Mode);
      10.     ioctl(Spi0Handle, SPI_IOC_RD_MODE, &Spi0Mode);

      11.     struct spi_ioc_transfer sSpi0TR;
      12.     sSpi0TR.speed_hz = 6000000; //配置速率6M
        1.    ioctl(Spi0Handle, SPI_IOC_WR_MAX_SPEED_HZ, &sSpi0TR.speed_hz);
        2.    ioctl(Spi0Handle, SPI_IOC_RD_MAX_SPEED_HZ, &sSpi0TR.speed_hz);
      13.      sSpi0TR.bits_per_word =16;  //配置字节数
      14.      sSpi0TR.len = 2;
        1.    ioctl(Spi0Handle, SPI_IOC_WR_BITS_PER_WORD, &sSpi0TR.bits_per_word);
        2.    ioctl(Spi0Handle, SPI_IOC_RD_BITS_PER_WORD, &sSpi0TR.bits_per_word);

        配置好了后,就是读写了,读写需要注意的参数有两个地方:
        1,tx_buf,rx_buf这两个参数决定了SPI的读写,如果只读或只写的情况下,就把另一个不用的参数=NULL。
        2,SPI_IOC_MESSAGE(N)这里的N决定了SPI操作的次数,如果你想连接读写几次SPI就改变N就是了
  • 相关阅读:
    Java对象序列化/反序列化的注意事项
    初尝Java序列化/反序列化对象
    Java的byte数组
    在C#或者SWT上跨进程访问SWT控件的问题
    Enum实现单例模式
    看个泛型的例子
    构造器优化需要多个构造器的类(建造者模式)
    线程间操作无效: 从不是创建控件的线程访问它.
    SWT中的多线程(Invalid thread access)
    读书笔记 --腾讯传
  • 原文地址:https://www.cnblogs.com/zym0805/p/4153261.html
Copyright © 2011-2022 走看看