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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jet007_007/article/details/51895069

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

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


HMC5883L IIC接口特性说明:

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

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

2、HMC5883L一些引脚说明

VCC 2.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读写说明

扫描二维码关注公众号,回复: 3775694 查看本文章

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,然后再发送的数据就会写入当前指针指向的寄存器。





猜你喜欢

转载自blog.csdn.net/jet007_007/article/details/51895069