一、 ADXL345简介
      ADXL345ADI公司推出的三轴(xyziMEMS数字加速度计(digital accelerometer),具有在16G下高分辨率(13Bit)测量能力,同时具备16Bit数字输出。ADXL345 适用于静态倾角测量以及动态加速度测量,高达4mg/LSB的灵敏度允许测量小于1度的倾角。
该传感器还具备单击 /双击探测,自由落体探测,并允许用户设置一个加速度阀值,当加速度值超过设定阀值后可以产生一个信号输出。所有这些功能都可以映射到2个中断上。内置的32级FIFO缓存可以极大的缓解处理器的压力。
特点:
       2.0 - 3.6VDC供电电压
       超低功耗: 40uA的测量模式, 0.1uA在standby@2.5V
       单击/双击检测
       自由落体检测
       用户阀值设定
       SPI和I2C接口
       ADXL345以+2.5V的电源电压工作时的消耗电流控制为标准25μ~130μA。该产品可比与3轴惯性传感器节约80%的耗电量。主要面向手机、便携式游戏机、游戏机控制器以及PND等。还支持硬盘的跌落检测等。
可检测的加速度范围为±2/4/8/16G。集成了FIFO(First-in, First-out)型存储器,最多可存储32组3轴数据。耐冲击性为1万G。输出接口备有I2C和SPI。数据输出速度为0.1~3.2kHz。
电源电压(Vs)为+2.0~3.6V,接口部分为+1.8V~Vs。工作温度范围为-40~+85℃。封装采用14端子的LFCSP。
 
  • 二、 SPI-4线模式操作ADXL345内部寄存器编程要点
 
1.ADXL345 SPI-4线模式的硬件连接电路
       SPI-4线模式是adxl345默认的操作总线,无需配置即可用。,详见datasheet page25 DATA_FORMAT寄存器。
2.关于ADXL345的PI总线协议与标准的SPI协议的一些差异(标准的SPI协议可以参考http://baike.baidu.com/view/245026.htm?fr=ala0_1这里不做详细介绍)
标准的SPI总线时序中,每个字节之间的操作是断开的,即片选线SS_n和串行时钟线SCLK正在传输该字节时有效,其余时刻保持无效状态(即SS_n=1,SCLK=1)如下图:
ADXL345 datasheet中要求clock polarity (CPOL) = 1 and clock phase (CPHA) = 1,这可以在SOPC中选择SPI IP核作为nios2外设构建系统时,用GUI的方式方便的设置,其SPI操作的时序如下图:
从图中可以看到:SPI总线对ADXL345内部寄存器的读写操作都是以字节为单位进行的(这是由ADXL345内部30个可操作寄存器均为字节寄存器所决定的),然而每两个字节数据/地址之间CS_n和SCLK一直需要保持有效。
由以上分析,在采用Altera提供的nios2 SPI API函数alt_avalon_spi_command()访问ADXL345时,其最后一个参数 alt_u32 flags必须置为ALT_AVALON_SPI_COMMAMD_MERGE,该标志的意思是“把多个SPI访问命令/数据合并到一起”,若置为0,则是标准的SPI时序,每次访问后自动释放CS_n和SCLK
3.读取ADXL345内部寄存器的顺序
先读取地址0x00的DEVID,device ID寄存器,正确之后再进行其他寄存器的操作。只要该器件具有唯一的ID号,首先读取器件ID寄存器并判断正确就应该是必要和首要的。如果读出ID正确了,至少可以证明我们操作时序正确了。O(∩_∩)O~,个人总结而已。当然,你如果看过linux下面外设的驱动程序,这样的操作时非常常见的,也就算是一种默认的规范吧!
4.ADXL345的SPI协议的第一字节
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
R/W
MB
A5
A4
A3
A2
A1
A0
       说明:bit7:1—读,0—写;
               Bit6:1—多字节读写;0—单字节操作;
               Bit5~bit0:ADXL345内部寄存器地址A5~A0;
  • 三、I2C-2线模式操作ADXL345内部寄存器编程要点
1.ADXL345 I2C通信模式的硬件连接电路
这里需要注意:a. cs_n必须上拉至VDD以启动I2C总线模式
                             b.SDA和SCL需上拉电阻,(2.2KΩ-400Kbitps,10KΩ—100kbitps)
                             c.SDA为双向通信端口,故在FPGA的IO配置时,需将其配置为inout类型,在SOPC中SDA信号线需设置为bidirectional(tri-state)ports。
                             d.ALT_ADDRESS的接法对应的ADXL345的设备从地址不一样,具体为:
若ALT_ADDRESS = 1,ADXL345_slave_addr=0x1D;
相应的I2C第一字节:read-——0x3B,write——0x3A
若ALT_ADDRESS = 0,ADXL345_slave_addr=0x53;
相应的I2C第一字节:read——0xA7,write——0xA6
 
2.I2C时序操作要点
对ADXL345的I2C总线访问,只要严格按照NXP的i2c总线规范进行即可,可以采用nios2外挂I2C总线IP的方式实现,亦可以采用nios2 GPIO软件模拟的方式实现。
这里总结一下,初学者使用I2C总线是容易犯的错误:
如上,在用I2C总线协议访问ADXL345(其他所有的I2C器件也一样),无论是读操作还是写操作,I2C总线的SDA信号线上送出的第一字节都必须是SLAVE ADDRESS + WRITE,这一点切记不能搞错。我之前就是因为没有注意这一点,而在读ADXL345内部寄存器时,第一字节送成SLAVE ADDRESS + READ了,一直不出来数据,很是郁闷了半天。O(∩_∩)O~呵呵,最后改正确后,数据立马就出现了!!!!
  • 四、FPGA中嵌入式nios2软核调试经验小结
凡是牵涉到时序的外设(比如常见的i2c,spi,lin,can总线器件)调试,时序都是第一位的,顺序不正确,命令送不起,数据配置不了,信息也读不出来。一般在我们会借助示波器,逻辑分析仪来判断硬件电路连接的通断。
但是,逻辑分析仪价格昂贵,不易获得。好在FPGA里面提供了嵌入式的逻辑分析仪——QuartusII中为signaltap II,ISE里面为chipscope。我们可以免费使用它们,设置好触发条件,观察FPGA板子上实时运行的信号状态和顺序,何乐而不为呢!
另外,我们也可以把手中的FPGA板子用作免费的逻辑分析仪来用!方法很简单,就是用Quartus II做一个简单的FPGA工程,引出一定数量的IO口,并用将所有的IO口信号配置为Signaltap II的输入捕捉,并根据所要观察的信号和顺序设置好触发条件,采样时钟以及采样深度,保存并连同Quartus工程一起整体编译下载sof文件运行即可。实时准确,配置灵活,百试不爽呀!
 

ADXL345经验总结,采用SPI和I2C总线操作的更多相关文章

  1. [I2C]I2C总线协议图解

    转自:http://blog.csdn.net/w89436838/article/details/38660631 1  I2C总线物理拓扑结构      I2C 总线在物理连接上非常简单,分别由S ...

  2. 51单片机 | 基于I2C总线的秒表模拟应用

    ———————————————————————————————————————————— 参考地址: http://blog.csdn.net/junyeer/article/details/4648 ...

  3. I2C总线协议图解(转载)

    转自:http://blog.csdn.net/w89436838/article/details/38660631 另外,https://blog.csdn.net/qq_38410730/arti ...

  4. I2C总线协议详解

    I2C总线定义     I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C总线产生于在80年代,最初为音 ...

  5. Linux驱动之I2C总线设备以及驱动

    [ 导读] 本文通过阅读内核代码,来梳理一下I2C子系统的整体视图.在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,导致没有一个清晰的思路.所以从高层级来分析一下I2C系统的设计思路,将有助于 ...

  6. SPI、I2C、UART三种串行总线协议的区别

    第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous R ...

  7. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  8. 【转载】SPI总线和I2C总线的异同点

    来源:https://blog.csdn.net/lishun1422840684/article/details/77776763 总结的简单.明了.适用! 一:SPI接口的全称是"Ser ...

  9. i2c总线,设备,驱动之间的关系

    ------ 总线上先添加好所有具体驱动,i2c.c遍历i2c_boardinfo链表,依次建立i2c_client, 并对每一个i2c_client与所有这个线上的驱动匹配,匹配上,就调用这个驱动的 ...

随机推荐

  1. for和getElementByTagName配合

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 基于css3的环形动态进度条(原创)

    基于css3实现的环形动态加载条,也用到了jquery.当时的想法是通过两个半圆的转动,来实现相应的效果,其实用css3的animation也可以实现这种效果.之所以用jquery是因为通过jquer ...

  3. C#WinForm中复制、粘贴文本到剪贴板

    //复制: private void button1_Click(object sender, System.EventArgs e) {   if(textBox1.SelectedText != ...

  4. 第五弹:VGG

    接下来讲一个目前经常被用到的模型,来自牛津大学的VGG,该网络目前还有很多改进版本,这里只讲一下最初的模型,分别从论文解析和模型理解两部分组成. 一.论文解析 一:摘要 -- 从Alex-net发展而 ...

  5. 7 -- Spring的基本用法 -- 11...

    7.11 基于XML Schema的简化配置方式 Spring允许使用基于XML Schema的配置方式来简化Spring配置文件. 7.11.1 使用p:命名空间简化配置 p:命名空间不需要特定的S ...

  6. Linux进程实时IO监控iotop命令详解

    介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...

  7. ice grid配置使用第二篇------实际使用

    一    首先,启动ice grid 1 修改配置文件 node.cfg,appication.xml 修改registry.cfg 配置注册表信息: IceGrid.Registry.Client. ...

  8. python函数的参数传递问题---传值还是传引用?

    摘要:在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象.不可更改对象的传递属于传值,可更改对象属于传引用.想要在函数中传递 ...

  9. Android Material各种颜色设置

    Blogpost about support appcompat v21 from Chris Banes

  10. iOS开发之监听键盘高度的变化

    最近做的项目中,有一个类似微博中的评论转发功能,屏幕底端有一个输入框用textView来做,当textView成为第一响应者的时候它的Y值随着键盘高度的改变而改变,保证textView紧贴着键盘,但又 ...