历史上的今天
今天是:2024年09月16日(星期一)
2019年09月16日 | STM8S学习01——SPI&IIC
2019-09-16 来源:eefocus
1、温习IIC总线协议
1)I2C 总线的一些特征
1> 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL
2> 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地址 主机可以作为主机发送器或主机接收器
3> 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁,防止数据被破坏
4> 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速模式下可达 3.4Mbit/s
5> 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整
6> 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制
2)起始和停止条件
1> 在 I2C 总线中 唯一出现的是被定义为起始 S 和停止 P 条件,其中一种情况是在 SCL 线是高电平时 SDA 线从高电平向低电平切换;
2> 这个情况表示起始条件,当 SCL 是高电平时 SDA 线由低电平向高电平切换表示停止条件;
3> 起始和停止条件一般由主机产生 总线在起始条件后被认为处于忙的状态 在停止条件的某段时间后总线被认为再次处于空闲状态;
4> 如果产生重复起始 Sr 条件而不产生停止条件,总线会一直处于忙的状态,此时的起始条件 S 和重复起始 Sr 条件在功能上是一样的;
5> 如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便,但是没有这种接口的微控制器在每个时钟周期至少要采样 SDA 线两次来判别有没有发生电平切换
2、SPI协议学习
1)SPI总线介绍
1> SPI接口是Motorola首先提出的全双工三线同步串行外围接口,采用主从模式架构,支持多设备应用,一般只支持单主设备;
2> 时钟由主设备控制,数据在时钟脉冲下按位传输,高位在前;
3> 目前应用中的数据速率可达几Mbps
2)SPI总线
1> SPI在一般应用中有4根信号线:MOSI、MISO、SCK、SS;
MOSI:主器件数据输出,从器件数据输入
MISO:主器件数据输入,从器件数据输出
SCK:时钟信号,由主设备控制发出
/SS:从设备选择信号,由主设备控制<根据此信号可以决定连接到总线上从设备的数量>
2> 传输模式:
A、根据时钟极性(CPOL)以及相位(CPHA)不同可以组合成 4 种工作模式:SPI0、SPI1、SPI2、SPI3;
(1)SPI0:CPOL=0,CPHA=0
(2)SPI1:CPOL=0,CPHA=1
(3)SPI2:CPOL=1,CPHA=0
(4)SPI3:CPOL=1,CPHA=1
B、时钟极性(CPOL)定义了时钟空闲状态电平,对传输协议没有重大影响;
(1)CPOL=0:时钟空闲状态为低电平;
(2)CPOL=1:时钟空闲状态为高电平。
C、时钟相位(CPHA)定义数据的采样时间;
(1)CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样;
(2)CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样;
3> 优缺点
A、优点:
(1)接口简单,利于硬件设计与实现;
(2)时钟速度快,且没有系统开销;
(3)相对抗干扰能力强,传输稳定
B、缺点:
(1)缺乏流控制机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙,因此,需要软件弥补,增加了软件开发工作量;
(2)没有多主器件协议,必须采用很复杂的软件和外部逻辑来实现多主器件架构
上一篇:STM8S学习02——ADC
史海拾趣
|
被动红外探测器是一种在安防工程中使用极为普遍的一类探测器。但要其正常使用,既要防止漏报,又要减少误报,特别是如何将误报现象降到最低的限度是一个摆在广大工程设计人员面前的一个课题。要做到这一点,必须首先要了解被动红外探测器的一些基本 ...… 查看全部问答> |
|
本想用一用realview IDE里的一些高级功能,但到realveiw debugger,所支持的仿真器中没有什么ULINK之类的便宜东东,而支持的ULINK不知为何realview ice的仿真器这么贵,… 查看全部问答> |
|
因为使用到一款PCI5110的CAN卡,因为他们公司原来是在2.2下面编译的,现在我需要在2.0下面进行,出现驱动的.o文件格式识别不了,请教各位大哥有什么办法,还有,他们有帮忙修改了,格式是可以识别,但是打开CAN卡的时候,函数返回值都是正确的,但 ...… 查看全部问答> |
|
在嵌入式开发中,经常看到如下的代码(现在使用的是threadx): TX_INTERRUPT_SAVE_AREA …… TX_DISABLE …… TX_ENABLE 尤其是在对硬件寄存器操作时基本上都要关中断。 我的理解是,关中断用来防止系统调度,保证对寄存器操作的原子性。但 ...… 查看全部问答> |
|
我用串口调试助手发00 01 02 03,但接收到的是A0 B0 A4 C0等一些乱码,请教各位大侠!! 我的程序是C写的,用keil编译 #include #define uint unsigned int #define uchar unsigned char uint i=0; uchar data astring[10]; void main() { ...… 查看全部问答> |
|
我用的是LPC1788 想实现以太网功能,PHY 模块用的是DP83848 使用easyWeb 历程修改为发送数据,定义一个数组大小为600字节向电脑发送以太网帧,用以太网调试助手接受数据 发现每次接收到4200个字节, 每次接收将定义的数据重复发送了7次 不知道怎么 ...… 查看全部问答> |
|
求高手点拨。 想要使用单通道连续采样,工作在最高采样率。但是用TI的例程实测,采样率都低太多。 时钟用ADC内部振荡器,约5MHz,2个采样周期+13个转换周期,计算下来应该4us左右采一个点。 但是,输入5kHz的正方波——100us高电平, 采下来高 ...… 查看全部问答> |
|
谁能给讲一下定时器A中断向量寄存器(TAIV)的用法啊?或者提供一些示例。 还有为什么TAIV的值是偶数才会执行?是TI的规定吗? 多谢了。… 查看全部问答> |




