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就是了

时间: 2024-10-21 20:20:23

Am335x 应用层之SPI操作的相关文章

【Espruino】NO.09 使用SPI操作Sharp Memory LCD

http://blog.csdn.net/qwert1213131/article/details/28693567 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] [Espruino中文社区] Sharp memory LCD具有较低的功耗,广泛用于智能手表等低功耗领域.与墨水屏相比,刷新率高,超薄,且外围元件极少,仅三个电容便可工作.Espruino 提供了相应的模块和图形驱动,使用SPI接口,非常方便应用! 本节使用1.28寸128*128分辨率的LS013B7H03

STM32F10X SPI操作flash MX25L64读写数据(转)

源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自己一直想在嵌入式方面发展,在1月4号开始自己的第二份工作后,首先接触到的是为STM32F103写SPI控制flash读写操作,现记下曾经的脚印,希望以后能少走弯路!心得:细心活! 简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信.ARM主控芯片STM32F103,

Linux应用层直接操作GPIO

Linux应用层直接操作GPIO 在一个老手的指导下,应用层可以直接操作GPIO,具体指设置GPIO的输入输出以及输出电平高或者低.这个大大地提高了灵活性,官方的文档有GPIO Sysfs Interface for Userspace,GPIO Sysfs. 这里我记录一下使用过例子: # RK30_PIN0_PD4 # A0-7 -> 0-7 / B0-7 -> 8-15 / C0-7 -> 16-23 / D0-7 -> 24-31 echo 28 > /sys/cla

ADXL345经验总结,采用SPI和I2C总线操作

一. ADXL345简介 ADXL345是ADI公司推出的三轴(x,y,z)iMEMS数字加速度计(digital accelerometer),具有在16G下高分辨率(13Bit)测量能力,同时具备16Bit数字输出.ADXL345 适用于静态倾角测量以及动态加速度测量,高达4mg/LSB的灵敏度允许测量小于1度的倾角. 该传感器还具备单击 /双击探测,自由落体探测,并允许用户设置一个加速度阀值,当加速度值超过设定阀值后可以产生一个信号输出.所有这些功能都可以映射到2个中断上.内置的32级FI

基于Linux应用层的6LOWPAN物联网网关及实现方法

本发明涉及一种基于Linux应用层的6LOWPAN物联网网关及实现方法,所述物联网网关包括开发平台以及无线射频模块,其实现方法是:所述6LOWPAN物联网网关的以太网网口收到访问6LOWPAN无线传感器网络中节点的数据包,Linux应用层将以太网数据包格式转化成6LOWPAN物联网的格式,然后通过无线射频模块发送出去:同理,Linux应用层同时监听无线射频模块,收到6LOWPAN无线传感器网络中的数据包,所述Linux应用层将数据包转化成以太网数据包格式,再通过以太网网口把该数据包发送出去.本发

Linux用户层直接操作GPIO

Linux用户层直接操作GPIO 在一个老手的指导下,应用层可以直接操作GPIO,具体指设置GPIO的输入输出以及输出电平高或者低.这个大大地提高了灵活性,官方的文档有GPIO Sysfs Interface for Userspace,GPIO Sysfs. 这里我记录一下使用过例子: # RK30_PIN0_PD4 # A0-7 -> 0-7 / B0-7 -> 8-15 / C0-7 -> 16-23 / D0-7 -> 24-31 echo 28 > /sys/cla

SPI总线协议及SPI时序图详解

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议.SPI是一个环形总线结构,由ss(cs).sck.sdi.sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换. 上升沿发送.下降沿接收.高位先发送.上升沿到来

AM335x(TQ335x)学习笔记——WM8960声卡驱动移植

经过一段时间的调试,终于调好了TQ335x的声卡驱动.TQ335x采用的Codec是WM8960,本文来总结下WM8960驱动在AM335x平台上的移植方法.Linux声卡驱动架构有OSS和ALSA两种架构,目前最常用的架构是ALSA,本文也使用ALSA架构对WM8960驱动进行移植. ASoC是对ALSA驱动架构的进一步封装.ASoC将ALSA驱动中的各模块抽象为三部分:Platform.Codec和Machine.Platform主要是平台硬件驱动,包括SoC的IIS模块.DMA等,在本文中

Linux内核--网络栈实现分析(六)--应用层获取数据包(上)

本文分析基于内核Linux 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7541907 更多请看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html 作者:闫明 注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传递方向:”(上)“表示分析是从底层向上分析.”(下)“表示分析是从上向下分析. 上篇博文分析了传输层从网络层获取数据包后将