UART、I2C、SPI接口常见面试问题总结

2023-05-16

UART

定义:Universal Asynchronous Receiver/Transmitter - 通用异步收发传输器。

特点:速率不快、可全双工、结构上一般由波特率产生器、UART发送器、UART接收器组成,硬件2-3线。

线:RXD,TXD,GND,半双工的话就两根(地线必须有)。

空闲位

UART协议规定,当总线处于空闲状态时信号线的状态为高电平。

起始位

开始进行数据传输时发送方要先发出一个低电平来表示传输字符的开始(与空闲位相反)。

数据位

数据可以是5、6、7、8、9位,一般为8位,先发送最低位。

奇偶校验位

串口校验分为几种方式:

1.无校验(no parity)。

2.奇校验(odd parity):如果数据位中“1”的数目是偶数,则校验位为“1”,反之为“0”。

3.偶校验(even parity):如果数据位中“1”的数目是偶数,则校验位为“0”,反之为“1”。

4.mark parity:校验位始终为1。

5.space parity:校验位始终为0。

停止位

数据结束标志,可以是1、1.5、2位的高电平。

即可设置的有数据位校验位停止位

波特率

数据传输速率使用波特率来表示,单位bps,如果串口波特率为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。


I2C

定义:Inter-Integrated Circuit - 集成电路总线。

特点:双向、双线、串行、多主控接口标准、速率不快、半双工、同步接口、具有总线仲裁机制。非常适用于器件之间近距离经常性数据通信,可实现设备组网。

线:SCL、SDA。

起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 

结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

写操作

主机发送起始信号后发送I2C从机地址(7位)和写操作0(1位),主机等待从机发送ACK,收到ACK后主机发送从机寄存器地址(8位),接着继续等待ACK,等到ACK后主机发送要写入寄存器的数据。主机发送data,从机发送ACK,重复多次可顺序写入多个寄存器直至主机产生结束信号。

读操作(随机读)

主机发送起始信号后,继续发送从机地址和写操作0,主机等待从机发送ACK,收到ACK后主机发送从机寄存器地址,接着继续等待ACK,等到ACK后主机再次发起起始信号,然后发送从机地址和读操作1,并等待ACK,从机发送ACK之后接着发送指定寄存器里的数据,主机发送ACK表示收到,从机继续发送数据即顺序读取下一个寄存器。当主机希望停止接收数据时就返回一个非应答信号NACK,数据传输将结束。

总线仲裁机制

SDA线的仲裁是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致,是,继续发送;否则,退出竞争。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失(因为仲裁结束之前各节点发送数据一致),总线系统通过仲裁只允许一个主节点可以继续占据总线。

最大从机数

由I2C地址决定,7位地址,2^7=128,但是0x00不用,所以理论上可以挂127个从机。但是,虽然I2C协议没有规定总线上设备的最大数目,但是规定了总线的电容不能超过400pF。管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制,实际设计中经验值大概是不超过8个器件。

上拉电阻作用

I2C的接口一般都是OD或者OC门,芯片内部无上拉电阻时,外部需要加上拉电阻才能输出高电平。


SPI

定义:Serial Peripheral Interface - 串行外设接口。

特点:同步、串行、高速、可全双工、可实现多个SPI设备互联、硬件2-4线。

线:MISO、MOSI、SCLK、CS。最少可以只用2根,单向通信的时候可以只使用一条数据线,只有一个从机的时候可以取消片选线。

传输模式

通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式。

CPOL=0,表示当SCLK=0时处于空闲态,SCLK=1有效。

CPOL=1,表示当SCLK=1时处于空闲态,SCLK=0有效。

CPHA=0,表示数据采样是在第一个跳变沿,数据发送在第二个跳变沿。

CPHA=1,表示数据采样是在第二个跳变沿,数据发送在第一个跳变沿。

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

UART、I2C、SPI接口常见面试问题总结 的相关文章

  • 【UART】Verilog实现UART接收和发送模块

    目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现 UART RX 模块 UART 发送部分 UART TX 模块图 UART TX 时序图 Verilog 实现 U
  • Linux下CH452数码管芯片驱动调试(GPIO模拟I2C)

    1 设备连接 主控板处理器为Cortex A5处理器 内核4 9 0 主控板和CH452引脚定义如下表1 1所示 表1 1 主控板和CH452引脚定义 序号 CH452引脚定义 主控板引脚定义 1 SDA PB29 2 SCL PB30 3
  • ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

    测试第三课 ESP32 C3的串口通信测试 老样子 使用Enocean无线模块和ESP32 C3进行串口通信 目录 前言 1 UART示例测试 1 1 UART 基础测试 1 2 与Enocean无线模块串口通信测试 2 ESP32 C3
  • Java SPI机制

    一 SPI机制简介 SPI的全名为Service Provider Interface java spi机制的思想 系统里抽象的各个模块 往往有很多不同的实现方案 在面向的对象的设计里 一般推荐模块之间基于接口编程 模块之间不对实现类进行硬
  • 使用HAL库开发STM32:UART基础使用

    文章目录 目的 基础说明与初始化 基础说明 初始化 数据接收和发送 轮询方式 中断方式 DMA方式 其它说明 总结 目的 UART 异步串口 是单片机非常常用的一个功能 一般用作设备或模块间通讯的一种方式 通常所说的232或是485通讯从写
  • spi,ClassLoader,双亲委托模式

    转载 https www cnblogs com hiyujie p wo xueJava1ClassLoader yu shuang qin wei tuo mo sh html 1 ClassLoader分类 Java虚拟机会创建三类C
  • SPI总线verilog hdl实现(1)SPI通信

    SPI总线传输只需要4根线就能完成 这四根线的作用分别如下 SCK Serial Clock SCK是串行时钟线 作用是Master向Slave传输时钟信号 控制数据交换的时机和速率 MOSI Master Out Slave in 在SP
  • I2C接口

    I2C的结构和特点 他是一具有两条总线线路 即一条串行数据线SDA和一条串行时钟线SCL 每个连接到总线上的器件都可以通过唯一的地址联系主机 它是一个真正的多主机总线 数据传输通过冲突检测和仲裁防止数据被破坏 串行的8位双向数据传输位速率更
  • UART ISR Tx Rx 架构

    我让事情变得复杂了吗 我正在构建我的代码 以便通过 UART 从 8051 micro 与外围设备进行通信 外设响应主机的命令 一次只能响应一个命令 这是一个简单的发送和接收协议 tx1 rx1 tx2 rx2 tx3 rx3 每个 TX
  • Android Things:连接到串行调试控制台

    我一直在尝试连接到串行控制台树莓派 3 with 安卓事物 using USB to TTL cable从我的Linux Ubuntu 机器 尽管我按照文档连接了电缆 但执行时我得到的只是minicom命令如下 with 没有机会输入任何字
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 从 Linux 用户空间设置 16550A UART 硬件 FIFO 中断级别

    我目前正在使用 16550 兼容的 UART 并且我希望能够更改 FIFO 中断触发级别 我在高 UART 负载下丢失字节 并且我想降低阈值 这是一个动力不足的嵌入式系统 当然 如果我愿意 我可以在 8250 port c 驱动程序中更改它
  • SPI 电子墨水显示屏与 PIC 18F46K22 连接时出现问题

    我正在使用一个图18F46K22 https ww1 microchip com downloads en DeviceDoc 40001412G pdf在 SPI 主模式下与Waveshare 1 54 电子纸模组 https www w
  • ADXL345 与 ESP32 I2C 垃圾值问题

    我已根据以下教程使用 I2C 接口将 ESP32 与 ADXL345 连接起来Tutorial http www esp32learning com code esp32 and adxl345 sensor example php 但是
  • 启用 DMA 的 UART Tx 模式

    我已经为 UART 在传输模式下编写了一个简单的设备驱动程序 并启用了 DMA 和中断 我使用的硬件是 omap 4460 pandaboard 其中加载了 Linux 3 4 下面我分享一下相关部分的代码 在开放阶段 dma map io
  • 在 Raspberry Pi 上使用 Python smbus - 与语法混淆

    我正在尝试在 Raspberry Pi 上使用 python smbus 使用 I2C 与 MMA7660 加速计芯片进行通信 在下面的代码中 我正在读取芯片的寄存器 0x 00 0x01 0x02 和 0x03 并且我得到的值完全相同 查
  • Python - 如何使用 ioctl 或 spidev 从设备读取输入?

    我有一个提供它的供应商提供了一些 C 代码来监听按钮按下 该代码使用ioctl 该设备具有 SSD1289 控制器 按钮不需要额外的引脚 可以通过 SPI 读取其状态 这就是我想要的 读取按下了哪个按钮 我试图在 Python 中为我自己的
  • 使用 /dev/tty* 进行 9 位 uart 仿真

    我有一个不常见的协议 它需要 9600 波特率 9 位和 1 个停止位 我找不到任何可以实现此发送 接收的驱动程序 我可以寄东西到 dev tty 用于模拟这些查询 我应该发送什么 如何模拟 9600 波特率 您可以使用粘性奇偶校验 也称为
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • STM32F4 板上的 SPI 从机设置

    我正在尝试通过主从配置中的 SPI 在两个 STM32F4 发现板之间进行通信 我已经有了主设备的代码 但我对需要对从设备的 SPI 初始化进行的更改感到有点困惑 我还想在主机发送数据时实现中断 而不是让从机一直轮询 RXNE 寄存器 但是

随机推荐

  • Linux:启动sshd服务的时候提示错误Unsupported option UsePAM

    问题 分析 默认的configure 没有启用 with pam选项 xff0c 如果在sshd config配置文件里加入UsePAM no 就会导致上面的错误提示 UsePAM与ssh密码认证相关 xff0c 但公司服务器禁止通过密码认
  • Ubuntu: ssh升级后服务不稳定不断重启,查看sshd服务状态为activating(start)的解决办法

    现象 xff1a Ubuntu20 04 升级ssh7 4到8 1版本后 xff0c ssh连接不稳定 xff0c 时断时续 xff0c systemctl status sshd查看服务状态为activating start xff0c
  • Linux:grep命令检索文件内容详解

    前言 Linux系统中搜索 查找文件中的内容 xff0c 一般最常用的是grep命令 xff0c 另外还有egrep命令 xff0c 同时vi命令也支持文件内容检索 下面来一起看看Linux利用grep命令检索文件内容的详细介绍 方法如下
  • stm32零基础应该怎么入门?

    单片机 xff08 microcontrollers xff09 是一种集成电路芯片 xff0c 是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU 多种I O口和中断系统 定时器 计数器等功能集成到一块硅片上构成的一个小而完善
  • Linux:CPU频率调节模式以及降频方法简介

    概述 cpufreq的核心功能 xff0c 是通过调整CPU的电压和频率 xff0c 来兼顾系统的性能和功耗 在不需要高性能时 xff0c 降低电压和频率 xff0c 以降低功耗 xff1b 在需要高性能时 xff0c 提高电压和频率 xf
  • Linux:rsyslog 日志丢失 messages lost due to rate-limiting

    系统日志显示 cat var log messages Apr 7 16 20 01 ngnodeb rsyslogd imjournal 154664 messages lost due to rate limiting 解决方法 修改配
  • Linux:shell 中的单行注释和多行注释

    关于 shell 中的单行注释和多行注释 单行注释 众所周知 xff0c 使用 比如想要注释 echo 34 Hello World 34 root 64 test vim test sh echo 34 Hello World 34 多行
  • Shell三剑客之sed:修改 xml

    修改前 vim config xml lt config input type verify 61 34 bool 34 name 61 34 flow bypass class 34 visible 61 34 true 34 gt fa
  • STM32串口通信

    STM32串口通信 一 基于寄存器与基于固件库编写的差异二 stm32串口通信实战1 烧录方式2 代码及效果图 三 C语言程序里全局变量 局部变量 堆 栈等概念四 stm32的堆 栈 全局变量的分配地址 一 基于寄存器与基于固件库编写的差异
  • keil下的FreeRtos多任务程序

    keil下的Freertos多任务程序 1 手动移植FreeRtos xff08 以STM32F103为例 xff09 2 直接使用野火的模板 1 手动移植FreeRtos xff08 以STM32F103为例 xff09 用该链接下载Fr
  • 随笔小记(二十七)

    神经网络中Epoch Iteration Batchsize相关理解和说明 batchsize xff1a 中文翻译为批大小 xff08 批尺寸 xff09 简单点说 xff0c 批量大小将决定我们一次训练的样本数目 batch size将
  • 手把手教物体检测——EfficientDet

    目录 摘要 训练数据 1 下载Pytoch版的EfficientDet 2 制作数据集 3 下载EfficientNets预训练模型 4 安装模型需要的包 5 放置数据集 6 修改train py中的参数 测试 注意 摘要 谷歌大脑团队 Q
  • 简化的围棋棋子规则(C++实现)

    题目 xff1a 输入棋盘 xff1a 1 1 2 3 2 3 3 3 2 3 3 3 2 2 2 3 3 3 1 2 2 2 3 3 2 1 1 2 3 1 其中1代表空 xff0c 2代表白子 xff0c 3代表黑子 xff09 输出
  • MATLAB中将图像转换为二值图像im2bw

    在MATLAB中将图像转换为二值图像 xff0c 主要运用im2bw函数 xff0c 涉及到一个灰度门槛的数值 对于灰度图像 bw 61 im2bw I level level空着的话 xff0c 默认是0 5 level一般使用grayt
  • Ubuntu 20.04 Gazebo安装 及模型库下载

    安装参考自官方教程noetic版本 xff0c 为了安装模型库 xff0c 就一起编辑了 1 设置你的电脑来接收软件 sudo sh c 39 echo 34 deb http packages osrfoundation org gaze
  • git pull强制覆盖本地修改

    有时本地代码做了修改 xff0c 但又想放弃这部分修改 xff0c 重新在新代码基础上进行开发 xff0c 这时可用如下方法覆盖先前修改 xff0c 并拉取远程仓更新本地代码 方法一 xff1a git fetch git reset ha
  • gazebo中视觉仿真怎么使用自定义贴图的问题

    gazebo中提供了很少的贴图 xff0c 场景只是用这几张贴图 xff0c 视觉SLAM仿真很容易在不该闭环的时候闭环 xff0c 导致根本没法用 那么我们怎么添加自己的贴图呢 xff1f 首先gazebo建模 使用默认贴图 xff0c
  • 传统定位方法简介--------里程计、IMU惯性传感器以及光电编码器等

    移动机器人最初是通过自身携带的内部传感器基于航迹推算的方法进行定位 xff0c 后来进一步发展到通过各种外部传感器对环境特征进行观测从而计算出移动机器人相对于整个环境的位姿 目前为止 xff0c 形成了基于多传感器信息融合的定位方法 现有移
  • 路由器接口

    深刻认识到如果不好好学习计算机网络 xff0c 对于自己学习后台的知识有很大的阻碍 所以 xff0c 这段时间好好把这方面的知识加强一下 一般路由器上的接口分为三大类 xff1a 一 用于局域网的LAN接口 二 用于广域网接入 互联的WAN
  • UART、I2C、SPI接口常见面试问题总结

    UART 定义 xff1a Universal Asynchronous Receiver Transmitter 通用异步收发传输器 特点 xff1a 速率不快 可全双工 结构上一般由波特率产生器 UART发送器 UART接收器组成 xf