工作总结—HMC5883L应用的一些说明

1、HMC5883L通过IIC总线与主机进行通信,其IIC控制字节地址如下

7-bit地址0x1E0001 1110
8-bit读取地址0x3D0011 1101
8-bit写入地址0x3C0011 1100
可以发现,HMC5883L的IIC控制字节地址与IIC总线控制字节地址是一致的。其中高4位为器件类型标识符,接着3位为片选,最低位为读写控制位(1为读操作,0为写操作)。


HMC5883L IIC接口特性说明:

HMC5883L作为一个IIC兼容装置,该装置包含一个7-bit串行地址,并支持IIC协议。HMC5883L可以支持标准和快速模式,分别为100kHz和400kHz,但不支持高速模式(Hs)。

要求主机的活动(寄存器读取和写入)优先于内部活动,例如测量,这一优先次序的安排是为了不让主机等待,同时IIC总线占用的事件比必须的时间长。

2、HMC5883L一些引脚说明

VCC2.16V-3.6V
GND 
SCL串行时钟——IIC总线主/从时钟
SDA串行数据——IIC总线主/从数据
DRDY数据准备,中断引脚,内部被拉高,选项为连接,当数据位于输出寄存器上时会在低电位上停250us

3、HMC5883L寄存器说明

地址名称访问默认值
00配置寄存器A(Configuration Register A)读/写1111 0000(CRA)
01配置寄存器B(Configuration Register B)读/写0010 0000
02模式寄存器(Mode Register)读/写1000 0001(默认为单一测量模式)
03数据输出X MSB寄存器(Data Output X MSB Register)0000 0000
04数据输出X LSB寄存器(Data Output X LSB Register)0000 0000
05数据输出Z MSB寄存器(Data Output Z MSB Register)0000 0000
06数据输出Z LSB寄存器(Data Output Z LSB Register)0000 0000
07数据输出Y MSB寄存器(Data Output Y MSB Register)0000 0000
08数据输出Y LSB寄存器(Data Output Y LSB Register)0000 0000
09状态寄存器(Status Register)0000 0000
10识别寄存器A(Identification Register A)0100 1000(ASCII值为H)
11识别寄存器B(Identification Register B)0011 0100(ASCII值为4)
12识别寄存器C(Identification Register C)0011 0011(ASCII值为3)

4、HMC5883L读写说明

HMC5883L利用地址指针来说明读取或者写入的寄存器位置。这些指针由主机发往从机,并且跟在7-bit地址和1-bit读/写控制位之后。

下面以读数据为例说明HMC5883L IIC读取数据时应该进行的操作时序。

1、发送从器件控制字节0x3C(写入操作)。注意,此操作之后主机再往从机发送的数据就是主机写入从机的数据

2、发送数据3(由器件手册可知,3为数据输出X MSB寄存器的地址)。此操作也就是写想要读取数据的寄存器地址。

3、发送从器件控制字节0x3D(读取操作)。注意,此操作之后从机便向主机发送步骤2所发送的地址处的数据。

4、将从器件发送过来的数据写入相应的数组。


关于HMC5883L读数据需要作如下说明。

HMC5883L为了尽可能减少主机与从机之间的通信,地址指针会在不需要主机干涉的情况下自动更新。这种自动更新的地址更新有两种附加的特性。

1、当访问12或者更高的地址时,指针会自动更新到00。也就是返回首寄存器的地址。

2、当指针达到08时,指针回滚到地址03。也就是说此时指针一直在6个数据寄存器之间滚动,从机一直滚动向主机发送数据。

To move the address pointer to a random register location, first issue a “write” to that register location with no data byte following the commend. For example, to move the address pointer to register 10, send 0x3C 0x0A.

为了将地址指针移动到随机的寄存器地址,首先应该发送写指令,之后再跟一个无数据字节(在这里我自己理解我所要移动到随机的寄存器的地址)。例如,要将地址指针移动到寄存器10 ,就发送0x3C 0x0A。

0x3C为HMC5883L的写控制字节,告诉从机下一个发送的字节为写入到从机的字节。

0x0A为HMC5883L的寄存器10的地址,此时地址指针就指向寄存器10了。如果要进行读操作,则发送HMC5883L的读控制字节0x3D,然后从机将会发送相应的寄存器中的数据返回至主机。如果要进行写操作,则发送HMC5883L的写控制字节0x3C,然后再发送的数据就会写入当前指针指向的寄存器。





  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值