第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)

news2024/11/23 7:06:41

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949

配套资料获取:https://renesas-docs.100ask.net

瑞萨MCU零基础入门系列教程汇总: https://blog.csdn.net/qq_35181236/article/details/132779862


第6章 串行通信接口(SCI)

本章目标

  • 了解串行通信协议
  • 了解SCI模块内部原理

6.1 协议介绍

6.1.1 通信的基本概念

一个嵌入式产品由许多元器件组成的,它们之间要互相协作,相互之间要进行通信。不同的元器件支持的通信方式是不同的,有的是串行的,有的是并行的;有的是同步的,有的是异步的。

本小节介绍一些常见的通信概念。

  1. 单工、半双工和全双工通信
  • 按照数据传输的方向,通信可以分为全双工、半双工和单工;
  • 全双工:双方之间、两个方向的数据都可以同时发送;
  • 半双工:双方之间、两个方向的数据都可以发送,但是同一时刻只能一方发送信息;
  • 单工:只能一方发信息,一方接受信息,通信是单向的。

全双工就像电话通信,双方任意时刻都可以同时说话、听到声音;半双工就像对讲机通信,两边不能同时说话;单工就像收音机,只能由广播站发送给收音机,是单向的。如图所示:

  1. 串行通信和并行通信

照数据传输的方式,通信可以分为串行通信和并行通信。串行通信简单的说就是数据依次传输,比如要传输0b11111111,一位一位的发送,需要发送8次。并行通信则是几个数据一起传输,同样是0b11111111,如果8位一起发送,只需要发送1次,如图所示:

由此可见,串行传输占用的通信线更少,成本低,通信速度相对较慢;并行传输占用的通信线多,成本高,通信速度相对更快。但随着对传输速度要求越来越高,并行传输开始出现信号之间的干扰,串行通信反而受干扰影响较小,之后又发展出差分传输等技术,极大地提高了串行传输速率,使得串行通信速度可能比并行通信速度更快。

串行通信就像单车道,行驶的车辆需要依次行驶。并行通信就像多车道,同时多辆汽车并排行驶。但当车速很快的时候,多车道上并列行驶的汽车之间会形成“气流”相互干扰,单车道则受影响较小,速度能够进一步提升。

  1. 同步通信和异步通信

按每一位数据的传输方式,可以分为同步通信和异步通信。数据在双方之间传输时,需要制定规则约定怎样传输一位数据,在这个基础上再约定怎样传输一个数据包。

同步通信的做法是加一个时钟信号,发送方和接收方在这个时钟的节拍下传输数据,比如常见的SPI、I2C。数据发起方会发出时钟信号,用来通知对方:你要接收数据了。对方可以在时钟信号的上升沿或下降沿采样数据。如下图所示:

对于异步通信,无需时钟信号,但是双方要遵守相同的约定:怎么表示起始信号、停止信号,怎么表示一位数据。如下图所示:

有多种异步通信协议,以红外遥控器的信号为例:

① 起始信号:遥控器发出一个9ms的低电平、4.5ms的高电平。接收器检测到这样的信号后,就知道要准备接收数据了

② 接下来就可以传输若干位的数据了,怎么表示每一位的数据呢?每一位数据都以0.56ms的低脉冲开始,随后是高脉冲:高脉冲为0.56ms时表示这位数据为0,高脉冲为1.69ms时表示这位数据为1。如下图所示:

因此,可以通过这样简单判断:有时钟信号的是同步通信,否则是异步通信。

  1. 通信的速率

对于同步通信,通信速率由时钟信号决定,时钟信号越快,传输速度就越快。

对于异步通信,需要收发双方提前约定速率,这也就是我们串口调试时,波特率不对显示乱码的原因。

通常使用比特率来描述通信速率的快慢,与之容易混淆的是波特率。

  • 比特率(Bitrate):系统在单位时间内传输的比特位(二进制0或1)个数,通常用Rb表示,单位是比特/秒(bit/s),缩写为bps;

  • 波特率(Baudrate):系统在单位时间内传输的码元个数,通常用RB表示,单位是波特(Bd);

100bit/s即是一秒钟传输100个0或1,100Bd即是一秒钟传输100个码元。

码元就是“承载信息量的基本信号单位”,以一条电线上传输的信号为例,码元就是电线上的电平值。

如果电线上电平只有0和3.3V两种选择,传输的信号是这2种电平之一,码元的状态只有2种。接收方可以把0V认为是二进制的0,把3.3V认为是二进制1。即:传输1个码元时,能用来表示1位数据。

如果电线上电平有0V、3.3V、5V、12V四种选择,传输的信号是这4种电平之一,码元的状态有4种。接收方可以把这4个电平认为是二级制的4个值:00、01、10、11。即:传输1个码元时,能用来表示2位数据。

因此码元状态为2时,比特率等于波特率,码元状态越多,每次传输的码元能携带的信息越多,自然速率也越高。

码元有N个状态时,比特率与波特率的关系式:

image6-1

  1. 常见通信协议

在嵌入式中,有众多通信协议,往往从性能、成本、稳定性、易用性等角度考虑选择合适的协议。常见的通信协议如下所示:

image7

6.1.2 UART协议

通用异步收发器简称UART,即“Universal Asynchronous Receiver Transmitter”,它用来传输串行数据:发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线上的信号,将串行数据收集放在缓冲区中,CPU即可读取UART获得这些数据。UART之间以全双工方式传输数据,最精简的连线方法只有三根电线:TxD用于发送数据,RxD用于接收数据,GND用于给双方提供参考电平,连线如图所示:

UART使用标准的TTL/CMOS逻辑电平(0~5V、0~3.3V、0~2.5V或0~1.8V四种)来表示数据,高电平表示1,低电平表示0。进行长距离传输时,为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平,3~12V表示0,-3~-12V表示1。

TxD、RxD数据线以“位”为最小单位传输数据。帧(frame)由具有完整意义的、不可分割的若干位组成,它包含开始位、数据位、较验位(需要的话)和停止位。发送数据之前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为波特率)、数据的传输格式(即有多少个数据位、是否使用较验位、是奇较验还是偶较验、有多少个停止位)。

数据传输流程如下:

  1. 平时数据线处于“空闭”状态(1状态)。
  2. 当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间──这样接收方检测到开始位后,再等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。
  3. UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将它们发送出去,首先发送最低位。
  4. 如果使用较验功能,UART在发送完数据位后,还要发送1个较验位。有两种较验方法:奇较验、偶较验──数据位连同较验位中,“1”的数目等于奇数或偶数。
  5. 最后,发送停止位,数据线恢复到“空闭”状态(1状态)。停止位的长度有3种:1位、1.5位、2位。

下图演示了UART使用7个数据位、偶较验、2个停止位的格式传输字符“A”(二进制值为0b1000001)时,TTL/CMOS逻辑电平、RS-232逻辑电平对应的波形。

6.1.3 I2C协议

  1. I2C总线的概念

I2C(Inter-Integrated Circuit,又称IIC)总线是一种由PHILIPS公司开发的串行总线,用于连接微控制器及其外围设备,它具有如下特点:

  • 只有两条总线线路:一条串行数据线(SDA),一条串行时钟线(SCL)。
  • 每个连接到总线的器件都可以使用软件根据它的惟一的地址来识别。
  • 传输数据的设备间是简单的主/从关系。
  • 主机可以用作主机发送器或主机接收器。
  • 它是一个真正的多主机总线,两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏。
  • 串行的8 位双向数据传输,位速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。
  • 片上的滤波器可以增加抗干扰功能,保证数据的完整。
  • 连接到同一总线上的IC 数量只受到总线的最大电容400pF的限制。

下图是一条I2C总线上多个设备相连的例子。

先说明一些术语,如下表所示。

  • 发送器:发送数据到总线的器件
  • 接收器:从总线接收数据的器件
  • 主机:发起/停止数据传输、提供时钟信号的器件
  • 从机:被主机寻址的器件
  • 多主机:可以有多个主机试图去控制总线,但是不会破坏数据
  • 仲裁:当多个主机试图去控制总线时,通过仲裁可以使得只有一个主机获得总线控制权,并且它传输的信息不被破坏
  • 同步:多个器件同步时钟信号的过程
  1. I2C总线的形象类比

在讲解协议细节前,先使用生活示例形象理解I2C协议:

体育老师:可以把球发给学生,也可以把球从学生中接过来。

  • 老师想发球时,步骤如下:

  • 老师想接球时,步骤如下:

依照这个简单的例子,可以引入IIC的传输协议:

① 老师说开始了,表示开始信号(start)
② 老师提醒某个学生要发球,表示发送地址和方向(address/read/write)
③ 老师发球/接球,表示数据的传输
④ 到球要回应:回应信号(ACK)
⑤ 老师说结束,表示IIC传输结束§

  1. I2C总线的信号类型

I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和响应信号。

  • 开始信号(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
  • 结束信号§:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
  • 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平。

它们的波形如图所示:

SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化,如图所示。

  1. I2C总线的数据传输格式:

发送到SDA线上的每个字节必须是8位的,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能继续接收或发送下一个字节,从机可以拉低SCL迫使主机进入等待状态。当从机准备好接收下一个数据并释放SCL后,数据传输继续。如果主机在传输数据期间也需要完成一些其他功能(例如一个内部中断服务程序)也可以拉低SCL以占住总线。

启动一个传输时,主机先发出S信号,然后发出8位数据。这8位数据中前7位为从机的地址,第8位表示传输的方向(0表示写操作,1表示读操作)。被选中的从机发出响应信号。紧接着传输一系列字节及其响应位。最后,主机发出P信号结束本次传输。

下图是几种I2C总线上数据传输的格式。

并非每传输8位数据之后,都会有ACK信号。有以下3种例外:

a) 当从机不能响应从机地址时(例如它正忙于其他事而无法响应I2C总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有被拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

b) 如果从机接收器在传输过程中,不能接收更多的数据时,它也不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。

6.1.4 SPI协议

SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达25MHz以上。

SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。

SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。假设现在主控芯片要传输一个0x56数据给SPI Flash,时序如下:

首先拉低CS0选中SPI Flash,0x56的二进制就是0b0101 0110,因此在每个SCK时钟周期,DO输出对应的电平。SPI Flash会在每个时钟周期的上升沿读取D0上的电平.

SPI和I²C对比如下表所示。SPI可以同时发出和接收数据,因此SPI的理论传输速度比I²C更快。SPI通过片选引脚选择从机,一个片选一个从机,因此在多从机结构中,需要占用较多引脚,而I²C通过设备地址选择从机,只要设备地址不冲突,始终只需要两个引脚。

功能说明SPI总线I2C总线
通信方式同步 串行 全双工同步 串行 半双工
通信速度一般50MHz以下100KHz、400KHz、3.4MHz
从设备选择引脚片选设备地址片选
总线接口MOSI、MISO、SCK、CSSDA、SCL
  1. SPI的物理拓扑结构

SPI可以一个主机连接单个或多个从机,每个从机都使用一个引脚进行片选,物理连接示意图如图所示:

  1. SPI的数据交换

在SCK时钟周期的驱动下,主机把数据驱动到MOSI上传给从机,从机把数据驱动到MISO上传给主机,如下图所示。

主机发送N字节给从机时,必定能接收到N字节,至于接收到的N字节是否有意义由从机决定。如果主机只想对从机进行写操作,主机只需忽略接收的从机数据即可。如果主机只想读取从机数据,它也要发送数据给从机(发送的数据可以是空数据)。

  1. SPI的传输模式

SPI有四种传输模式,如下表所示,主要差别在于CPOL和CPHA的不同。

  • CPOL(Clock Polarity,时钟极性)表示SCK在空闲时为高电平还是低电平。当CPOL=0,SCK空闲时为低电平,当CPOL=1,SCK空闲时为高电平。
  • CPHA(Clock Phase,时钟相位)表示SCK在第几个时钟边缘采样数据。当CPHA=0,在SCK第一个边沿采样数据,当CPHA=1,在SCK第二个边沿采样数据。
SPI模式CPOLCPHA说明
000时钟空闲状态为低电平;在时钟第一个边沿(上升沿)采样数据
101时钟空闲状态为低电平;在时钟第二个边沿(下降沿)采样数据
210时钟空闲状态为高电平;在时钟第一个边沿(下降沿)采样数据
311时钟空闲状态为高电平;在时钟第二个边沿(上升沿)采样数据

如下图所示,CPHA=0时,表示在时钟第一个时钟边沿采样数据。当CPOL=1,即空闲时为高电平,从高电平变为低电平,第一个时钟边沿(下降沿)即进行采样。当CPOL=0,即空闲时为低电平,从低电平变为高电平,第一个时钟边沿(上升沿)即进行采样。

  • CPHA=1时,表示在时钟第二个时钟边沿采样数据。
  • 当CPOL=1,即空闲时为高电平,从高电平变为低电平再变为高电平,第二个时钟边沿(上升沿)即进行采样。
  • 当CPOL=0,即空闲时为低电平,从低电平变为高电平再变为低电平,第二个时钟边沿(下降沿)即进行采样,如图所示:

6.2 SCI模块

6.2.1 概述

SCI的含义是“Serial Communications Interface”,即串行通信接口,它的结构图如下:

上图的“PSR”含义为“Receive Shift Register”,即“接收移位寄存器”,它可以接收一位一位的数据,组合好后保存在上面的RDR寄存器里供程序读取。“RDR”含义为“Receive Data Register”,即接收数据寄存器。

“TSR”含义为“Transmit Shift Register”,即“发送移位寄存器”。程序把数据写到TDR寄存器后,里面的数据就经过TSR一位一位地发送出去。“TDR”含义为“Transmit Data Register,”即发送数据寄存器。

正因为SCI模块里有PSR、TSR移位寄存器,再结合其他控制单元(比如引脚、时钟、波特率产生器),就可以支持多种串行协议,比如UART、I2C、SPI、Smart Card等。

以UART、I2C、SPI为例,它们的硬件实现里都用到了“移位寄存器”,对比如下:

UARTI2CSPI
时钟信号
数据信号TXD、RXD两条SDA一条MOSI、MISO两条
片选信号
速率双方事先约定由时钟信号决定由时钟信号决定
通过移位寄存器发送
通过移位寄存器接收

6.2.2 使用方法

RA6M5芯片的SCI模块有10个SCI通道,每个通道能支持的协议(也被称为模式)如下表所示:

模式SCI0、SCI5~SCI9SCI3、SCI4SCI1、SCI2
Asynchronous 异步模式支持支持支持
Clock synchronous 时钟同步模式支持支持支持
Smart cardinterface支持支持支持
Simple I2C 简化版本的I2C支持支持支持
Simple SPI 简化版本的SPI支持支持支持
FIFO 模式支持支持不支持
Address match 地址匹配支持支持不支持
Manchester mode不支持支持不支持
Extended serial不支持不支持支持
GPT clock input不支持不支持支持

使用SCI模块时,步骤如下:

① 查看原理图,确定引脚

根据引脚编号在芯片手册里找到引脚名,如果引脚名里有“TXDn”、“RXDn”字样更好。比如对于下面的原理图,使用P100作为SPI的MISO引脚:

在芯片手册的《1.7 Pin Lists》中查找P100,得到它的引脚名“RXD0/SCK1/MISOB_A/QSPCLK/OM_SCLK”,如下所示:

② 根据引脚名确定使用哪个SCI通道

SCIn通道使用TXDn、RXDn引脚,所以可以根据TXDn或RXDn的编号确定SCI通道。

以P100引脚为例,它的引脚名里含有“RXD0”,就表示这个引脚可以连接到SCI模块的通道0;再根据表6.5可以知道SCI0支持“Simple SPI”,以后就可以使用RASC配置SCI0工作于“Simple SPI”模式,并选择P100这些引脚。

怎么使用RASC进行配置、怎么编写程序,在后续章节讲解。

6.2.3 与其他模块的关系

以I2C、SPI为例,可以使用SCI模块实现这些功能,也可以使用单独的I2C模块、SPI模块实现这些功能。SCI模块和I2C、SPI模块是并列的关系,如下图所示:

当引脚连接到SCI模块时,SCI可以工作于“Simple I2C”、“Simple SPI”模式。如果想使用更完善的I2C、SPI功能,需要配置这些引脚连接到专门的I2C模块、SPI模块。

以P100为例,它的引脚名为“RXD0/SCK1/MISOB_A/QSPCLK/OM_SCLK”,解析如下:

  1. RXD0:可以连接到SCI0通道,用作RXD0信号,SCI0可被配置为UART、I2C、SPI等模式
  2. SCK1:可以连接到SCI1通道,用作SCK1信号,SCI1被配置为SPI模式时用到SCK1
  3. MISOB_A:可以连接到SPIB通道,用作MISO引脚
  4. QSPCLK:可以连接到QSPI模块(有4条数据线的、类似SPI的协议)
  5. OM_SCLK:可以连接到OSPI模块(有8条数据线的、类似SPI的协议)

需要注意的是,引脚被连接到I2C模块,或者被连接到SCI模块并工作于“Simple I2C”模式时,这些引脚的功能是相反的。比如I2C1模块使用P511作为SDA引脚,使用P512作为SCL引脚;但是SCI4通道工作于“Simple I2C”模式时刚好反过来,它使用P511作为SCL引脚,使用P512作为SDA引脚。


本章完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/995603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP协议报文,核心特性可靠的原因,超时重传详细介绍

目录 一、TCP协议 二、TCP核心特性的保障 三、保留的六位标志位对于应答报文的作用 四、如何处理丢包——超时重传的原理 五、超时重传的时间 一、TCP协议 每一行是四个字节,前面的20个字节是固定的(TCP最短长度,20字节,选项…

进制和编码

目标:了解计算机中一些必备的尝试知识,了解常见名词背后的意义 1.python的运行方式 交互式运行脚本式运行 2.进制 2.1 进制的转换 计算机中底层的所有数据都是0101010101的形式存在的 八进制无法直接转为2进制 十进制转其他进制 bin(25) # 10进制转…

[XSCTF]easyxor

查看,main函数,首先是将输入的数据与key中的字符依次异或 在这个循环里,将异或得到的结果每次减去1,同时在数组里写上1,往后遍历数组 直到异或得到的结果减为0,在数组中写一个0进行标记 最后比较数组是否与…

百度飞桨(厦门)人工智能产业赋能中心签约,共创人工智能产业协同服务新生态...

9月8日,第二十三届中国国际投资贸易洽谈会在厦门正式开幕。 当日,厦门市思明区政府和火炬管委会,与百度正式签约,联手共建百度飞桨(厦门)人工智能产业赋能中心。思明区委书记林重阳,厦门市工信局…

【 NTR-domain ;NTR-C345C】

tissue inhibitors of metalloproteases (TIMP) TIMP NTR-C345C HPX-binding-domain [ MMP CAT(FN2)PEX (hemopexin) ] [ MMP-9-inhibitor a-2M (NTR-C345C) ] netrin Laminin-GLaminin-EGFNTR-domain

软件测试报告有什么用?

报告类型 不同的报告类型有不同的报告用途,以下分类别进行分析 1、登记测试报告 可以用于软件产品的增值税即征即退、软件企业的双软评估以及计算机系统集成资质的材料 2、鉴定\确认测试报告 可以用用于政府项目申报、高新认证、项目结题、创新产品认定、各类政…

c++11 override 和 final 关键字

1. final:修饰虚函数,表示该虚函数不能再被重写 如果一个类不想被继承:下面分别提供了c98 和 c11的不同写法 c 98 的写法: c 11 的写法:final最终类 2. override: 检查派生类虚函数是否重写了基类某个虚函数&#xff…

机器学习——K最近邻算法(KNN)

机器学习——K最近邻算法(KNN) 文章目录 前言一、原理二、距离度量方法2.1. 欧氏距离2.2. 曼哈顿距离2.3. 闵可夫斯基距离2.4. 余弦相似度2.5. 切比雪夫距离2.6. 马哈拉诺比斯距离2.7. 汉明距离 三、在MD编辑器中输入数学公式(额外&#xff0…

C++数据结构X篇_11_C++栈的应用-后缀表达式求解

上篇C栈的应用-中缀转后缀中我们介绍了我们所熟知的中缀表达式转为后缀表达式,那么如何通过后缀表达式获得原表达式的值呢?本篇将会参考博文栈的应用-后缀表达式求解介绍计算机是如何基于后缀表达式计算的? 文章目录 1. 后缀表达式求解计算规…

【MySQL】一文带你理解索引事务及其原理

MySQL- 索引事务 文章目录 MySQL- 索引事务索引操作索引原理 事务操作并发执行 索引 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 通俗来…

C++项目实战——基于多设计模式下的同步异步日志系统-④-日志系统框架设计

文章目录 专栏导读模块划分日志等级模块日志消息模块日志消息格式化模块日志消息落地模块日志器模块日志器管理模块异步线程模块 模块关系图 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导…

新知同享 | Web 开发性能提升,优化体验

更加强大且开放的 Web 可以简化开发工作并支持 AI 一起来看 2023 Google 开发者大会上 Web 开发值得重点关注的升级与成果 了解 Web 如何实现加速开发,更加便捷 精彩大会现场一览 Web 开发不断发展,每年都带来性能提升和功能迭代,开启丰富多…

【多线程】volatile 关键字

volatile 关键字 1. 保证内存可见性2. 禁止指令重排序3. 不保证原子性 1. 保证内存可见性 内存可见性问题: 一个线程针对一个变量进行读取操作,另一个线程针对这个变量进行修改操作, 此时读到的值,不一定是修改后的值,即这个读线…

用python实现基本数据结构【01/4】

说明 如果需要用到这些知识却没有掌握,则会让人感到沮丧,也可能导致面试被拒。无论是花几天时间“突击”,还是利用零碎的时间持续学习,在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢?列表、字典、集…

Linux 下spi设备驱动

参考: Linux kernel 有关 spi 设备树参数解析 Linux kernel 有关 spi 设备树参数解析 - 走看看 Linux SPI驱动框架(1)——核心层 Linux SPI驱动框架(1)——核心层_linux spi驱动模型_绍兴小贵宁的博客-CSDN博客 Linux SPI驱动框架(2)——控制器驱动层 Linux SPI驱…

如何进行SEO优化数据分析?(掌握正确的数据分析方法,让您的网站更上一层楼!)

在互联网时代,SEO优化已经成为了每一个网站运营者必备的技能。而在SEO优化中,数据分析更是至关重要的一环。在本文中,我们将会详细介绍如何正确的进行SEO优化数据分析,让您的网站更上一层楼! 数据分析的重要性 数据分…

ROS2-IRON Ubuntu-22.0 源码下载失败解决方法 vcs import --input

ROS2 一.ROS2 IRON环境搭建1.设置系统字符集为UTF-82.将RO2 apt 库添加到系统中3.添加ROS2 GPG key4.添加ROS 2 的软件源安装开发工具 二.下载ROS2sh源代码编译 一.ROS2 IRON环境搭建 虚拟机系统:Ubuntu22.04 虚拟机:VMware-player-full-16.2.5-2090451…

YOLOv5算法改进(15)— 更换Neck之AFPN

前言:Hello大家好,我是小哥谈。在YOLOv5中添加AFPN(Adaptive Feature Pyramid Network)可以提高目标检测的准确性。AFPN是一种用于目标检测任务的功能增强模块,它能够自适应地融合来自不同层级的特征图,以提…

scss文件自动导入

正常使用scss文件,需要先导入再使用内部变量,自动导入可以免除手动导入的步骤,直接使用内部的变量。 步骤:装包 -> scss文件 -> 配置 1. 装包 npm i sass -D // -D 仅在开发环境中依赖 2. 新增一个 scss文件&#xff…

设计模式之单列模式

单列模式是一种经典的设计模式,在校招中最乐意考的设计模式之一~ 设计模式就是软件开发中的棋谱,大佬们针对一些常见的场景,总结出来的代码的编写套路,按照套路来写,不说你写的多好,至少不会太差~ 在校招中…