使用Beaglebone Black的I2C

刘东丽   2014-2-26 11:50 楼主
本文我将使用BBB的I2C1读取气压传感器芯片BMP085和三轴陀螺仪L3G4200D的值。
前言首先说明,我使用的硬件外设是一个九轴气压传感器模块,包括一个三轴陀螺仪芯片,一个三轴磁场传感器芯片,一个三轴加速度计芯片和一个气压传感器芯片。这4个芯片使用同一个I2C与BBB通信,下面记录一下它的使用方法。
I2C是一种串行通讯方法,它只需要两根线就能实现通讯,一根时钟线SCL,一根数据线SDA。一般情况下这两根线都使用上拉电阻,同时把芯片的管脚设置成开漏输出(简单理解开漏输出的含义就是:让它输出低电平时,它能输出低电平;而让它输出高电平时,它就断路,什么也不输出,由外接电平决定这个引脚的电平)。如果芯片内部带有上拉电阻(比如BBB的芯片就自带上拉电阻),那不外接上拉也可以。
BBB系统自带了一个Linux下的I2C工具i2c-tools,非常好用,下文以i2c开头的命令都是这个工具包里的,如果你的系统里没有的话,可以搜索并下载i2c-tools工具包。
BBB上有两个可用的I2C,i2c-0和i2c-1,分别对应header上的I2C1和I2C2(总是这么混乱= =)。我们这里使用i2c-1,对应的header是P9_19和P9_20。我怎么知道它有两个可用的I2C呢?使用命令 i2cdetect -l 就可以看到
[plain] view plaincopyprint?

  • i2c-0 i2c OMAP I2C adapter I2C adapter
  • i2c-1 i2c OMAP I2C adapter I2C adapter

i2c-0        i2c               OMAP I2C adapter                        I2C adapteri2c-1        i2c               OMAP I2C adapter                        I2C adapterOK,下面开始操作。
检查引脚功能配置首先确认一下i2c-1对应的IO口复用功能是否正确(BBB默认就是正确的,所以无需进行配置)。查表得,P9_19和P9_20分别对应95和94号引脚。(在新页面打开图片可看到完整图)


输入命令
[plain] view plaincopyprint?

  • # cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | grep 97c

# cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | grep 97c上述命令把pins这个文件中包含97c的内容输出(97c是表中看到的引脚地址),得到95号引脚的功能和复用寄存器值

[plain] view plaincopyprint?

  • pin 95 (44e1097c) 00000073 pinctrl-single

pin 95 (44e1097c) 00000073 pinctrl-single
95号引脚的功能寄存器值是0x00000073,化成2进制是1110011,其含义是:启用功能3(即I2C2_SCL),使能上下拉,开启上拉(所以我们可以不必外接上拉电阻了),使能输入,高速模式。同样可以检查94号引脚,也是0x00000073。
查找i2c设备的地址(此时我们还没有插入设备)使用命令# i2cdetect -y -r 1 ,可以查看i2c设备地址。其中 -y 选项用来屏蔽讨厌的确认环节,-r 是因为AM3359不支持一种叫做Quick Write的东东,1 代表我们要查看i2c-1总线上的设备(也就是P9_19和P9_20上插着的设备)。输出如下
[plain] view plaincopyprint?

  • 0 1 2 3 4 5 6 7 8 9 a b c d e f
  • 00: -- -- -- -- -- -- -- -- -- -- -- -- --
  • 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- --
  • 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 70: -- -- -- -- -- -- -- --

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f00:          -- -- -- -- -- -- -- -- -- -- -- -- --10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- --60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --70: -- -- -- -- -- -- -- --这里的地址都是16进制表示的。--代表该地址没有设备,UU代表这个地址正忙(也许被内部资源占用了,见图中的0x54到0x57这4个地址)。下面我把i2c设备插上以后再执行命令,输出变成了

[plain] view plaincopyprint?

  • 0 1 2 3 4 5 6 7 8 9 a b c d e f
  • 00: -- -- -- -- -- -- -- -- -- -- -- -- --
  • 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
  • 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  • 50: -- -- -- 53 UU UU UU UU -- -- -- -- -- -- -- --
  • 60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- --
  • 70: -- -- -- -- -- -- -- 77

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f00:          -- -- -- -- -- -- -- -- -- -- -- -- --10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --50: -- -- -- 53 UU UU UU UU -- -- -- -- -- -- -- --60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- --70: -- -- -- -- -- -- -- 77
会发现多出了4个地址:0x1e,0x53,0x69和0x77。因为我接入的模块上包含4个芯片,所以这个总线上显示了4个地址。通过读芯片手册得知气压计对应的是0x77这个地址。这一步就完成了。
需要补充说明的是,这里显示的是i2c设备的地址(1110111b=0x77),i2c的设备地址只有7位,最高位当做0。而读/写地址则在最低位增加一个1/0(11101111b / 11101110b),这使得读写地址与设备地址看起来很不相同。
查看和修改设备的寄存器值输入命令# i2cdump -y 1 0x77,我们可以查看设备的寄存器值,其中 -y 还是屏蔽确认环节,1 还是代表查看i2c-1总线,0x77是要查询的设备地址。

[plain] view plaincopyprint?

  • 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
  • 00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 80: a5 94 4d 19 b3 27 38 43 8a 2a 1e 05 fb af c7 6e ??M??'8C?*?????n
  • 90: 84 df 5f b0 56 5a 15 7a 00 3a 80 00 d4 bd 09 80 ??_?VZ?z.:?.????
  • a0: a5 94 4d 19 b3 27 38 43 8a 2a 1e 05 fb af c7 6e ??M??'8C?*?????n
  • b0: 84 df 5f b0 56 5a 15 7a 00 3a 80 00 d4 bd 09 80 ??_?VZ?z.:?.????
  • c0: 00 00 bc 33 00 00 00 00 00 00 00 10 00 00 00 03 ..?3.......?...?
  • d0: 55 02 06 00 00 00 00 00 00 00 00 00 00 00 00 00 U??.............
  • e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • f0: 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 ......?.........

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................80: a5 94 4d 19 b3 27 38 43 8a 2a 1e 05 fb af c7 6e    ??M??'8C?*?????n90: 84 df 5f b0 56 5a 15 7a 00 3a 80 00 d4 bd 09 80    ??_?VZ?z.:?.????a0: a5 94 4d 19 b3 27 38 43 8a 2a 1e 05 fb af c7 6e    ??M??'8C?*?????nb0: 84 df 5f b0 56 5a 15 7a 00 3a 80 00 d4 bd 09 80    ??_?VZ?z.:?.????c0: 00 00 bc 33 00 00 00 00 00 00 00 10 00 00 00 03    ..?3.......?...?d0: 55 02 06 00 00 00 00 00 00 00 00 00 00 00 00 00    U??.............e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................f0: 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00    ......?.........
这里用16进制显示了每个寄存器的值,具体哪个寄存器是干嘛的,就得查阅芯片的数据手册了。
如果想取出某个特定寄存器的值,比如0x80寄存器,可以使用命令 i2cget -y 1 0x77 0x80实现。如果想向某个寄存器写入值,可使用命令 i2cset -y 1 0x69 0x20 0x0f实现。(向i2c-1总线上,设备地址为0x69,寄存器地址为0x20处写入值0x0f)
使用BMP085驱动读取气压值很巧的是,BBB自带了BMP085气压芯片的驱动,所以我们可以更方便地读取气压值。输入命令
[plain] view plaincopyprint?

  • # echo bmp085 0x77 > /sys/class/i2c-adapter/i2c-1/new_device

# echo bmp085 0x77 > /sys/class/i2c-adapter/i2c-1/new_device加载成功后使用如下命令就可以读取气压值了

[plain] view plaincopyprint?

  • # cat sys/bus/i2c/drivers/bmp085/1-0077/pressure0_input

# cat sys/bus/i2c/drivers/bmp085/1-0077/pressure0_input
使用完毕以后,我们可以用如下命令从驱动中卸载这个i2c设备
[plain] view plaincopyprint?

  • # echo 0x77 > /sys/class/i2c-adapter/i2c-1/delete_device

# echo 0x77 > /sys/class/i2c-adapter/i2c-1/delete_device想查看加载或卸载是否成功的话,可以输入如下命令
[plain] view plaincopyprint?

  • # dmesg | grep bmp

# dmesg | grep bmp你应该会看到类似下面的输出
[plain] view plaincopyprint?

  • [ 6428.602566] i2c i2c-1: new_device: Instantiated device bmp085 at 0x77
  • [ 6428.633419] bmp085 1-0077: Successfully initialized bmp085!
  • [ 6436.479407] i2c i2c-1: delete_device: Deleting device bmp085 at 0x77

[ 6428.602566] i2c i2c-1: new_device: Instantiated device bmp085 at 0x77[ 6428.633419] bmp085 1-0077: Successfully initialized bmp085![ 6436.479407] i2c i2c-1: delete_device: Deleting device bmp085 at 0x77问题但是BBB没有带其他芯片的驱动,我暂时还不知道如何自己写驱动。(见最后更新)更奇怪的是我查看其他设备地址的寄存器,得到很诡异的输出。
比如# i2cdump -y 1 0x69 c 时:
[plain] view plaincopyprint?

  • 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
  • 00: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 10: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 20: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 30: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 40: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 50: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 60: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 70: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 80: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • 90: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • a0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • b0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • c0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • d0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • e0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????
  • f0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 ????????????????

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef00: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????10: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????20: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????30: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????40: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????50: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????60: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????70: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????80: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????90: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????a0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????b0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????c0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????d0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????e0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????f0: c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4 c4    ????????????????
更新解答上面的问题是输出模式的原因。# i2cdump -y 1 0x69 c 命令中的c代表连续字节输出。把它去掉,用默认的字节输出模式就可以了。

[plain] view plaincopyprint?

  • 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
  • 00: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3 ?f??L?????$?;?.?
  • 10: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83 D?"???@`????????
  • 20: 07 00 00 00 00 00 00 00 00 f0 fb 06 ce fc 00 20 ?........?????.
  • 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 80: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3 ?f??L?????$?;?.?
  • 90: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83 D?"???@`????????
  • a0: 07 00 00 00 00 00 00 00 00 f0 fb 06 ce fc 00 20 ?........?????.
  • b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef00: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3    ?f??L?????$?;?.?10: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83    D?"???@`????????20: 07 00 00 00 00 00 00 00 00 f0 fb 06 ce fc 00 20    ?........?????. 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................80: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3    ?f??L?????$?;?.?90: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83    D?"???@`????????a0: 07 00 00 00 00 00 00 00 00 f0 fb 06 ce fc 00 20    ?........?????. b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
再多说两句,这个设备是L3G4200D三轴陀螺仪,通过查芯片手册得知,0x20寄存器的第4位是芯片使能,现在0x20寄存器的值是0x07,即00000111b,我要把它变成00001111b,即0x0f,输入命令# i2cset -y 1 0x69 0x20 0x0f

[plain] view plaincopyprint?

  • 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
  • 00: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3 ?f??L?????$?;?.?
  • 10: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83 D?"???@`????????
  • 20: 0f 00 00 00 00 00 1d ff 33 00 d5 ff fc ff 00 20 ?.....?.3.?.?..
  • 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • 80: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3 ?f??L?????$?;?.?
  • 90: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83 D?"???@`????????
  • a0: 0f 00 00 00 00 00 1d ff 52 00 f7 ff 24 00 00 20 ?.....?.R.?.$..
  • b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  • f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............….

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef00: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3    ?f??L?????$?;?.?10: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83    D?"???@`????????20: 0f 00 00 00 00 00 1d ff 33 00 d5 ff fc ff 00 20    ?.....?.3.?.?.. 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................80: c4 66 a5 cc 4c d0 89 c1 c2 e0 24 18 3b 87 00 d3    ?f??L?????$?;?.?90: 44 b5 22 04 0c 80 40 60 1a 11 ee 90 83 01 85 83    D?"???@`????????a0: 0f 00 00 00 00 00 1d ff 52 00 f7 ff 24 00 00 20    ?.....?.R.?.$.. b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ............….
就成功使能陀螺仪了。根据芯片手册,0x28到0x2d这6个寄存器存放的是三轴角速度的值,所以我们比较上面两次i2cdump的结果会发现,这几个寄存器是有变化的,说明芯片正常工作了。

回复评论 (1)

感谢!楼主无私分享。
点赞  2014-3-2 21:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复