文章目录
00 写在前面
该系列的文章,源自于担任过PIC单片机课程的助教,主要向学弟们讲解了几节实验课的内容。在此记录上课的一些知识。
本系列文章主要介绍的内容:
实验1–介绍和基本I/O–按钮和LED(学习嵌入式的第一步就是点一个灯,就像学习编程语言的第一步都是写一个“hello world”代码)
实验2–MPLAB+PICkit 3+LCD+I/O(这次主要是介绍液晶显示屏的使用,很多时候我们系统的调试都需要用到,比如做一个测温系统,那我们就可以通过液晶显示屏,显示传感器采集的数值,然后再通过软件来做进一步的处理)
实验3–ADC(这个是模数转化实验,就是之前模数电学习那些知识的一个综合运用)
实验4–串行通信–UART
实验5–串行通信–I2C
实验6–计时器和中断(这一部分也是很重要的知识点,在很多的嵌入式系统中都会用到,比如用单片机再加几个传感器就可以搭出智能车,智能车就会用到计时器、中断这些内容)
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页的话,刚刚我们讲了:就包含三部分内容,第一部分:引脚相关信息;第二部分:启动信号、结束信号、应答信号、数据有效的一些时序;第三部分:如何进行读操作和写操作。
05 结尾
大家记得点赞收藏!!!