12_IIC裸板

12_IIC裸板

1、IIC读写操作原理

黑色->主到从、红色->从到主
写:1_START、2_设备地址(7位) | 方向(1位)、3_回应、4_数据(8位) | 回应、5_P(结束)
读:1_START、2_设备地址(7位) | 方向(1位)、3_回应、4_数据(8位) | 回应、5_数据 | 回应、6_P(结束)
方向:0->写 1->读
在这里插入图片描述
START:SCL保持高电平、SDA从高变低。
P(停止):SCL保持高电平、SDA从低变高。
主设备发出START信号之后,用9个CLK来传输8位数据
第9个CLK是回应信号ACK(SDA为低电平)。
SCL低电平时,SDA可以变化;SCL高电平时,SDA保持不变。

读操作:
在这里插入图片描述
写操作:
在这里插入图片描述

2、数据的双向传输

2.1 主设备发送时,从设备不发送:可以通过SCL区分
2.2 主设备发送时,从设备的“发送引脚”不影响数据发送,反之相同
发送引脚连接三极管如图:
ACK:SDA为低电平
A B SDA
0 0 1(由上拉电阻决定)
0 1 0
1 0 0
1 1 0
在这里插入图片描述
不影响SDA,不驱动三极管;②想输出高电平,不驱动;③想输出低电平,驱动
例:主——(8bit)—>从
前8个CLK
从设备不要影响,不驱动三极管
主设备决定数据
第9个CLK,由从设备决定数据
主设备不驱动三极管,SDA高
从设备决定数据:
SDA高:NO ACK
SDA低:ACK

3、2440的IIC控制器

1 设置IICCON来设置时钟
2 设置分频系数把时钟降低为想要的频率
3 设置IICSTAT发出START信号
4 将数据写入IICDS中,之后就自动的设置时钟、将数据通过SDA发送出去
5 第9个CLK来检查IICSTAT查询是否有ACK信号:
有ACK表示数据成功发出,继续发下一个数据:再次将数据写入IICDS中…
无表示数据发送失败
6 发完数据不想再发了,就设置IICSTAT来发送P信号停止发送
在这里插入图片描述
在这里插入图片描述
在第9个CLK发生中断,中断处理过程,SCL为低,谁都不能使用IIC:
对于写:
若无ACK:出错结束(发出P信号)
若有ACK:
若仍有数据,写入IICDS,清中断
若无,结束
对于读:
回应一个ACK信号:
还想再读:清中断,启动传输
不想读了:结束
重点:发生IIC中断时,SCL被拉低。阻止继续使用IIC,清中断后才能继续使用。
S3C2440读写数据流程:
写(发送):
IICDS = val
发完,产生中断,拉低SCL
中断程序里,判断状态,IICDS = val,IIC继续工作②
读(接收):
发起传输,接收数据
产生中断,SCL被拉低
中断程序中,判断,设置好之后,value= IICDS,IIC继续工作,继续接收新数据—>②

IIC控制器传输信号:
在这里插入图片描述
IIC传输原理:
在这里插入图片描述
主机发送地址时:
由于i2c设备不同,地址数量也不同。在1k2k都只有一页地址,4k有2页。。。
在这里插入图片描述
发送地址时:
P2 P1 P0表示不同的页数;A2 A1 A0为硬件引脚。
在这里插入图片描述
例如:AT24C02只有一个page,8位的地址可以访问到;
AT24C08有4个page,在Start信号之后,再发出设备地址时可以指定访问那一页。
在这里插入图片描述

4、编写代码

可参考1期的IIC裸机程序

5、测试

使用oflash下载bin文件进行裸机测试:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值