嵌入式软硬总结

前言

我创作这篇博客的目的是记录学习技术过程中的笔记。希望通过分享自己的学习经历,能够帮助到那些对相关领域感兴趣或者正在学习的人们。

嵌入式软硬总结

1.嵌入式软件架构

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.阿里云物联网平台

物联网平台接入与用哪家硬件没多大关系
可开发物联网应用——物联网后台运维界面等
在这里插入图片描述

物联网平台可向设备下发命令
https://docs.qq.com/doc/DTnpnWEp1Y0Z2a0NS

自建app用与阿里云对接的api接口,可以拉取数据,设备信息,控制设备等等
在这里插入图片描述

3.无线组网方式的对比
在这里插入图片描述

4.主要元器件类型
在这里插入图片描述

5.中国物联网产业链图谱
在这里插入图片描述

6.嵌入式架构

嵌入式系统的硬件部分:嵌入式处理器、存储器和外部设备
嵌入式系统的软件部分:系统软件、支撑软件和应用软件
硬件架构
在这里插入图片描述

软件架构
在这里插入图片描述

把API分为驱动层和应用层API,而不是所有程序都调用驱动层API。(整个应用中都调用驱动层API会导致应用中驱动调用随处可见,无法移植和最大限度的复用)
先把一个应用进行功能模块划分,并对整体结构进行分层,然后设计出功能独立的各个模块(如算法模块,文件库模块,通信库模块),在模块之上开放公共接口。
驱动层提供出公共接口供上层调用。各个功能模块可以独立编译(如算法模块纯ANSI C,可在任意平台复用),或者调用驱动层接口(文件库模块调用了驱动读写Flash),总而言之,言而总之,封装出各个功能独立的可复用的功能模块。
在这里插入图片描述

应用层,为程序的总体的运行框架,组织调用业务逻辑。可以用某种嵌入式操作系统实现几种任务 。如定时任务,卡处理任务,菜单任务,通信任务。
业务逻辑层,如CPU卡处理,交通部卡处理,银联卡处理,M1卡处理,通信记录上传,黑名单下载,票价参数下载等。
应用接口层,提供公共的api接口供应用接口供上层调用。这些接口也可由下层的功能模块开放出来,应用接口层负责汇总。
功能模块层,可以封装不同的功能模块。如算法库,文件库,通信库,银联库,向上提供应用接口层的接口,向下调用驱动接口。
硬件驱动层,由各个驱动模块组成,向上提供统一的接口。
在这里插入图片描述

嵌入式项目分个层
(1)硬件抽象层(HAL)
实现对片内资源 (如定时器、ADC、中断、I/O等) 的通用配置,隐藏具体的SFR操作细节,为上层提供简单清晰的调用接口。
嵌入式开发的核心就是芯片,它提供固定的片内资源(常用的有I/O,ISR,TIMER等,稍微好点的还有ADC,SPI等硬件资源,不需要外围ADC采集芯片或模拟SPI)供开发者使用。而且它具有一个很重要的特点就是,不随项目的新增需求变动而变动。所以应将其作为最底层,为上层提供基础支持。
(2)硬件驱动层(HDL)
嵌入式开发基本都会使用片外资源,如AT24C02,W25Q128等常见的外围EEPROM芯片,需要SPI通信(硬件SPI或I/O模拟的SPI)发送相应指令驱动该芯片,实现该芯片能正常工作。因此驱动这部分的API函数实现程序即为硬件驱动层。即使换了MCU,也只需将调用过硬件抽象层的API函数替换即可。
(3)功能模块层(FML)
通过调用 HAL,实现项目中所涉及到的各片外功能模块,隐藏具体的模块操作细节,并为上层提供简单清晰的调用接口。
硬件抽象层和驱动层主要就是为功能模块层提供的,实现该项目需要的功能,比如KEY、LED和EEPROM等功能,其中LEY、LED基本调用硬件抽象层的API函数(更复杂的可能通过片外芯片获取/控制等,因此可能也需要使用硬件驱动层),EEPROM调用硬件驱动层的API函数,即使EEPROM芯片更换(AT24C02或W25Q128等),也不影响EEPROM之前编写含的功能代码程序(前提是AT24C02,W25Q128提供的API函数提供的是统一标准)。
(4)应用程序层(APL)
通过调用 HAL 与 FML,实现最终的应用功能。
负责的就是功能模块的使用和之间的逻辑关系处理等等,比如用户交互界面应用程序可能需要KEY、LED、LCD等。
在这里插入图片描述

7.通讯协议

串行通信和异步通信:
串行通信:使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。例如UART、USART、USB、IIC、SPI、CAN等。
只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。串行通信按照发送时钟源和接收时钟源是否需要保持一致,又可分为
同步通信
异步通信两种。
异步通信:数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。(每个字符之间没有规律的时间间隔;数据的发送和接收是不同步进行的(发送方不需要等待接收方的确认信号);通过特定的起始位、数据位、校验位和停止位等标志位来识别每个字符的边界。)(由于没有确认信号,数据的传输准确性和完整性可能会受到一定的影响。)在这里插入图片描述在这里插入图片描述

同步通信:数据传送是以数据块(一组字符)为单位,字符与字符之间、字符内部的位与位之间都同步。(数据传输的每个阶段都需要接收方发送确认信号告知发送方数据已经被正确接收;发送方需要等待接收方的确认信号才能继续传输下一个数据;)(由于需要接收方发送确认信号,因此数据的传输准确性和完整性可以得到较好的保障)
在这里插入图片描述在这里插入图片描述在这里插入图片描述

异步通信通常应用于数据传输速率不固定、需求灵活性高的场合,如计算机与外部设备之间的数据传输;而同步通信通常应用于对数据传输准确性和完整性要求较高的场合,如音频、视频等实时传输场景。
串口通信是一种通信方式,是相对于以太网方式、红外方式、蓝牙方式、usb方式(usb广义也算串行通信)等而言,是一种比较低级的通信手段。
并行通信:数据的每一位同时在多根数据线上发送或者接收。可以以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信。
UART:常用于主机和辅助设备之间的通信
双向通信 可实现
全双工
传输和接收 包含TTL电平的串口和RS-232电平的串口 通信两端预先约定bit的传输速率(每秒传多少bit),而不是由时钟触发的
UART是实现串口收发的逻辑电路(硬件形式),这部分可以独立成芯片,也可以作为模块嵌入到其他芯片里,单片机、SOC、PC里都会有UART模块
一般电脑是没有uart接口的(ttl电平),我们可以通过电脑的usb接口和单片机通信,只需一个usb转串口模块插到usb接口上,装上驱动,另一边接单片机即可。有很多可以usb协议转为串口协议的芯片,如ch340,cp2102,pl2303等
在这里插入图片描述

TTL电平:
晶体管-晶体管逻辑
在这里插入图片描述

RS-232电平:
在这里插入图片描述

RS-485电平:
在这里插入图片描述

RS-232:
全双工 它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(最底层)的概念,与通信协议没有直接关系。
D型9针接口(协议只有两种:RS-232和RS-485。)

RS-485:
半双工 它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(最底层)的概念,与通信协议没有直接关系。
可以说硬件接口UART可以使用RS232或者RS485标准进行通讯(老式电脑的串口是COM口,使用的RS-232电平;使用的RS-232电平,使用的TTL电平)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

总的来说,对于一项通信任务,通信协议可以使用UART协议,而UART协议可以通过COM端口来实现硬件连线,此协议下的传输方式可以选用RS232或者RS485等。
USB:
通用串行总线 规范电脑与外部设备的连接和通讯
USB设备可以直接和HOST通信,或者通过Hub和Host通信。一个USB系统中仅有一个USB 主机,设备包括USB设备和USB HUB,最多支持127个设备。
由于USB的通信时序和逻辑电平标准都和串口完全不同,因此和串口无关 USB转串口”的模块。
I2C:同一块电路上的不同芯片之间进行通信
串行、同步、半双工通信的多主机通信总线 有两根数据线:SDA(数据线)、SCL(时钟线)
可以
单主机多从机
单主机单从机,I2C总线上的任意设备都可以当主机,一般主机是MCU,当有多个主机时,会通过总线仲裁的方式选出一个主机,其他退出作从机。(对于不同地址的模块直接分别对其地址进行通信即可)
在这里插入图片描述在这里插入图片描述在这里插入图片描述

SPI:同一块电路上的不同芯片之间进行通信
高速、全双工、同步的串行通信总线 最少有四根线:MISO(主设备输入、从设备输出),MOSI(主设备输出、从设备输入),SCLK(时钟线),CS(片选线)
采用主从方式工作,一般有一个主设备和一个或多个从设备
同一时刻可以
单主机多从机
单主机单从机(靠片选线多从机还是单从机)
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

8.驱动

编写驱动程序要非常了解硬件,同时给应用层提供API函数接口,应用层可以调用这些接口去访问硬件而不必了解硬件
驱动程序文件组成:以led点灯为例,包括三个文件led.h(包括宏定义,变量声明,函数声明),led.c(模块的具体代码实现),main.c(工程的主函数,调用模块函数并适当组合就可以完成工程的项目要求功能)三个文件。
在这里插入图片描述

应用程序是根据实际应用需求去编写的程序,指的是代码的逻辑部分,直接去调用底层驱动预留的接口,而不需要关心硬件底层的实现方式及实现过程。

9.通信协议代码撰写

串口通信(要用定时器,配置串口寄存器即可):
在这里插入图片描述

低位先发高位后发(也就是说先发低位比如01234567位 先发0,如果是二进制数据11100100先发0)
波特率:告诉单片机多久发送一个数据包,表示每秒钟传送的码元符号的个数
数据传输速率使用波特率来表示。单位bps(bits per second),常见的波特率9600bps、115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。
51单片机:
在这里插入图片描述

32单片机:
在这里插入图片描述

I2C通信(不用定时器,直接用IO口控制电平变化):
两根总线接上拉电阻,且都为高电平时,说明两根总线为空闲状态。
在这里插入图片描述

I2C总线进行数据传送时,SCL为高电平期间,SDA上的数据必须保持稳定,只有在SCL上的信号为低电平期间,SDA上的高电平或低电平状态才允许变化。
在每个数据字节或地址字节传输完成后,还有一个来自接收方的ACK/NACK位。
在这里插入图片描述在这里插入图片描述

高位先发低位后发
对从设备写入数据:在这里插入图片描述

对从设备读取数据:
在这里插入图片描述

SPI通信(不用定时器,直接用IO口控制电平变化):
高位先发低位后发
利用时钟脉冲得上升沿和下降沿来实现数据传输。
如果主机在时钟信号的上升沿接收数据,那么主机在时钟信号的下降沿就会发送数据。
在这里插入图片描述

SPI的传输模式一般由从机决定。
在这里插入图片描述

产生时钟的一侧称为主机,另一侧称为从机
在这里插入图片描述

写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

10.物联网网络?

在这里插入图片描述在这里插入图片描述

11.单片机通信中SPI、I2C和UART三种总线

在这里插入图片描述在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐