单片机
返回首页

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

2022-07-25 来源:csdn

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


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


接下来是讲该芯片的引脚:

引脚各是什么意思;

A2A1A0,主要是地址选择信号,这个是跟开发板上的VCC和VSS连接在一起的;

SDA:数据线

SDL:时钟线

WP:写保护,当其与VCC连接在一起时,就只能进行读,不能进行写;当与VSS连接在一起时,可以进行读和写操作;


接下来是一些信号的时序:

IIC总线的协议、其他各种信号


启动信号:

停止信号:

数据有效信号:

应答信号:


器件寻址:

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


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


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


写操作:

字节写、页写


应答查询:

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


读操作:

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


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


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


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

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

最新器件
精选电路图
  • 简洁的过零调功器电路设计与分析

  • 单稳态控制电路设计与分析

  • 永不缺相启动运行的电动机控制电路

  • 运算放大器IC741的基本工作原理及在电路中的实现方式

  • 一个简单的红外耳机电路

  • 基于CA3193的热电偶放大器电路