首页 > 百科知识 正文

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)

时间:2023-11-20 05:23:51 阅读:495 作者:不二小仙女

物联网、AI、5G的发展都离不开嵌入式系统,它就好比一个乐高拼图,通过不同规则拼搭,就会得到意想不到的性能。那么,究竟什么是嵌入式?初中高阶的工程师是如何诠释嵌入式技术的?如何一步步成为高阶嵌入式工程师?……这里,星球号作者将为你作出解答,请大家在本专题中自寻答案!

FPGA的IO接口标准归纳(一)

一、 Low-Voltage TTL (LVTTL)

LVTTL是用于3.3 V,2.5V或者更低电压的应用通用标准(EIA/JESD8-B)。它基于LVTTL输入buffer和推挽输出buffer。一般来说,FPGA_IO在配置为LVTTL时,可以配置不同的输出能力,一般范围为8-20mA。

二、 Low-Voltage CMOS (LVCMOS)

LVCMOS是一种基于CMOS晶体管实现的通用标准。电平标准分别有 LVCMOS12/15/18/25/33。值得注意的是,LVTTL不能驱动LVCMOS输入。

三、 Stub Series Terminated Logic (SSTL)

STUB SERIES TERMINATED LOGIC,短截线串联端接逻辑。该标准专门针对高速内存(特别是SDRAM)接口。有多个电平标准:

• SSTL25I—SSTL Class I-standard with VDDI (nominal) = 2.5 V

• SSTL25II—SSTL Class II-standard with VDDI (nominal) = 2.5 V

• SSTL18I—SSTL Class I-standard with VDDI (nominal) = 1.8 V

• SSTL18II—SSTL Class II-standard with VDDI (nominal) = 1.8 V

• SSTL15I—SSTL Class I-standard with VDDI (nominal) = 1.5 V

• SSTL15II—SSTL Class II-standard with VDDI (nominal) = 1.5 V

• SSTL135I—SSTL Class I-standard with VDDI (nominal) = 1.35 V

• SSTL135II—SSTL Class II-standard with VDDI (nominal) = 1.35 V

SSTL25是由JEDEC(JESD8-9B )标准定义的,应用于DDR SDRAM和DDR1存储接口。

SSTL18是由JEDEC(JESD8 )标准定义的,应用于DDR2 SDRAM存储接口。

SSTL15应用于DDR3存储接口,SSTL1353应用于DDR3L存储接口。

四、 High-Speed Transceiver Logic (HSTL)

HSTL是一种技术独立的数字集成电路接口标准,为了实现电压扩展和技术独立I/O结构而开发的。信号电平范围在0-1.5V之间,可以是单端或者差分。这个标准用于高达1.267 GHz的数据交换能力的内存总线接口……

C# 移动端与PC端的数据交互

针对目前功能越来越强大的智能手机来说,在PC端支持对手机中的用户数据作同步、备份以及恢复等保护措施的应用已经急需完善。不仅要对数据作保护,而且用户更希望自己的手机跟PC能够一体化,以及和远程服务器的一体化。用户希望在手机端的操作能够转移到PC端,对于PC端大屏幕的电脑来说,完成同样的操作可以大量的节省用户的时间。对于功能强大的手机来说,有近1/2的应用可以在PC端同步。所以对PC端应用的规划要以系统的角度来对待。同时要保证手机端和PC端的主流交互模式应保持一致。

个人观点:数据的一体化和管理的多元化是以后发展的一个趋势。下面进行今天的学习,今天的实验室移动端和PC端的数据交互及解析。

1,如何实现移动端和PC端的数据交互?

答:1,蓝牙 2,NFC技术 3,红外 4,Socket.

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第1张

NFC和蓝牙的异同点:

相同点:都是近距离传输。

不同点: NFC优于红外和蓝牙传输方式。作为一种面向消费者的交易机制,NFC比红外更快、更可靠而且简单得多,不用向红外那样必须严格的对齐才能传输数据。与蓝牙相比,NFC面向近距离交易,适用于交换财务信息或敏感的个人信息等重要数据;蓝牙能够弥补NFC通信距离不足的缺点,适用于较长距离数据通信。因此,NFC和蓝牙互为补充,共同存在。事实上,快捷轻型的NFC 协议可以用于引导两台设备之间的蓝牙配对过程,促进了蓝牙的使用。但是要实现远距离的数据传输那就只能用Socket了,

下面进行代码的分析:

首先在PC上建立服务端Server.cs……

手把手教Linux驱动1-模块化编程

一、什么是模块化编程?

Linux的开发者,遍布世界各地,他们相互之间觉大数估计都不认识。如果真的是对这些开发者进行统一管理,那是很难做到的。所以大牛们,在设计Linux内核的时候,融入了模块化的思想。也就是说,现在大家已经有一个现成的Linux操作系统了,所有的开发者写的代码对于这个Linux操作系统而言都是一个模块,开发者可以模块的形式将自己的代码添加到内核,也可以从操作系统中卸载自己的模块。这种思想,在实际的开发中特别别有用。

例如:在你的设备上已经运行了一个成熟的Limux操作系统,由于客户的需求变化,你需要向这个操作系统上添加一些功能。现在你有两种做法:

第一种:获得Linux源代码,然后修改,添加功能,貌似挺牛,但是如果你写的代码不能一次性到达效果,你就必须去修改,这样就每次必须重新编译内核,是不是很麻烦。最可怕的是你一不小心,把内核源码给修改错了,那该怎么办呀?

第二种:快速编写自己的功能代码,然后以模块的形式添加到Linux操作系统中,然后测试,发现不行,卸载模块,继续修改代码,添加模块(高富帅的干活方式),。。是不是比使用第一种方法的苦逼程序员要轻松很多呀!

大家需要注意的是,一般我们都是通过模块化的方法向Linux操作系统添加驱动程序,那些Linux核心的代码,我个人觉得没有几个人会觉得不好,需要重新修改。

Linux 内核模块主要由以下几个部分组成:

模块加载函数(必须):当通过insmod命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块相关初始化工作; 模块卸载函数(必须):当通过rmmod命令卸载模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能; 模块许可证声明(必须):模块许可证(LICENCE)声明描述内核模块的许可权限,如果不声明LICENCE,模块被加载时将收到内核被污染的警告。大多数模块参数(可选):模块参数是模块被加载的时候可以被传递给他的值,它本身对应模块内部的全局变量;模块导出符号(可选):内核模块可以导出符号(symbol,对应于函数或变量),这样其他模块可以使用本模块中的变量或函数; 模块作者等信息声明(可选)。

二、进行模块化编程

直接看代码,no code no bb!

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第2张

看完上面的代码,请相信,你已经对模块化编程有了一个基本的认识。上面这段代码虽然很简单,但是他包含了Linux内核模块化编程需要的所有信息……

实例分析STM32单片机六大滤波算法

今天分享一下stm32单片机滤波算法

在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。

在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。

为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。

一、采用数字滤波算法克服随机干扰的误差具有以下优点:

  1. 数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。
  2. 数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。
  3. 只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。
  4. 在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

二、限幅滤波算法

该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。

A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

算法的程序代码如下……

嵌入式小知识:烧录文件是被如何存储到MCU中的?

单片机软件都是以hex或者bin文件的形式烧录到我们的MCU中进行存储的,那你知道这些烧录的文件在MCU中是如何分布的吗?

举一个简单的例子,编译一个STM32例程的MDK软件工程,得到输出信息如下:

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第3张

接下来详细看下Program Size的组成部分解析(我们烧录文件的组成部分):

Code:程序代码段,主要用于储存程序代码。

Ro-data:只读类型数据段,主要用于存放程序中定义的常量。

RW-data:读写类型数据段,主要用于存放被初始化为非0值的全局变量。

ZI-data:读写类型数据段,主要用于存放被初始化为0值的全局变量。

看到这里你可能会有点好奇都是读写数据类型,为什么要分为RW和ZI两个部分呢?(思考一下,文章后面会给出答案)。

通常我们所说的MCU的存储部分主要是片内FLASH和片内RAM,这里我可以简单地把片内忽略掉,那么我们烧录文件中的四个段内容,哪些需要烧录到Flash?哪些又要烧录到RAM中呢?你知道对工程Map一下,在map文件的最后会给出答案。(map的含义就是内存映射,map一下就是查看所有的代码及数据的内存映射地址),如下:

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第4张

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第5张

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第6张

RO size:包含了Code 和RO data ,是需要存放在MCU的flash空间中。

RW size: 包含了RW 和 ZI data,是需要存放在MCU的RAM空间中。

那么是不是flash中的内容就是RO size ,RAM中的内容就是 RW size呢?

答对了一半,RAM中内容就是RW size……

FPGA CUYSB3014实现USB3.0功能

本篇文章主要介绍使用FPGA CYSUB3014架构实现USB3.0的功能,具体内容包括:

  • CYUSB3014简单介绍
  • CYUSB3014内部逻辑框图
  • CYUSB3014硬件配置
  • FPGA CYUSB3014硬件设计

1.CYUSB3014芯片介绍

CYUSB3014是赛普拉斯在近几年推出的新一代USB3.0的外设控制器,可以解决USB2.0带宽限制,或者单独开发USB协议和驱动的难题。赛普拉斯将CYUSB3014简称为EZ-USB FX3,具有高度的灵活特性,开发人员只需要下载FX3的固件库,就能使用USB3.0的功能。

目前在一些电子产品中,使用主控器加PHY芯片最流行的方式是用FPGA FX3这种搭配来实现USB3.0接口的

赛普拉斯官方数据手册中对FX3的描述如下:EZ-USB FX3 具有一个可进行完全配置的并行通用可编程接口GPIF II,它可与任何处理器、ASIC 或 FPGA 连接。这个通用可编程接口 GPIF II 是赛普拉斯旗舰 USB 2.0 产品 FX2LP 中的GPIF的增强版本。它可轻松无缝地连接至多种常用接口,比如异步 SRAM、异步和同步地址数据复用式接口、并行 ATA 等等。

EZ-USB FX3 集成了 USB 3.0 和 USB 2.0 物理层 (PHY) 以及 32位arm926EJ-S 微处理器,具有强大的数据处理能力,并可用于构建定制应用。本产品采用了一种巧妙的架构,使从 GPIF II 到USB 接口的数据传输速度可达 320 MBps[1]。通过集成的 USB 2.0 OTG 控制器,可以实现需要双角色使用场合的应用。例如EZ-USB FX3 可以作为 MSC 和 HID 级设备的 OTG主机使用。

2. CYUSB3014内部逻辑框图

FX3内部的逻辑框图如下所示:

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第7张

从逻辑框图可以看出,FX3的功能是在FPGA/MCU/CPU这些控制器和USB接口之间作为一个桥梁。CPU将需要发送的并行数据,通过GPIF II接口传给FX3,FX3内部将数据打包成带有USB3.0协议的数据包,通过USB标准接口对外传输。这样开发人员即不用掌握USB3.0协议的底层架构,还能使用UVC的协议将数据传输到带有USB3.0接口的主机(电脑)上。

在FX3的内部,具有一个ARM9的核,内部集成了存储代码和数据的512KB片上SRAM,通过JTAG口烧写程序,FX3就能作为ARM使用。常见的应用场景如下所示。

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第8张

3.CYUSB3014硬件配置

3.1电源

FX3电源有3个部分:内核电源;数字I/O口电源;I/0模拟电源

内核电源

VDD :逻辑内核的供电电压。额定供电电压为 1.2 V。该电域为内核逻辑电路供电。下列也必须使用同样的供电:

AVDD :用于 PLL、晶体振荡器和其他内核模拟电路的 1.2 V供电。

U3TXVDDQ/U3RXVDDQ :用于 USB 3.0 接口的 1.2 V 供电电压……

一个IO控制很多个LED,这个技能你get到了吗?

实现目标

  • 每隔一秒,点亮模块上的一个LED
  • 点亮模块上的所有LED

所需工具及环境

  • Keil 5
  • STM32F103RET6核心板(本平台自制专用核心板,随便找一个开发板亦可)
  • 8位 圆形 WS2812B LED模块

本文源码

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第9张

简介

电压:DC4~7V

多位(几个LED就是几位)通过引脚级联接一个到另一个的输出引脚,通过这种级联的方式,只需要使用一个IO口(单片机引脚)就能控制尽可能多的LED,每个LED都集成了一颗驱动芯片在里面,让我们的LED变得智能和寻址,每一个内部都有恒流驱动,所以LED颜色非常一致,即使电压有小幅抖动,电压变化也是一样的。

不需要外部电阻——限流电阻使LED灯的布局设计变得简单。

单线通信,能够最大限度的减少单片机IO口的压力,另外这款RGB灯使用了WS2812B驱动芯片,让外围电路只需要一颗电容就能够满足电路需求,从而最大可能的让电路变得简单优美。

特点

  • 智能反接保护,电源反接不会损坏IC;
  • IC控制电路与LED点光源公用一个电源;
  • 控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个外控像素点;
  • 内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加;
  • 内置上电复位和掉电复位电路;
  • 每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz;
  • 串行级联接口,能通过一根信号线完成数据的接收与解码;
  • 任意两点传输距离在不超过5米时,无需增加额外电路;
  • 当刷新速率30帧/秒时,级联数不小于1024点;
  • 数据发送速度可达800Kbps;
  • 光的颜色高度一致,性价比高。

注意: 800Kbps,相当于1.25us传输一比特数据。

引脚图

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第10张

Cortex-A9 uboot启动代码详解

前言

我们在前面的ARM系列课程,已经讲解了arm的架构、汇编指令、异常、常用外设的控制器驱动,那么我们已经具备开发arm系列产品的基本技能。

本篇给大家介绍一款比较常用的bootloader:uboot,通过uboot的介绍以及源代码的详细分析,让大家把之前所有ARM相关的知识点融会贯通起来。

一、uboot

1. 概念

U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。

U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。

2. uboot基本功能

U-Boot可支持的主要功能列表:

  • 系统引导支持nfs挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
  • 基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
  • CRC32校验可校验FLASH中内核、RAMDISK镜像文件是否完好;
  • 设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
  • 上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号。

3. 常用命令

uboot命令比较多,下面只列举网络启动要用到的命令:

如何系统地学习嵌入式(怎样才能学习嵌入式技术与应用)-第11张

4. 配置参数举例

以下以网络下载内核、网络挂载nfs为例。

1)ubuntu环境

ubuntu ip:192.168.6.186 ……

意犹未尽,查看更多精彩文章→→https://www.dianyuan.com/eestar/

更多精彩内容→→

学了那么多年的单片机,你真的学会了吗?

换个角度学习PWM,豁然开朗许多

工程师的技能明明都很难学,为什么EMC一直是你心中的痛?

关于变压器的那些疑问,此文给你作答

关于嵌入式单片机,怎样的学习方法才是正确的

,

版权声明:该问答观点仅代表作者本人。如有侵犯您版权权利请告知 cpumjj@hotmail.com,我们将尽快删除相关内容。