总线学习(BUS)

2023-05-16

1、总线的概念

总线是指计算机设备和设备之间传输信息的公共数据通道。总线是连接计算机硬件系统内多种设备的通信线路,一个重要特征是由总线上的所有设备共享,可以将计算机系统的多种设备连接到总线上。如果是某两个设备或设备之间专用的信号连接,就不能成为总线。

2、系统总线的架构图

3、微机中的总线分类

3.1、数据总线(Data Bus)

传输数据,是双向的。CPU可通过DB从内存或输入设备读取数据,又可通过DB将内部数据送至内存或输出设备。DB的宽度决定了CPU和计算机其他设备之间每次交换数据的位数。

3.2、地址总线(Address Bus)

传送CPU发出的地址信息,是单向的。传送地址信息的目的是指明与CPU交换信息的内存单元或I/O设备。存储器是按地址访问的,所以每个存储单元都有一个固定的地址,要访问1MB存储器中的任一单元,需要给出1M个地址,需要20位地址。地址总线的宽度决定了CPU的最大寻址能力。

3.3、控制总线(Control Bus)

传送控制信号、时序信号和状态信息等。有的CPU向内存或外部设备发出的信息,有的是内存或外部设备向CPU发出的信息。显然,CB中的每一条线的信息传送方向是一定的、单向的,单作为一个整体则是双向的。所以在各种结构框图中,凡涉及到控制总线CB,均是以双向线表示。

补充:

地址总线的宽度决定了CPU的寻址能力;数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;控制总线的宽度决定了CPU对系统中其他器件的控制能力。

4、常见的总线

4.1、I2C总线简介

是一种串行(同一时刻只能传输一个bit的信号,只需要一个数据线)、半双工(数据传输允许在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信)的总线,主要用于近距离、低速的芯片之间的通信;I2C有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;I2C总线硬件结构简单,简化PCB布线。

是一种多主机总线,连接在I2C总线上的器件分为主机和从机。主机有权发起和结束一次通信,从机只能被动呼叫;当总线上有多个主机同时启用总线时候,I2C也具备冲突检测和仲裁的功能防止错误产生。每个连接到I2C总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(但同一时刻只能有一个主机)。

4.1.1、通信过程

(1)主机发送起始信号启用总线

(2)主机发送一个字节数据指明从机地址和后续字节的传送方向

(3)被寻址的从机发送应答信号回应主机

(4)发送器发送一个字节数据

(5)接收器发送应答信号回应发送器

(6)循环(4)(5)

(7)通信完成后主机发送停止信号释放总线

4.1.2、起始信号和停止信号

SCL为高电平时,SDA由高变低表示起始信号。

SCL为低电平时,SDA由低变高表示停止信号。

起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线被释放,处于空闲状态。空闲时,SCL和SDA都是高电平。

停止:

主机不发了,就发送停止信号。

主机不接,不应答,主机就发送停止信号结束此次通信。

4.1.3、字节传送与应答

I2C总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送一位应答位来回答发送器。

4.1.4、同步数据信号

I2C总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。

 4.1.5、典型的I2C时序

(1)主机向从机发送数据

(2)从机向主机发送数据

(3)主机向从机发送数据,然后从机再向主机发送数据 

学习链接:​​​​​​I2C总线协议详解(特点、通信过程、典型I2C时序)_zhangduang_KHKW的博客-CSDN博客_i2c总线

4.2、SPI总线

4.2.1、SPI概念

SPI(Serial Peripheral Interface)串口外围设备接口。是一种高速的,全双工,同步的通信总线,极大节约了芯片管脚。主要应用在EEPROM、FLASH、实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

4.2.2、主从模式

SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(仅能为一个)主设备,一个或多个从设备。提供时钟的为主设备,接受时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

4.2.3、SPI信号线

SPI接口使用四根信号线通信:

SDI(数据输入)

SDO(数据输出)

SCK(时钟)

CS(片选)

MISO(Mast In Slace Out): 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。

MOSI(Msat Out Slace In): 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
SCLK:串行时钟信号,由主设备产生。
CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

 

 4.2.4、SPI数据发送接收

SPI主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。

(1)拉低SS信号线,表示与该设备进行通信。

(2)主机发送SCLK时钟信号,来告诉从机写数据或者读数据。

(3)主机将要发送的数据写到数据缓存区,缓存区通过移位寄存器,串行移位寄存器通过MOSI信号线将字节一位一位的移出去给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区

(4)从机将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

4.2.4、SPI通信的四种模式

通信双方必须工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制主设备的通信模式。

时钟极性CPOL定义时钟空闲状态电平:

CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时。

CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时。

时钟相位(CPHA)定义数据的采集时间。

CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样,在第2个边沿发送数据。

CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样,在第1个边沿发送数据。

 

 4.2.5、SPI的通信协议

主从设备必须使用相同的工作模式------SCLK、CPOL和CPHA,才能正常工作。如果有多个从设备,并且它们使用了不同的工作模式,那么主设备必须在读写不同的从设备时需要重新修改对应从设备的模式。

4.2.6、SPI三种模式

SPI工作在三中模式下,分别是运行、等待和停止。

运行模式(Run Mode)
这是基本的操作模式

等待模式(Wait Mode)
SPI工作在等待模式是一种可配置的低功耗模式,可以通过SPICR2寄存器的SPISWAI位进行控制。在等待模式下,如果SPISWAI位清0,SPI操作类似于运行模式。如果SPISWAI位置1,SPI进入低功耗状态,并且SPI时钟将关闭。如果SPI配置为主机,所有的传输将停止,但是会在CPU进入运行模式后重新开始。如果SPI配置为从机,会继续接收和传输一个字节,这样就保证从机与主机同步。

停止模式(Stop Mode)
为了降低功耗,SPI在停止模式是不活跃的。如果SPI配置为主机,正在进行的传输会停止,但是在CPU进入运行模式后会重新开始。如果SPI配置为从机,会继续接受和发送一个字节,这样就保证了从机与主机同步。
 

重点:

STM32中SPI初始化配置
(1)初始化GPIO口,配置相关引脚的复用功能,使能SPIx时钟。调用函数:void GPIO_Init();

(2)使能SPI时钟总线:RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE)

(3)配置SPI初始化的参数,设置SPI工作模式:SPI_Init(SPI1,&SPI_Initstructure)

(4)使能SPI外设:SPI_Cmd(SPI1,ENABLE);
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

总线学习(BUS) 的相关文章

  • Spring Config 配置中心和Spring Bus配合使用的一些坑

    个人觉得bus这个东西这是坑多 折腾好一会 xff08 使用actuator bus refresh 而不用bus refresh xff09 首先Config 和 Client 项目都添加如下配置 management endpoints
  • Codeforces1153A-Serval and Bus(数学)

    原题链接 xff1a http codeforces com contest 1153 problem A 题目原文 xff1a A Serval and Bus time limit per test 1 second memory li
  • A. Serval and Bus

    outputstandard output It is raining heavily But this is the first day for Serval who just became 3 years old to go to th
  • $CF1153A\ Serval\ and\ Bus$

    看大佬的代码都好复杂 xff08 不愧是大佬 orz 蒟蒻提供一种思路 因为求的是最近的车对吧 qwq 所以我们可以用一个 while 循环所以没必要去用什么 for 至于这是 div2 的第一题还是比较水的 code include lt
  • Failed to get D-Bus connection: Operation not permitted

    docker容器centos7中 xff0c 通过systemctl start service出现下错误 Failed to get D Bus connection Operation not permitted docker中的容器启
  • px4驱动linux,S.Bus Driver for Linux

    用于 Linux 的 S Bus 驱动 S Bus Driver for Linux 允许基于 Linux 的无人机通过串行端口从 Futaba S Bus 接收机 访问多达 16 个通道 驱动程序还应该与使用 S Bus 协议的其他接收器
  • WSL的CentOS7报错Failed to get D-Bus connection: Operation not permitted解决办法

    WSL的CentOS7使用systemctl和service命令时报错Failed to get D Bus connection Operation not permitted 解决办法是更换systemctl文件 首先备份systemc
  • S.BUS协议

    内容 本篇文章主要是S BUS协议原理介绍 xff0c 并实现了arduino输出S BUS数据 S BUS简介 SBUS是一个接收机串行总线输出 xff0c 通过这根总线 xff0c 可以获得遥控器上所有通道的数据 目前很多模型及无人机电
  • SpringCloud(十一)Bus消息总线、Stream消息驱动

    一 Bus消息总线 需求 xff1a 分布式自动刷新配置功能 xff1b 解决 xff1a SpringCloud Bus配合Spring cloud Config使用可以实现配置的动态刷新 1 概述 定义 xff1a Spring Clo
  • 总线学习(BUS)

    1 总线的概念 总线是指计算机设备和设备之间传输信息的公共数据通道 总线是连接计算机硬件系统内多种设备的通信线路 xff0c 一个重要特征是由总线上的所有设备共享 xff0c 可以将计算机系统的多种设备连接到总线上 如果是某两个设备或设备之
  • ESP8266解析S-BUS协议

    Talk is cheap show you code 编译平台 xff1a Arduino IDE span class token comment 功能 xff1a 软件串口读取S BUS数据 xff1b 解析 xff1b 串口打印 s
  • simulink bus总线创建方法

    在simulink中创建bus总线 xff0c 主要包含2种方法 xff1a 基于模块创建总线对象 使用模块 xff0c 根据输入信号创建总线 基于 MATLAB 数据创建总线对象 可以使用 Simulink Bus cellToObjec
  • 记录一下关于MPC5744P CAN总线学习

    记录一下关于MPC5744P CAN总线学习 主要是针对开发出BUSOFF管理 xff0c NXP感觉都是一个套路 xff0c 无论powerpc xff0c 还是arm m status t span class token functi
  • bus总线

    有时候两个组件也需要通信 xff08 非父子关系 xff09 当然Vue2 0提供了Vuex xff0c 但在简单的场景下 xff0c 可以使用一个空的Vue实例作为中央事件总线 eventBus js放在assets import Vue
  • RS232/RS485/CAN_BUS 通信原理总结与通信波形分析

    分析一 xff1a 232串口信号 要点 xff1a RS232 xff0c 全双工 xff0c 采用三线制传输分别为TXD RXD GND xff0c 其中TXD为发送信号 xff0c RXD为接收信号 在RS232中任何一条信号线的电压
  • Futaba S-BUS controlled by mbed(使用mbed控制Futaba S-BUS)

    原文地址 xff1a Futaba S BUS controlled by mbed 代码地址 xff1a SBUS Library Introduction xff08 简介 xff09 The Futaba S BUS protocol
  • 【PCIe】3: PCIe BDF(Bus,Device,Function)

    目录 1 概述 2 BUS 总线号 3 Device 设备号 4 Function 功能号 1 概述 PCIe总线中的每一个功能都有一个唯一的标识符与之对应 这个标识符就是BDF Bus Device Function
  • 在原子变量的上下文中什么是总线锁定?

    我使用 C 很长时间了 现在我开始学习汇编并了解处理器的工作原理 不仅仅是为了好玩 而且我必须将其作为测试程序的一部分 在学习汇编时 我开始听到一些在讨论多线程时到处听到的术语 因为我在科学计算中进行了大量的多线程处理 我正在努力了解全貌
  • 一个变量仅由一个线程读取,由另一个线程读取和写入,是否需要同步?

    Motive 我刚刚学习多线程的基础知识 还没有完成它们 但我想在学习之旅的早期提出一个问题 以引导我了解与我正在从事的项目最相关的主题 Main A 如果一个进程有两个线程 一个编辑一组变量 另一个只读取所述变量 从不编辑它们的值 那么我
  • 是否有通用 I2C 命令来查看设备是否仍然存在于总线上?

    是否有通用的 I2C 命令来查看设备在初始化一次后是否仍然存在于总线上 例如 OLED 显示器 我问这个的原因是为了避免主程序由于库代码中存在无限循环而冻结 当设备断开连接时 例如 Wire 库 在 MCU 启动时 我想检查设备是否可用 并

随机推荐