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

这篇具有很好参考价值的文章主要介绍了嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录



前言

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


UART串口通信

介绍

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

详细参考:
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信,嵌入式Linux裸机开发,linux,单片机,嵌入式操作系统

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通信,嵌入式Linux裸机开发,linux,单片机,嵌入式操作系统
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通信,嵌入式Linux裸机开发,linux,单片机,嵌入式操作系统
这里设计 IN应该是开关控制,接在3.3上直接上电打开,掉电关闭。

正点原子封装的函数:

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

IIC

介绍

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

之后尝试做项目的时候参考吧:
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信,嵌入式Linux裸机开发,linux,单片机,嵌入式操作系统

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通信,嵌入式Linux裸机开发,linux,单片机,嵌入式操作系统
更详细的介绍看: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通信,嵌入式Linux裸机开发,linux,单片机,嵌入式操作系统
开发的时候还是参考他控制icm20608 这个6 轴 MEMS 传感器, 3 轴加速度和 3 轴陀螺仪,支持 I2C 和 SPI 两种协议,使用 I2C 接口的话通信速度最高可以达到400KHz,使用 SPI 接口的话通信速度最高可达到 8MHz
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信,嵌入式Linux裸机开发,linux,单片机,嵌入式操作系统

结语

暂时先到这里,学的很粗糙,但是有了一个大概的概念,后续再深入学习,直接先学系统移植文章来源地址https://www.toymoban.com/news/detail-725235.html

到了这里,关于嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式Linux应用开发笔记:串口

    串口(UART)是嵌入式设备中比较常用的功能。这篇文章将记录下应用程序中串口操作相关内容。 这篇文章中内容均在下面的开发板上进行测试: 《新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)》 这篇文章是在下面文章基础上进行的: 《新唐NUC980使用记录(5.10.y内核)

    2024年02月09日
    浏览(39)
  • ARM裸机开发——简易嵌入式游戏开发

    利用LCD屏,实现简易的图片展示,展示个人信息 利用图片显示与按键功能实现简易的游戏设计,需要包含动画连贯展示   本实验主要为具体游戏设计,主要包含游戏架构设计、底层硬件设计、具体代码实现四部分,设计了本项目方案的架构图如图2.1所示。 图2.1 游戏设计整

    2024年02月06日
    浏览(47)
  • 【无标题】嵌入式开发-IIC通信介绍

    IIC(Inter-Integrated Circuit)是一种两线式串行总线协议,用于连接微控制器及其他外围设备。在IIC总线上的数据传输速率可以是标准模式(100Kbit/s),快速模式(400Kbit/s)和高速模式(3.4Mbit/s)。 IIC的起始和停止条件由SCL(Serial Clock Line,串行时钟线)和SDA(Serial Data Line,串行

    2024年02月10日
    浏览(38)
  • ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置

    目录 前沿 Ubuntu 和 Windows 文件互传 Ubuntu 下 NFS 和 SSH 服务开启  Ubuntu 交叉编译工具链安装 Source Insight 软件安装和使用 Visual Studio Code 软件的安装和使用 为什么我们要学习裸机开发呢?         1、裸机开发是了解所使用的 CPU 最直接、最简单的方法,比如使用的 I.MX6U,跟

    2023年04月15日
    浏览(33)
  • 【嵌入式Linux内核驱动】05_IIC子系统 | 硬件原理与常见面试问题 | 应用编程 | 内核驱动 | 总体框架

    1.1 IIC 基础 IIC协议简介—学习笔记_iic标准协议_越吃越胖的黄的博客-CSDN博客 I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接微控制器、传感器、存储器和其他外设。 I2C使用两条线(SDA和SCL)进行通信,可以连接多个设备,每个设备都有一个唯一的地址。I2C总线上的

    2024年02月09日
    浏览(42)
  • 【嵌入式开发学习】__扒一扒单片机串口IAP原理

    目录 一、什么是IAP? 二、串口IAP实验 1. 实验说明 2. 工程说明 IAP工程: LED工程: 3. IAP源码说明  (1)主函数: (2)主菜单函数Main_Menu (3)下载程序功能函数SerialDownload  4、下载验证 (1)下载IAP程序  (2)通过IAP程序引导下载LED程序 (* ̄︶ ̄)创作不易!期待你们的 点

    2024年02月20日
    浏览(42)
  • 全志F1C200S嵌入式驱动开发(串口驱动)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         对于uboot、kernel和rootfs来说,他们的串口输出一般都是uart0。一般这么做,是没有问题的。只不过我们自己买的这块f1c200s电路板,设计者把uart转ttl的接口,改接到了uart1上面。不过这样

    2024年02月16日
    浏览(71)
  • 嵌入式学习笔记——IIC通信

    本文接着之前的M4系列介绍,对另外一个十分常见的通信总线进行一个介绍,就是IIC总线。 首先,还是找个免费劳动力来做一个官方的介绍,下面这一段话非常全面的介绍了IIC的各个特征,用之前提到的通信特征来总结,IIC是一种串行,同步,半双工,板级有线通信。与SPI对

    2024年02月06日
    浏览(54)
  • 嵌入式 - UART介绍

    概述 嵌入式系统经常需要集成电路之间的通信。举个例子,一个数字温度传感器向主控芯片报告房间的环境温度。通常情况,这种数据会通过一个串行接口来传输。 那么,什么是串行接口? 在最基本的角度来说,串行接口是一个移位寄存器,每次将数据移入/移出一个比特。

    2024年02月08日
    浏览(46)
  • 嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据

    之前讲过用 利用IDLE空闲中断来接收不定长数据 ,但是没有用到DMA,其实用DMA会更加的高效,MCU也可以腾出更多的性能去处理应该做的事情。 IDLE顾名思义,就是空闲的意思,即当监测到串口空闲超过1个串口的数据帧时,会使状态寄存器(SR或ISR)的IDLE位置位,如果此时控制

    2024年04月17日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包