21ic电子技术开发论坛 单片机与嵌入式系统 德州仪器MCU ADXL345采用SPI模式与VC5509A接口
发新帖我要提问
返回列表
打印

ADXL345采用SPI模式与VC5509A接口

[复制链接]
646|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Violin11|  楼主 | 2017-10-25 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADXL345采用SPI模式与VC5509A接口


VC5509A的McBSP接口能够配置成4线SPI模式,因而可直接与ADXL345通信。仍然使用了实验室自制的DSP主板SDUST VC5509A V1.1。该板的JP2扩展接口引出了McBSP0接口。该主板上还通过McBSP0与AIC23B0进行数据通信。如果不做处理,会影响到与ADXL345的通信。根据DSP主板的原理图,拆除了电阻R37、R79、R80、R81、R82和R75,使得McBSP与AIC23B0的通信线断开。
        在调试I2C模式时,ADXL345模块焊接了必要的上拉电阻,而在SPI模式时,这些上拉电阻是不需要的。将三个上拉电阻拆除即可。下图为VC5509A与ADXL345通信的原理图(SPI模式)。

  
       ADXL345与5509A主板连线(SPI)原理图

        分析上图,McBSP0的CLKX0充当SCK信号,DR0充当MISO信号,DX0充当MOSI信号,FSX0充当SS信号,INT0n充当INTn信号。这些信号分别与ADXL345的对应引脚直接相连即可。下图为完整的原理图:

  


ADXL345与5509A主板连线(SPI)原理图


        调试要点小结:

        1)将VC5509A的McBSP0配置在时钟停止模式。此时,CLKX用作SCK信号,FSX用作SS信号,CLKR内部与CLKX相连,FSR内部与FSX相连。在这里,McBSP工作在主模式,DX充当MOSI信号;DR充当MISO信号。

        2)程序编写的关键是要把McBSP0正确的配置在时钟停止模式。使用CSL来完成该配置工作,容易实现,避免了一些不必要的错误。在McBSP的数据手册中,有配置McBSP工作在SPI模式的详细步骤(6-8)。下面为配置步骤:

        (1)复位发送和接收器。XRST=0,RRST=0。

        (2)复位采样率生成器。GRST=0。

        (3)修改影响SPI工作的寄存器。需要修改的一些信息列出如下:

        1> 根据ADXL345的手册中SPI的时序图,得出数据在SCK时钟的下降沿发送,在上升沿接收。所以配置CLKSTP=10b,CLKXP=1b,CLKRP=0b。

        2> CLKX充当SCK信号,该信号由VC5509A产生,CLKX应配置为输出。所以配置CLKXM=1b。

        3> 时钟信号由McBSP的采样率生成器提供。所以配置SCLKME=0b,CLKSM=1b。

        4> 系统时钟工作在144MHz,如果要让ADXL345的数据输出速率达到3200Hz,需要使得SCK时钟频率高于2MHz;为避免时钟过高造成负面影响,推荐SCK时钟不高于5MHz。在这里设定SCK频率为4MHz。所以配置CLKGDV=36(144/4=36)。

        5> FSX充当SS信号,为输出信号;且ADXL345的CS信号为低电平有效。所以配置FSXM=1b,FSGM=0b,FSXP=1b。

        6> 为保证FSX信号的正确性,需配置XDATDLY=01b,RDATDLY=01b。

        7> 在SPI模式时,还需注意只能使用单帧模式,帧长固定为1。需要配置XPHASE=0,RPHASE=0,XFRLEN1=0,

        8> 因为在时钟停止模式下,发送和接收电路同步于同一个时钟信号,所以需要将XWDLEN1和RWDLEN1设为相同值。这里根据ADXL345的读写时序,设定其长度均为16。

        (4)使能采样率生成器。GRST=1。

                (5)使能发送和接收器。XRST=1,RRST=1。

        (6)使能帧同步逻辑。FRST=1。

        3)调试中,碰到了一些比较奇怪的现象。比如不连接ADXL345,MISO上也有很杂散的信号输出,SS信号高电平仅为2.2V左右。后来发现是由于AIC23B0的干扰,拆除终端匹配电阻后,信号恢复正常。

        4)开始调试时,程序无法进入中断,不容易观察读写时序。使用循环读取寄存器清除中断的方式来构造读写时序。这时可看到中断信号的变化,SCK信号也为设定的4MHz。根据波形,对比时序图,来寻找bug。这要比单纯修改程序代码要高效的多。

        5)关于MISO信号。该信号由ADXL345输出。根据时序图,高8位应当为无效数据,但实际观察的波形和读取的数据表明,高8位的确也存在数据。为凸显出问题,修改为循环读取1个寄存器,发现高8位和低8位相同;改为循环读取2个寄存器,发现高8位和低8位数据交错。找到了规律:在读取数据时,高8位上次读取过的数据;低8位为这次要读取的数据。所以只需将高8位数据屏蔽即可。

        6)MISO信号在最后输出高电平后,有一个很缓慢的下降沿;分析这是由于ADXL345在输出完最后一个数据(高电平)后,即保持高阻抗,所以表现出一个缓慢的下降沿。不会对数据传输的正确性造成影响。

        7)对ADXL345的执行写操作时,也需要执行一条读操作。否则读取的数据会发生错乱。

        8)在程序的开始,需要清除ADXL345的中断信号,才能触发中断循环。在这里读取一次寄存器,也能够进入中断,但此时DATA_RDY中断还没有产生,所以无法触发中断循环。所以添加了一个循环和标志位,循环检测标志位并读取寄存器;在有效中断时将标志位置1,当检测到标志位为1后,表明已触发中断循环,退出读取循环,继续下面的操作。但是有一点,这种方式在测试程序中是可行的;而在真正使用中是行不通的。因为若ADXL345存在问题,则程序死在这里,使得其他功能也无法实现。实际中可在此实际一个有限循环,而非无限循环。

        9)最后测试,将速率设置为3200Hz,通过示波器观察中断,大约300us中断一次,对应3200Hz。中断的低电平时间基本一致,说明能够规律的进入中断,而不像先前杂乱的中断信号。测试中断函数的指令大约为9000条,占时为大约54us,支持中断频率大约19kHz。

        程序编写展望:

        1)将McBSP0和DMA结合,可进一步提升数据读写的效率。这种方式在需要对读取的数据进行大量数据运算时很有优势。但实现有难度,需要把XINT0、RINT0、INT0中断和DMA配合好。实现难度比较大。

        2)现在由于缓冲区的限制,只能观察到部分加速度波形,如果能添加RTDX,并编写一个上位机软件,可以将采集到的加速度信息存储到上位机,并可观察到完整的加速度信息。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

717

主题

1010

帖子

3

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部