回顾:
1、完善shell框架
增加Makefile
目标:依赖
(TAB)规则
.o:%.c
arm-cortex....-gcc -c -nostdlib $< -o $@
hello.c
hello:hello.c
gcc hello.c -o hello
增加一个链接脚本
进一步理解链接的过程
修改了BUG
对FIFO的控制
退格键的问题
------------------------------------------------------
1、I2C
1.1 I2C的定义
它是由飞利浦开发的两线式串行同步总线
1.2 特点:
通信使用两条线完成
SCL: 通信的双方使用的时钟信号
SDA: 通信的双方交换数据的通道
1)布线简单,硬件互联成本低
2)I2C总线上可以有多个设备,设备之间有主从之分
3)通信的发起者一定是主设备
4)I2C总线支持总线冲突仲裁
5)每个从设备都有特定的从设备地址
1.3 通信协议
起始信号:当SCL处于高电平时 SDA出现一个下降沿
结束信号: 上升
应答信号:发送方发送完一个字节,需要接收方确认
第九个周期,接收控制SDA
需要在SCL处于高电平期间,保证SDA上是低电平
(如果接收不拉低SDA,SDA默认是高电平)
收发数据过程中,SDA在SCL处于低电平期间进行
电平状态的转换,高
当SCL处于高电平期间保持SDA电平不变
主设备发送start信号,紧跟着主设备发送 从设备地址<<1|R/W#
写/发送过程
START Slaveaddress<<1|W# 等待ACK 写数据到SDA 等待ACK STOP
读/接收过程
START Slaveaddress<<1|R 等待ACK 从SDA读数据 发送ACK STOP
2、电路原理图
MCU_SCL_2 ----->GPIOD6
MCU_SDA_2 ----->GPIOD7
3、cpu datasheet关于I2C控制器的章节
3.1 管脚功能的选择
P70
GPIOD6: 选择为SCL2 对应的是功能1
P84
GPIOD7:选择为SDA2 对应的是功能1
P757
GPIODALTFN0 R/W 0xC001D020
[13:12] 01, GPIOD6选择为功能1
[15:14] 01, GPIOD7选择为功能1
3.2 I2C控制器的复位
system control P294
IPRESET0 R/W 0xC0012000
[21]: 数据手册上写错了
应该是[22]
0, 执行复位动作
3.3 I2C控制器
其中有3个I2C控制器
问题:G-sensor挂在哪个I2C控制器上
答:I2C2控制器
根据datasheet P84管脚功能说明
+
电路原理图中G-sensor使用管脚
推断G-sensor挂在了I2C2控制器上
收发的数据帧是8bit,发送是从高位开始发
收发数据的速率介于100Kbit/s ~ 400Kbit/s
I2C控制器可以配置为主设备也可以配置为从设备
I2CCON2 R/W 0xC00A6000
[3:0], 1111, 慢速发送数据
[4], pending ,中断未决标志
读到0 ,代表无中断未决
写入0, 清空该bit
读到1, 代表有中断未决
写入1,impossible
[5], 1,使能收发中断
[6], 1,I2C CLK = PCLK/256
[7], 0, 不产生ACK
1,自动产生ACK
I2C控制器的时钟源使能 P302
I2CLKENB2 0xC00B0000
[3] 1,使能给I2C控制器的PCLK时钟
I2CSTAT2 0xC00A6004
[0], 0,收到ACK信号
1,未收到ACK信号
[1], 0, start/stop信号已经产生
1,收到的从设备地址为0x00
[3], 0, 仲裁成功
1,总线冲突仲裁失败
[4], 0, 禁止输出使能
1,输出使能
[5], 读出0 代表总线空闲
写入0 产生stop信号
读出1 代表总线忙
写入1 产生start信号
[7:6] S5P6818数据手册中漏掉未指明其意义
s5p4418数据手册中有描述
或者通过阅读内核中I2C控制器驱动程序
I2CDS 0xC00A600C
[7:0] 数据的收发
收的时候就是读 这8bit
发的时候I2CSTAT2[4]=1 再做数据的写入
I2CLC 0xC00A6010
[1:0], sda delay时长为多少个周期
01/10/11
[2], 1 使能干扰信号的过滤
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。