嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信

系列文章目录



前言

大概学完这三种通信后,之后就先去学系统移植,其他的先暂时放下


UART串口通信

介绍

串口全称叫做串行接口,通常也叫做 COM 接口。
UART:(Universal Asynchronous Receiver/Trasmitter)通用异步串行收发器。
USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行收发器,相比 UART多了一根时钟线,一般 USART 是可以作为 UART使用的(不使用同步功能)。

详细参考:
在这里插入图片描述

UART配置

  • 设置时钟源:寄存器 CCM_CSCDR1 的 UART_CLK_SEL,0:pll3_80m(80MHz,常用),1:osc_clk(24M)
  • 设置分频器:寄存器 CCM_CSCDR1 的 UART_CLK_PODF,可设置 0~63,分别对应 1 ~ 64 分频,一般1分频。
  • 初始化,设置 UART1 的寄存器 UART1_UCR1~UART1_UCR3,包括波特率,奇偶校验、停止位、数据位等等。
  • 使能,寄存器 UART1_UCR1 的 UARTEN为 1
  • 编写数据收发函数

波特率:
在这里插入图片描述
Ref Freq:经过分频以后进入 UART 的最终时钟频率。(UARTx_UFCR的RFDIV,010:1分频)
UBMR:寄存器 UARTx_UBMR 中的值。
UBIR:寄存器 UARTx_UBIR 中的值。

设置 UBIR=71, UBMR=3124,就是115200

寄存器 UARTx_URXD 和 UARTx_UTXD为UART 的接收和发送数据寄存器

这里有个电路用的不错,我们通常在板子电源去除的时候,如果这个时候还插着USB转TTL,会引入微弱的3.3v电压,可能会影响芯片启动:
在这里插入图片描述
这里设计 IN应该是开关控制,接在3.3上直接上电打开,掉电关闭。

正点原子封装的函数:

在这里插入图片描述
这里Makefile发生了一些变化,加了一些数学库链接和内联函数冲突解决方法

IIC

介绍

起始:在 SCL 为高电平的时候, SDA 出现下降沿
在这里插入图片描述
停止:SCL 位高电平的时候, SDA出现上升沿
在这里插入图片描述
数据传输: SCL 高电平期间, SDA 上的数据稳定,SCL 低电平时数据可变
在这里插入图片描述
发送完8位数据后,需要从机给主机一个应答信号,从机通过将 SDA 拉低来表示发出应答信号,表示通信成功。

IIC各种读写时序就不赘述了。

I.MX6U 的 I2C

标准模式:数据传输速率最高是 100Kbits/s
快速模式:数据传输速率最高为 400Kbits/s。

I2Cx_IADR(x=1~4)寄存器:地址寄存器
I2Cx_IADR 只有 ADR(bit7:1)位:I2C 从设备地址数据
寄存器 I2Cx_IFDR 也只有 IC(bit5:0):设置 I2C 的波特率,I2C 的时钟源可以选
择 IPG_CLK_ROOT=66MHz
在这里插入图片描述
我们要设置 I2C的波特率为 100KHz,那么 IC就可以设置为 0X15,也就是 640 分频。 66000000/640=103.125KHz≈100KHz

之后尝试做项目的时候参考吧:
在这里插入图片描述

SPI

介绍

SPI 全称是 Serial Perripheral Interface,串行外围设备接口。
I2C 最多 400KHz,但是 SPI 可以到达几十 MHz。

①、 CS/SS, Slave Select/Chip Select,这个是片选信号线
②、 SCK, Serial Clock,串行时钟
③、 MOSI/SDO, Master Out Slave In/Serial Data Output
④、 MISO/SDI, Master In Slave Out/Serial Data Input

在这里插入图片描述
更详细的介绍看:FPGA学习笔记(九)SPI学习总结及stm32的HAL库下SPI配置

I.MX6U ECSPI

I.MX6U 的 SPI 外设叫做 ECSPI,全称是 Enhanced Configurable Serial Peripheral Interface,和标准的没啥区别

ECSPIx_CONREG寄存器:控制寄存器
ECSPIx_CONFIGREG:配置寄存器
ECSPIx_PERIODREG:采样周期寄存器
寄存器 CSCDR2 的位 ECSPI_CLK_SEL :选择时钟源
寄存器 CSCDR2 的位 ECSPI_CLK_PODF:分频
ECSPIx_STATREG:状态寄存器

参考手册:
在这里插入图片描述
开发的时候还是参考他控制icm20608 这个6 轴 MEMS 传感器, 3 轴加速度和 3 轴陀螺仪,支持 I2C 和 SPI 两种协议,使用 I2C 接口的话通信速度最高可以达到400KHz,使用 SPI 接口的话通信速度最高可达到 8MHz
在这里插入图片描述

结语

暂时先到这里,学的很粗糙,但是有了一个大概的概念,后续再深入学习,直接先学系统移植

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UARTIICSPI,CAN都是常见的串行通信协议,它们有以下区别: 1. 通信方式:UART(Universal Asynchronous Receiver/Transmitter)是异步串口通信,只有一对数据线(TX和RX)。IIC(Inter-Integrated Circuit)是双线制的串行总线,包括SCL(时钟线)和SDA(数据线)。SPI(Serial Peripheral Interface)是四线制的串行总线,包括SCK(时钟线)、MISO(Master In Slave Out)、MOSI(Master Out Slave In)和CS(片选线)。CAN(Controller Area Network)是CAN总线通信,一般是在电气层面上实现的。 2. 数据传输速率:UART通信速率较低,一般在1Mbps以下,而IICSPI和CAN的通信速率较高,可以达到几Mbps甚至更高。 3. 通信距离:UART通信距离较短,一般在数米以内,而IICSPI通信距离也比较短,一般在几十厘米以内。CAN可以实现较远的通信距离,达到数百米甚至几千米。 4. 设备连接数量:UART通信是一对一的通信方式,即一个发送器连接一个接收器。IICSPI可以实现多个设备的连接,通过地址或片选信号进行选择通信对象。CAN总线可以连接多台设备,形成一个网络结构。 5. 硬件复杂度:UART通信硬件简单,适用于简单的串行通信IICSPI通信需要更复杂的硬件支持,例如时钟同步和数据线的动态切换等。CAN通信硬件较为复杂,需要专用的CAN控制器和收发器。 总的来说,UART适用于短距离低速率的通信IIC适用于简单的多设备通信SPI适用于高速数据传输,CAN适用于远距离和高可靠性的通信。不同的应用场景下,可以选择合适的串行通信协议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值