当前位置:   article > 正文

IIC驱动程序开发_i2c驱动开发

i2c驱动开发

加速度传感器驱动
mma8653

1.关于I2C (IIC)
	1). I2C的定义
		由飞利浦公司开发的两线式串行同步总线
		通信使用两条线
		一个时钟周期占一个bit位		
		SCL:时钟线 (区别于异步通信)
		SDA:数据线				
	2). I2C的特点
		a) 互联时只有两根线,硬件互联的成本低
		b) 一条IIC总线上可以接多个IIC设备,
			有主从之分, 每次通信的发起和结束都有主设备决定
		c)	每个从设备都有特定的从设备地址 (7bit)
		d)	总线上可以有多个主设备,支持总线冲突仲裁			
	3)IIC通信协议
		辅助信号:
			start信号
				SCL处于高电平期间	SDA上出现一个下降沿	
			stop信号
				SCL处于高电平期间	SDA上出现一个上升沿
			ack信号
				第九个周期 SCL处于高电平期间	 接受方将SDA拉低
			nak信号
				第九个周期 SCL处于高电平期间	 接受方未将SDA拉低
				
		空闲状态 SCL和SDA处于高电平状态	
		发送数据时从高bit位开始发送
		采取低送高取的方式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.1 电路原理图

	MCU_SCL_2 -----> GPIOD6
	MCU_SDA_2 -----> GPIOD7
	控制D6 D7管脚形成I2C通信时序有两种方式:
	
	1) 纯软模拟
	软件直接控制两个管脚上的电平变化
	2) 软硬件结合
	软件控制I2C控制器  I2C控制器控制以上两个管脚
	I2C 控制器能做哪些工作  还需要软件完成哪些工作 
	以及如何配合工作	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.2 cpu datasheet

  GPIOD6 D7 都需要选择功能一.
  GPIODALTFN0
  		[15:14] 	01    D7配置为功能1
  		[13:12]		01	D6 配置为功能1
  
  CPU内部集成了3个I2C控制器
  
  问mma 8653连接到了哪个I2C控制器上
  根据电路原理图中mm8653芯片连接到了CPU GPIOD6 D7推断 连接到I2C2控制器上.
  通信速率标准模式下: 100kbit/s
  快速模式下:400kbit/s
  可以配置成主设备或者从设备
  
  I2CCON2  0xC00A6000
   		[3:0] 1111,发送时钟先设置成最慢  屏蔽硬件问题   		
		[4] 读操作时,读到的是0,未出现中断未决. 1,出现了中断未决.
			写操作时, 0,该位清0,  1,无效
			轮询是否收发完成
		[5] 1,使能收发中断
		[6] 1, I2C CLOCK = PCLK / 256 (越慢越好)
		[7] 0/1 禁止/使能ACK信号的产生
		
  I2CSTAT2  
		[0] 是否收到ACK
		[4] 0/1 禁止/使能输出
		[5] 读操作
			 0/1 总线处于空闲/忙状态
			 写操作
			 0/1 产生STOP 产生START信号
		[7:6] 10, 主设备接受模式
				11,主设备发送模式
				
  I2CDS2
  		[7:0] 收发数据

  I2CLC2
  		[1:0] 01,SDA延时5个PCLK周期再跳变
  		[2] 1,使能滤波
  		
  I2CCLKENB2
  		[3] 1,给I2C控制器的时钟始终使能
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

2.3 从加速度传感器读取ID值并显示

  问题1:从设备地址是多少?
  			0x1D 
  			同一个I2C控制器的从设备地址只能挂载一个,从设备地址不可以重复.
  问题2: 该芯片中有多少个特殊功能寄存器
  			  大约有50个
  问题3: ID值存在于哪个特殊功能寄存器中?
  			 存在于WHO_AM_I 寄存器,
  			 该寄存器的地址是0x0d,
  			 ID值为 0x5A.
  问题4:  如何读取mma8653芯片寄存器中的值
  			主设备:发start, 发0x1d<<1 |  0 收ACK 发0x0d 收ACK 发start 发0x1d<<1 | 1 收ACK 收数据 发NAK 发STOP
  			
  问题5: 如何才能向mma8653芯片寄存器中写入值
  			主设备:发start 发0x1d<<1 | W 收ACK 发0x0d 收ACK 发要写入寄存器的数据 收ACK 发数据 收ACK ... 发数据 不回ACK 发送stop
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.4 itoa 函数的实现

  这里提供两种实现方式:
  • 1
num = 0x123456bd  buf= 0x123456bd
void itoa(char *buf, unsigned int num)
{
   
  unsigned int tmp = 0;
  int i;
  i = 9;
  buf[0] = '0';
  buf[1] = 'x';
  while (num)
  {
   
    tmp = num % 16; 
    if (tmp > 10) 
    {
      
      buf[i] = tmp - 10 + 'A';
    }   
    else {
   
      buf[i] = tmp  + '0';
    }   
    i--;
    num /= 16; 
  } 
  while (i>=2)
  {
   
    buf[i--] = '0';
  }
  buf[10] = 0;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
void itoa (unsigned int num, char *buf)
{
   
  int i = 0;
  unsigned int tmp = 0;
  int j = 0;
  char buf1[11] = {
   0};
  if (num == 0)
  {
   
    buf1[i] = '0';
    i++;
  }
  while (num) {
   
    tmp = num % 16;
    buf1[i] = (tmp > 9) ? (tmp - 10) + 'a' : tmp + '0';
    num = num / 16;
    i++;
  }
  i--;
  for (i; i >= 0;i--)
  {
   
    buf[i] = buf1[j];
    j++;
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在这里插入图片描述
3.读加速度值

加速度值存在于哪些寄存器中?
	地址为0x01~0x06的寄存器中
如何将该芯片切换为active模式?
	地址为0x2a的寄存器CTRL_REG1 
	[0] 1/0 ACTIVE/STANDBY模式
  • 1
  • 2
  • 3
  • 4
  • 5

iic.h

#ifndef __IIC_H_
#define __IIC_H
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/713160
推荐阅读
相关标签
  

闽ICP备14008679号