ARM:IIC总线使用(day04 mma8653芯片驱动编程)

S5P6818内部集成了3个独立的I2C控制器
问题:mma8653芯片挂在了哪个I2C控制器上?
答:根据mma8653芯片连接的cpu管脚来推断 对应了CPU内部的I2C 2控制器

关于I2C总线 (谈谈对I2C的理解)

1 I2C总线定义

    飞利浦开放的两线式串行同步总线
    SCL: CLOCK 时钟线
    SDA: DATA  数据线 

2 I2C总线的特点

    1)通信时只需要两条线 硬件互联成本低
    2)I2C总线上可以存在多个主设备 多个从设备 
    3)总线上的通信的发起和终止都由主设备控制
    4)每个从设备都有一个唯一的从设备地址(一般为7bit)
    5) 支持总线冲突仲裁
    
	I2C控制器通信的速率100Kb/s

I2C总线通信协议 (一定要会画图)

空闲状态时 SCL SDA默认为高电平
通信开始时 首先是主设备发送一个start信号
        start信号,当SCL为高电平是 SDA出现一个下降沿     
		从高bit开始发送数据 发送数据时“低送高取”
        低送高取, 当SCL为低电平是 SDA根据要发送的是0还是1 进行跳变,跳变位低电平或者高电平
接收方收到8bit数据后,要给发送方回应答信号(ACK)
        ACK,  在第九个周期 SCL为高电平时, SDA为低电平(一定是被接收方拉低)
    如果还有下一个字节数据要发送 从高bit开始发送数据, 发送数据时 “低送高取”
    接收方接收方收到8bit数据后,要给发送方回应答信号(ACK)
    。。。
    发送方无数据发送是,主设备需要产生一个stop信号
        stop,  当SCL为高电平时 SDA出现一个上升沿   
问题:软件如何控制GPIOD6 GPIOD7形成相应的I2C通信时序?
     有两种方式
        1)软件模拟的方式 (STM32)
           软件直接操作GPIO管脚 形成时序  
        2) 软硬件结合的方式 (集成了I2C控制器的SOC)
           软件控制I2C控制器
           I2C控制器控制GPIO管脚 形成时序

mma8653的特殊功能寄存器和GPIO管脚的IIC控制

电路管脚

 MCU_SCL_2 ----》GPIOD6
 MCU_SDA_2 ----> GPIOD7

P70 管脚配置

	GPIOD6 选择可选功能1 (SCL)
	GPIOD7 选择可选功能1 (SDA)
GPIODALTFN0 0XC001D020
 [13:12]   01, 将GPIOD6管脚配置为可选功能1
 [15:14]   01, 将GPIOD7管脚配置为可选功能1

时钟频率设置及中断设置

I2CCON2  0XC00A6000
 [3:0] 1111, 
         TX CLOCK = I2C CLOCK/(15+1) //越慢越好
 [4]  读操作
        0/1 没有/有中断未决情况的出现
      写操作
        0, 该bit会被清0
        1, 不允许
 [5]   0/1 禁止/使能中断
 [6]   0, I2C CLK = Fpclk/16
       1, I2C CLK = Fpclk/256  越慢越好
 [7]   0/1 禁止/使能主设备收到数据后自动给从设备回ACK信号

发送设置

I2CSTAT2 0XC00A6004
 [0]   0/1 收到/未收到对方回的ACK信号
 [4]   0/1 禁止/使能数据发送   
 [5]   读操作 
          0/1 总线空闲/忙状态
       写操作
          0/1 产生stop/start信号
 [7:6] 10, 主设备接收模式
       11,主设备发送模式
I2CDS2 0XC00A600C
 [7:0] 收发数据
I2CLC2 0XC00A6010
 [1:0] 01, SCL为低电平后 间隔5个PCLK周期SDA再跳变
 [2] 0/1 禁止/使能滤波

P302 使能时钟信号

 I2CCLKENB2 0XC00B0000
    [3] 1, 使能给到I2C 2控制器的时钟信号

P294 复位

 IPRESETREG0 0XC0012000
    [22] 0, I2C 2控制器执行复位操作

ARM:IIC总线使用(day04 mma8653芯片驱动编程)_第1张图片
ARM:IIC总线使用(day04 mma8653芯片驱动编程)_第2张图片

你可能感兴趣的:(ARM-CORTEX-A)