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

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • UART串口通信
    • 介绍
    • UART配置
  • IIC
    • 介绍
    • I.MX6U 的 I2C
  • SPI
    • 介绍
    • I.MX6U ECSPI
  • 结语


前言

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


UART串口通信

介绍

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

详细参考:
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第1张图片

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
  • 编写数据收发函数

波特率:
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第2张图片
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电压,可能会影响芯片启动:
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第3张图片
这里设计 IN应该是开关控制,接在3.3上直接上电打开,掉电关闭。

正点原子封装的函数:

嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第4张图片
这里Makefile发生了一些变化,加了一些数学库链接和内联函数冲突解决方法

IIC

介绍

起始:在 SCL 为高电平的时候, SDA 出现下降沿
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第5张图片
停止:SCL 位高电平的时候, SDA出现上升沿
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第6张图片
数据传输: SCL 高电平期间, SDA 上的数据稳定,SCL 低电平时数据可变
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第7张图片
发送完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
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第8张图片
我们要设置 I2C的波特率为 100KHz,那么 IC就可以设置为 0X15,也就是 640 分频。 66000000/640=103.125KHz≈100KHz

之后尝试做项目的时候参考吧:
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第9张图片

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

嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第10张图片
更详细的介绍看: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:状态寄存器

参考手册:
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第11张图片
开发的时候还是参考他控制icm20608 这个6 轴 MEMS 传感器, 3 轴加速度和 3 轴陀螺仪,支持 I2C 和 SPI 两种协议,使用 I2C 接口的话通信速度最高可以达到400KHz,使用 SPI 接口的话通信速度最高可达到 8MHz
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信_第12张图片

结语

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

你可能感兴趣的:(嵌入式Linux,linux,单片机,嵌入式操作系统)