1. 嵌入式产品概述
最近做智能语音交互产品,顺便调研、学习了嵌入式产品及相干的常识。
原来对嵌入式产品理解不多,总感觉不好动手。通过学习才晓得,嵌入式产品无处不在,且价格低廉(几元到几十元)、功能强大,开发也不难。
目前支流的嵌入式芯片,次要指单片机SOC(System on a Chip),即零碎级芯片或片上零碎,SoC中蕴含一个或多个处理器、存储器、模仿电路模块、数模混合信号模块以及片上可编程逻辑。单片机芯片个别很小,个别也就1x1厘米左右,价格个别几元到几美元,繁多芯片集成了CPU、存储等,能够将设计好的程序烧录到存储中,开机就能够运行。
个别嵌入式产品,由嵌入式芯片配上相干的模块组成一个残缺的电路版,是产品的外围。比方智能音箱产品,就是由电路板(嵌入芯片、WIFI、蓝牙、功放、模数转换、数模转换、PIO(可编程输入输出))、远场麦克风、喇叭、提醒灯、按钮、外壳等组成。所有的交互都是嵌入芯片中的程序控制的,如声音采集,个别是模数采集芯片进行采样为数字值,存于指定的区域,再由程序进行读取。开关灯管制就是设置对应PIO的值(开/关),环形灯或突变灯成果,就是采纳PMW(脉冲宽度调制)将数字值输入为模仿值给到灯就行。按钮对应一个PIO,也会在嵌入芯片中产生中断,而后由中断处理程序进行相应的解决。
嵌入式产品的硬件开发波及的范围广,更业余一些,如ID设计(工业设计 - Industrial Design,包含场景交互、造型、材质、外表解决)、MD设计(结构设计 - Mechanic Design,拆件解决、构造合理性、元器件匹配度、防护设计)、模具加工等。
嵌入式产品的软件开发绝对就简略一些,目前个别是采纳C或C++语言,也有一些反对Python、Rust或图形组件形式开发。C或C++开发个别集成开发环境用uVision,开发时,要抉择嵌入芯片型号,开发时,不必接入理论设施,能够模仿执行,调试。理论接入硬件调试时,个别采纳USB线连贯硬件与电脑(通过USB-UART电路,将USB模仿为一个串口),电脑会自动识别该硬件为串口设施如COM3,再采纳串口调试工具如Windows sscom、Mac minicom,关上相应的端口就能够查看到调试信息(个别在代码中采纳prinft函数输入,内容会重定向到串口输入中,从而不便调试),也能够采纳在线串口调试硬件调试。uVision反对8051系列、ARM系列等。
罕用的单片机有8051系列,ARM系列。
- MCS-51单片机
是美国INTEL公司于1980年推出的产品,8051是晚期的最典型的代表作,因为MCS-51单片机影响极深远,许多公司都推出了兼容系列单片机,就是说MCS-51内核实际上曾经成为一个8位单片机的规范。国内比拟有名的有STC公司(宏晶科技)的单片机产品,如反对语音辨认的模组就采纳STC11L56XE单片机、IC Route公司的LD3320A语音辨认芯片、SYN6288语音合成芯片。 - ARM
英国ARM公司是寰球当先的半导体知识产权(IP - Intellectual Property)提供商,全世界超过95%的智能手机和平板电脑都采纳ARM架构。ARM公司不生产芯片,只做芯片的设计,而后将设计受权给其它公司,收取受权费用,其它公司据此或在此基础上定制批改进行芯片生产、销售。
ARM v7架构后的处理器命名,冠以Contex的代称,如Contex-A系列、
Contex-R系列
、Contex-M系列。
- Contex-A系列
面向高端的利用处理器,个别可装置操作系统,如嵌入式Linux, Android, Windows。 - Contex-R系列
次要面向实时零碎,实用于须要疾速解决的零碎,如汽车油门、刹车管制等。 - Contex-M系列
实用于要求性价比高、能耗低的产品,个别没有操作系统,也可装置free rtos或ucos操作系统。
罕用的开发芯片为Contex-A/M系列,如树莓派采纳的Context A72内核,意法半导体的ARM芯片STM32F103C8T6可采纳裸机零碎或装置free rtos。
ARM芯片中,意法半导体STM的ARM芯片应用较多,如STM32F103C8T6,其命名形式为STM32代表32位芯片,F103代表增强型,C代表引脚数为48,8代表Flash大小为64K,T代表封装为LQFP形式,6代表工作温度范畴为-40 ~ +85 摄氏度。
STM芯片品种很多,能够下载STMCUFinder进行抉择,如抉择反对摄像头接口的芯片,就能够列出许多,抉择STM32F407ZG,则其参数定义及形容如下所示:
2. 本次开发过程概述
本次开发基于机芯智能的开发板XR-51A_EVB,基于ARM Contex-M4F,反对WIFI、声音、摄像头等,该开发板个性为:
◼ IEEE 802.11b/g/n, 1x1 SISO 2.4GHz
◼ 内置 ARM Cortex-M4F 的 32 位微型 MCU,主频高达 384MHZ
◼ 内置 416KB 的 SRAM,160KB 的 ROM 和 4M 的 PSRAM
◼ 内置 1024 bits 的 efuse
◼ 反对 DVP 接口摄像头,最大反对 1920*1088 分辨率,板载闪光灯
◼ 反对 UART/GPIO/PWM/CSI/MIC/Line-in/Speaker 接口
◼ 反对 AES/DES/3DES/SHA/MD5/CRC 加密引擎
◼ 反对 STA/AP/ STA+AP 工作模式
◼ 反对 Smart Config/AirKiss(微信)一键配网
◼ 反对串口本地降级和近程固件降级(FOTA)性能
◼ 反对二次开发,集成了 Windows、Linux 开发环境
◼ 集成音频子系统(Audio Subsystem),包含 1 个带有左右声道语音输入的数字麦克风控制器,1 个 24 位音频数模(DAC)通道,反对 8KHz至 192KHz 的采样率,1 个用于麦克风输出的 24 位音频模数(ADC)通道,反对 8KHz 至 48KHz 的采样率,1 个用于线路输出的 24 位音频数字(ADC)通道,反对 8KHz 至 48KHz 的采样率。
◼ 集成视频子系统(Video Subsystem),反对 JPEG、YUV 编码模式,在离线编码模式下反对 nv12 输出格局,反对可配置的图片分辨率,最低图片分辨率:32x32,最大图片分辨率:1920x1088
SRAM是CPU运行的存储器,用于存储指令或数据,断电后信息失落,ROM(相似于U盘)个别存储编译后烧录的代码或数据,断电不会失落,PSRAM个别用于缓存,如图像、声音缓存等,断电后会失落。
3. 试验过程
3.1 编译示例代码
软件开发的第一步是运行Hello world示例程序,嵌入式开发也不例外,依照开发手册,一步一步来,首先下载源代码
cd xr-50a # 建设开发根目录wget https://github.com/XradioTech/xradio-skylark-sdk # 下载开发板SDKwget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q2-update/+download/gcc-arm-none-eabi-4_9-2015q2-20150609-linux.tar.bz2 # 下载arm穿插编译工具tar -xvf gcc-arm-none-eabi-4_9-2015q2-20150609-linux.tar.bz2cd xradio-skylark-sdk # 进入sdk根目录vim gcc.mk # 批改全局gcc编译参数,将arm穿插编译环境退出# -----------------------------------------------------------------# cross compiler# -----------------------------------------------------------------CC_DIR := /home/xr-50a/gcc-arm-none-eabi-4_9-2015q2/binCC_PREFIX := $(CC_DIR)/arm-none-eabi-cd project/demo/hello_demo/gcc # 进入hello工程下的编译目录gccmake config # 配置开发板类型(XR872, 40M)make lib # 编译库文件(包含声音驱动、图像显示、网络等,编译成相应模块的库文件.so) # 具体模块如atcmd,audio,cjson,console,driver,efpg,fs/fatfs,image,jpeg,kernel,libc,net,ota,pm,rom,smartlink,sys,util,xzmake # 编译hello工程,造成执行文件.axfmake image # 将执行文件打包成烧录镜像文件.bin
开发板通过Type C连线连贯到Windows电脑,运行烧录程序PhoenixMC.exe,抉择上述镜像文件,烧录,电脑运行sscom串口通信软件,抉择端口个别是Com3,关上端口,按开发板reset按键重启,开发板烧录程序主动运行,电脑端sscom中即可显示出相应的调试信息。
开发编译环境能够是Windows,也能够是Linux,操作方法根本一样。Windows下是装置Cygwin+GCC,装置实现后,在cygwin类Linux环境下操作,操作的命令都是一样的。
3.2 获取物联网接入代码
要开发物联网利用,有很多物联网平台能够接入,也能够抉择开源的物联网平台,商用的平台如腾讯连连IoT Explorer、阿里云IoT、中国移动OneNET、华为云IoT、机智云等,商用平台对小批量产品接入个别均收费,如小于10台。
本开发板自带的镜像能够接入腾讯连连,按reset按键三次,即可进入配网模式,用手机扫描一下厂家提供的二维码,即可关上微信小程序,进行联网(要求手机连贯WIFI),联网胜利后,小程序中即可查看到设施状况,能够开灯、关灯,也可与开发板直接对话,如“小智小智,明天的天气怎么样?”,“小智小智,播放歌曲”,“小智小智,关上台灯”等。
通过比拟,还是机智云的物联网接入比较简单一些,
物联网接入个别流程:注册开发者帐号、定义物联网产品、数据点、虚构设施测试、代码移植、理论设施调试、上线。
- 定义物联网产品
即定义本物联网产品的根本信息,包含名称、类型、通信形式、ProductKey、ProductSecret等,间接在控制面板进行定义即可。 - 数据点
即设施产品的性能的形象,采纳Json格局表白,用于形容产品性能及其参数。比方智能灯,咱们能够定义一个OnOff的布尔型数据,用于管制灯的开关,另外定义一个brightness的整数型数据,范畴0-100,用于定义灯的亮度。创立数据点后,设施与云端通信的数据格式即可确定,设施、机智云能够互相辨认设施与机智云互联互通的数据。 - 虚构设施测试
产品定义及数据点确定后,咱们能够认为零碎曾经为咱们产生了一个虚构的物联网设施了,该设施按咱们的要求进行定义,能够进行虚构测试了。零碎提供了控制台间接测试及手机APP管制测试,在测试界面或手机APP上,即可看到咱们的设施了,也能够不便地对设施进行管制,收回控制指令后,虚构设施的状态会产生相应的扭转,这与咱们最终实现的状况是相似的,通过这个形式,能够对咱们的产品有个间接的理解、意识。控制台操作界面如下:
手机APP管制界面如下:
代码移植
接下来就要实现咱们的代码了,机智云能够主动生成MCU SDK,即根据上述定义的产品属性、数据点主动生成物联网接入代码,将这个代码依据嵌入设施的代码进行相应的批改编译即可。cd xr-50a/xradio-skylark-sdk/project/demo # 进入demo目录cp -r hello_demo gz-iot # 从hello_demo拷贝为物联网工程目录gz-iotrm *.h, *.c, *.d, *.o # 删除其它文件,保留gcc、image目录及prj_config.hmv xxx/Gizwits gz-iot # 将机智云生成的接入代码移动过去,次要包含Gizwits、User、Utils目录cd gz-iot/gcc # 进入工程gcc编译目录vim Makefile # 批改本工程编译参数,次要是退出本工程的蕴含文件门路 INCLUDE_PATHS += -I$(PRJ_ROOT_PATH) INCLUDE_PATHS += -I$(PRJ_ROOT_PATH)/Gizwits INCLUDE_PATHS += -I$(PRJ_ROOT_PATH)/Utilsmake config # 配置开发板类型(XR872, 40M)make lib # 编译库文件(包含声音驱动、图像显示、网络等,编译成相应模块的库文件.so)make # 编译hello工程,造成执行文件.axfmake image # 将执行文件打包成烧录镜像文件.bin,生成文件../image/xr872/xr_system.imgWindows电脑运行烧录软件,烧录到开发板。
机智云的接入代码,包含了残缺的业务逻辑,如PRODUCT_KEY、dataPoint_t、gizwitsProtocol_t等,只须要参考生成的代码目录下的MCU_COMMON_User_Guide _V0.4.pdf文档,移植次要是4个方面的内容,代码量不大。
- 实现串口打印驱动
这个xr50模块曾经实现,故程序中可用GIZWITS_LOG或printf打印调试信息。 - 实现芯片复位函数
这个依据芯片的指令来实现,若不须要从界面管制设施复位,也能够不实现。 - 实现定时器
须要依据xr50实现毫秒定时器,并设置回调函数为TIMER_IRQ_FUN。 - 实现串口A驱动
次要是实现WIFI数据收发的接口,可参考at_demo, wlan_demo示例工程的内容批改。
3.3 其它罕用物联网模组
最简略的物联网管制芯片是乐鑫ESP WiFi芯片/模组,如ESP8266,该模组其实是一个WIFI模块,但集成了Tensilica L106 超低功耗32位微型MCU,该MCU除了用于管制WIFI性能外,对外开放该MCU残余能力,所以反对编程开发,还带外围PIO,这样一个模组就是一个绝对残缺的开发板(个别同时购买带烧录器,整体约10多元),支持物联网开发,且各物联网平台对此模组都反对很好。
其它罕用的物联网模组如下:
4. 瞻望
嵌入式芯片便宜、有不便调试的集成开发环境、可在线烧录,因而嵌入式或物联网开发目前还是很容易上手的。采纳嵌入式开发,能够针对咱们日常生活中情景开发智能设施,如主动浇花器、音乐门童等,充沛开展你的想像力吧 :)
后续可关注RISC-V,是一个基于精简指令集(RISC)准则的开源指令集架构(ISA),但还没有成熟,喜爱DIY的能够多理解一下。近几年内该当都还是ARM的天下,ARM芯片不贵,还好用,材料全。
后续可关注Toit,是由 Google Chrome V8 团队开发的,创建于 2018 年,旨在为物联网
设施构建一个通用固件,以取代传统的开发流程。它们提供了一套全新的性能,甚至是一种专为物联网开发的相似 Python 的新编程语言。
BTW,目前商品化的物联网产品很多,倡议大家能够间接从淘宝搜寻购买应用哈,若切实没有的再思考本人研发。我是米粉,喜爱用小米的产品,比方用小米智能插座(<50元)、小米温度计(<20元)、门窗检测器(<50元)来管制电脑运行,又便宜又好,插上小米插座,再将电脑电源插入,能够用手机APP近程管制电脑开关,也能查看房间温度,若温度高了,能够主动关上电扇降温,房间开门了,近程APP中也能查看到。电脑的用电量也是随时能够APP查看。