打印
[学习资料]

【PIC单片机】-- IIC相关知识

[复制链接]
12184|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wowu|  楼主 | 2022-6-14 09:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ic, pi
01 IIC相关知识
同步通信:



异步通信:


我们要讲的是IIC是同步通信;

另外有一点上节课我们有讲到过串口模块我们可以用PIC单片机本身内部提供的,也可以选择普通的IO引脚,通过模拟时序得到串口通信。而今天的IIC模块也是类似的道理,我们PIC单片机内部已经集成了IIC模块,我们只要操作相应寄存器即可。当然我们也可以通过普通的IO引脚,通过模拟时序得到IIC通信。

接下来我们打开芯片手册:
主控同步串行接口,包含SPI通信以及IIC通信;



02 时序
最基本就是启动信号、停止信号、数据有效信号



因为PIC内部封装了芯片,所以只要让寄存器的某一位配置为某一值,就可以产生这个信号。

接下来我们看两个主要时序:就是在主模式下的发送端(对应写时序)、接收端(对应读时序);
发送时序:

接受时序:

虚线框内这部分是启动信号,接着SCL产生9个脉冲,SDA要发送8个数据;刚开始是发送器件的地址,比如今天咱们要进行写操作的对象就是24C256_EEPROM;

这个时序是发送时序,所以很显然,我们这个R/W非 == 0.最后一位其实是方向位,就是你是接受数据还是发送数据。

只要SEN=1,就会产生这个方框里面的信号;如何是用51单片机,就需要用两个引脚模拟这两个时序。启动产生之后,硬件自动清零。

启动标志位SSPIF,SSP的中断标志寄存器,中断标志位,启动信号产生后,中断信号会置位;如果要检查是否有正常启动,就检测SSPIF有没有置位。数据发完之后,又会置位。

BF位:跟SSPBUF是否有数据有关;发送完就是置0;

SEN:启动信号
PEN:停止信号

R/W非:IIC的特性位;

RCEN:接受使能位;每次在接受一帧数据之前都要让RCEN置1;

ACKSTAT:这一位是用来判断从设备有没有给你发送应答信号,这一位是由硬件自动置位;
ACKDT:用来作为本次通信是否结束,需要应答就设置为0

RSEN:数据的传送方向一旦改变,就必须重新启动一下


03 寄存器
在MSSP模型中,与IIC模型相关的寄存器有六个:
• MSSP Control Register (SSPCON)
• MSSP Control Register 2 (SSPCON2)
• MSSP Status Register (SSPSTAT)
• Serial Receive/Transmit Buffer Register (SSPBUF)
• MSSP Shift Register (SSPSR) – Not directly accessible
• MSSP Address Register (SSPADD)
(从动模式下存储IIC设备的地址,主动模式下是IIC通信的波特率设置)
需要配置RC3、RC4引脚(时钟线SCL、数据线SDA)
SSPSTAT:主控同步串行口状态寄存器

SMP这一位是用来选择通信速率的,我们通常是使用100khz,所以我们选择1
CKE:
其他这六位都只能进行读(它的变化都是由硬件自动完成的),主要看一下bit0BF位。

WCOL:写冲突检测位,置0
SSPOV:接受溢出标志位,置0
SSPEN:同步串行口使能位,置1
CKP:SCK释放控制位,我们在主控模式下没用到,所以置1
SSPM3~SSPM0:1000

最后SSPCON ==0x38;

GCEN:不用管
ACKSTAT:从设备有没有给你发送应答,硬件自动置位
ACKDT:是否应答
ACKEN:应答时序使能
RCEN:接受数据使能
PEN:启动停止信号
RSEN:数据的传送方向一旦改变,就必须重新启动一下
SEN:启动信号使能位

初始化的时候先全部设置为0即可。

SSPADD:
从动模式下存储IIC设备的地址,主动模式下是IIC通信的波特率设置。
(SSPM3~SSPM0:1000公式在这里,最后就是得到100k)

04 外设模块EEPROM
那我们知道PIC单片机这个IIC通信方式之后,接下来我们就来介绍一个外设模块,也就是E2PROM,我们知道EEPROM是一个内存单元,我们可以往里面读或者写数据,那这个模块的读或者写的方式是通过IIC通信来进行的。

我们每学习一个外设,我们首先要知道它要如何使用,那这个时候就是需要看该外设的芯片手册,所以接下来我们需要讲一下EEPROM芯片手册的知识。今天我们要讲的这个是24C256这个芯片,除此之外还有24C02、24C04、24C08、24C16、24C32、24C64、24C128等等.

然后这个256K是位,如果换成字节就是32K字节
(32x1024=32,768字节)。

那大家第一次看着玩意可能会觉得,不知道要看啥。我带着大家看一遍。

我这边网上找了一份中文版,我们等等对照着看:
https://wenku.baidu.com/view/efea9a75f46527d3240ce002.html

特性、概述、管脚的封装、内部方框图、电气特征(直流特征、交流特征) 这些咱们可以先不管

接下来是讲该芯片的引脚:
引脚各是什么意思;
A2\A1\A0,主要是地址选择信号,这个是跟开发板上的VCC和VSS连接在一起的;
SDA:数据线
SDL:时钟线
WP:写保护,当其与VCC连接在一起时,就只能进行读,不能进行写;当与VSS连接在一起时,可以进行读和写操作;

接下来是一些信号的时序:
IIC总线的协议、其他各种信号

启动信号:
停止信号:
数据有效信号:
应答信号:

器件寻址:
首先我们刚开始会发送一个起始信号,起始信号发送完了之后发送这几位数,刚刚我们看了EEPROM是有3个地址选择引脚的,那我们如果有3位二进制的数,就有8种情况。

所以我们一条总线上面可以连接8个24C256,然后我们根据A2\A1\A0的情况就可以选择对其中某一个24C256进行操作。

接下来是选择读信号还是写信号,1是读0是写。写完之后,从设备会发送一个应答信号。

写操作:
字节写、页写

应答查询:
当你发送一个这样的时序的时候,代表着我向EEPROM写入一个数据;从这个停止信号开始之后,24C256内部就开始写操作,只有内部完成写操作,它才会发出应答信号,只有接受到应答信号之后,才能进行写操作。

读操作:
1、立即读操作;2、随机读操作;3、连续读操作;(3与1和2的区别,在于读到一个数据后,主机是发送应答信号还是发送停止信号,如果发送应答信号就代表连续读,如果发送停止信号就代表结束。)

从13页开始,就是芯片封装的一些信息,我们操作单片机就用不到了,这个通常是在画PCB的时候会用到;所以我们后面那部分也不用管它。

所以我们在来总结一下,虽然这个芯片手册有38也,但是后面那26页不用看,前面4页也不太需要看,总共其实就是阅读中间这8、9页。

那中间这8、9页的话,刚刚我们讲了:就包含三部分内容,第一部分:引脚相关信息;第二部分:启动信号、结束信号、应答信号、数据有效的一些时序;第三部分:如何进行读操作和写操作。


使用特权

评论回复
沙发
小飞鼠12| | 2022-6-16 11:19 | 只看该作者
学到知识了

使用特权

评论回复
板凳
arima| | 2022-6-18 10:12 | 只看该作者
有教材吗?

使用特权

评论回复
地板
UVTime| | 2022-6-30 16:00 | 只看该作者
学习了,谢谢

使用特权

评论回复
5
努力反击| | 2022-6-30 16:30 | 只看该作者

使用特权

评论回复
6
lsf9761| | 2022-7-3 10:16 | 只看该作者

使用特权

评论回复
7
sesefadou| | 2022-12-2 22:08 | 只看该作者
引脚少,硬件实现简单,可扩展性强

使用特权

评论回复
8
pmp| | 2022-12-2 22:17 | 只看该作者
在编写I2C驱动中我们一般是要对寄存器的数据进行读操作,因此就需要首先写入从设备地址,读取寄存器的数据。

使用特权

评论回复
9
lihuami| | 2022-12-3 12:23 | 只看该作者
i2c总线上最多可以挂多少个从器件?

使用特权

评论回复
10
mollylawrence| | 2022-12-3 13:11 | 只看该作者
硬件II2C和软件I2C有什么区别  

使用特权

评论回复
11
jkl21| | 2022-12-3 13:50 | 只看该作者
硬件I2C能与软件I2C一起用一个I2C通道么

使用特权

评论回复
12
beacherblack| | 2022-12-3 15:08 | 只看该作者
pic软件模拟IIC还是使用硬件IIC,哪个更好

使用特权

评论回复
13
chenjun89| | 2022-12-3 18:52 | 只看该作者
图文并茂,阅读理解更好。

使用特权

评论回复
14
uiint| | 2022-12-4 19:41 | 只看该作者
怎样测模拟I2C总线速率?               

使用特权

评论回复
15
louliana| | 2022-12-4 21:31 | 只看该作者
怎么直接使用iic接口?                 

使用特权

评论回复
16
1988020566| | 2022-12-4 22:31 | 只看该作者
I2C驱动怎么管理多个相同的设备,设备地址不同

使用特权

评论回复
17
kkzz| | 2022-12-5 20:27 | 只看该作者
有硬件IIC,为什么很多应用,还要模拟IIC

使用特权

评论回复
18
ingramward| | 2022-12-6 13:15 | 只看该作者
怎样才能重复利用IIC驱动代码?  

使用特权

评论回复
19
abotomson| | 2022-12-6 13:58 | 只看该作者
这个是模拟ic的吗?              

使用特权

评论回复
20
AdaMaYun| | 2022-12-25 13:54 | 只看该作者
讲的挺多的,硬件II2C和软件I2C的区别可以详细说一下嘛?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

3852

帖子

1

粉丝