Am335x 应用层之SPI操作

本文详细介绍了SPI接口的四种不同数据传输时序及其配置方法,包括CPOL和CPHA的作用,通过实例展示了如何设置SPI模式、速率和字节数,并强调了读写操作中tx_buf和rx_buf参数的重要性及SPI_IOC_MESSAGE(N)参数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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就是了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值