跟着咱们进入遍及的物联网(IoT)国际,嵌入式设备的衔接性是必不可少的。嵌入式产品,与一般电子产品相同,开发进程都需求遵从一些根本的流程,都是一个从需求剖析到整体规划,具体规划到最终产品完结的进程。可是,与一般电子产品比较,嵌入式产品的开发流程又有其特别之处。它包含嵌入式软件和嵌入式硬件两大部分,针对嵌入式硬件和软件的开发,在一般的电子产品开发进程中,是不需求触及的。嵌入式产品的研制流程具体如下图:
下面,针对嵌入式产品的开发进程中的各个阶段,咱们进行具体讨论。
阶段1:产品需求
在这一个阶段,咱们需求弄清楚的是产品的需求从何而来,一个成功的产品,咱们需求满意哪些需求。只要需求清晰了,咱们的产品开发方针才干清晰。在产品需求剖析阶段,咱们可以经过以下这些途径获取产品需求:
1)商场剖析与调研,首要是看商场有什么需求,还有便是前沿的技术是什么(站在做一款产品的视点);2)客户调研和用户定位,从商场广大客户那获取最精确的产品需求(要留意剖析商场,产品生命周期,晋级是否便利);3)赢利导向(本钱预算);
4)假如是外包项目,则需求咱们的客户供给产品的需求(直接从客户那获取,让客户签协议);当一个项目做完的时分,假如客户忽然又添加需求,添加功用,将导致你的项目周期严峻延迟,本钱剧烈上升,而且测验好的产品或许要悉数从头测验,本来的规划或许将不会满意当时的要求,所以做项目之前,最好要跟客户把需求承认下来,而且签定一份协议,不然,你辛苦多少个日日夜夜,得到的将是一个无法拾掇的烂摊子!
阶段2:产品规范阐明
在前一个阶段,咱们搜集了产品的一切需求。那么在产品规范阐明阶段,咱们的使命是将一切的需求,细化成产品的具体的规范,就比方一个简略的USB转串口线,咱们需求承认产品的规范,包含:
– 产品的外观;
– 产品支撑的操作体系;
– 产品的接口办法和支撑的规范;
等等诸如此类,牢记,在构成了产品的规范阐明后,在后续的开发进程中,咱们有必要严厉的恪守,没有200%的理由,不能随意更改产品的需求。不然,产品的开发进程必将是一个重复无期的进程。
《产品规范阐明》首要从以下方面进行考虑:
– 考虑该产品需求哪些硬件接口;
– 产品用在哪些环境下,要做多大,耗电量怎么。假如是消费类产品,还跟规划漂亮,产品是否便于带着,以承认板子巨细的需求,是否防水;- 产品本钱要求;
– 产品功用参数的阐明(例如交流机,假如是百兆的速率,用于家庭和一般公司;假如是用于整个省的交流,那规划的速率必定数十万兆以上了)所以说,产品功用参数的不同,就会影响到咱们规划考虑的不同,那么产品的规范天然就不同了;- 需求适应和契合的国家规范,国际规范,或行业规范;阶段3:产品整体规划方案。
在完结了产品规范阐明今后,咱们需求针对这一产品,了解当时有哪些可行的方案,经过几个方案进行比照,包含从本钱、功用、开发周期、开发难度等多方面进行考虑,终究挑选一个最适合自己的产品整体规划方案。
在这一阶段,咱们除了承认具体完结的方案外,咱们还需求归纳考虑,产品开发周期,多少人月的作业量,需求哪些资源或许外部帮忙,以及开发进程中或许遇到的危险及应对办法,构成整个项意图项目方案,辅导咱们的整个开发进程。
阶段4:产品概要规划
产品概要规划首要是在整体规划方案的根底上进一步的细化,具体从硬件和软件两方面下手:
硬件模块概要规划
硬件模块概要规划,首要从硬件的视点动身,承认整个体系的架构,并按功用来区分各个模块,承认各个模块的的大约完结。首先要根据咱们究竟要哪些外围功用以及产品要完结的作业,来进行CPU选型(留意:CPU一旦承认,那么你的周围硬件电路,就要参阅该CPU厂家供给的方案电路来规划)。然后再根据产品的功用需求选芯片,比方是外接AD仍是用片内AD,选用什么样的通讯办法,有什么外部接口,还有最重要的是要考虑电磁兼容。
一般一款CPU 的生计周期是5-8年,你考虑选型的时分要留意,不要选用快停产的CPU,防止呈现这样的结局:产品辛辛苦苦开发了1到2 年,刚开发出来,还没挣钱,CPU又停产了,又得要从头开发。许多公司就死在这个上面。
软件模块概要规划
软件模块概要规划阶段,首要是根据体系的要求,将整个体系按功用进行模块区分,界说好各个功用模块之间的接口,以及模块内首要的数据结构等。
阶段5:产品具体规划
硬件模块具体规划
首要是具体的电路图和一些具体要求,包含 PCB和外壳彼此规划,尺度这些参数。接下来,咱们就需求根据硬件模块具体规划文档的辅导,完结整个硬件的规划。包含原理图、PCB的制造。
软件模块具体规划
功用函数接口界说,该函数功用接口完结功用,数据结构,全局变量,完结使命时各个功用函数接口调用流程。在完结了软件模块具体规划今后,就进入具体的编码阶段,在软件模块具体规划的辅导下 ,完结整个体系的软件编码。
必定要留意需求先完结模块具体规划文档今后,软件才进入实践的编码阶段,硬件进入具体的原理图、PCB完结阶段,这样才干尽量在规划之初就考虑周全,防止在规划进程中重复批改。进步开发功率,不要为了图一时之快,没有完结具体规划,就开端实践的规划进程。
阶段6&7:产品调试与验证
该阶段首要是调整硬件或代码,批改其间存在的问题和BUG,使之能正常运转,并尽量使产品的功用到达产品需求规范阐明要求。
硬件部分:
– 目测加工会得PCB板是否存在短路,器材是否焊错,或漏焊接;- 测验各电源对地电阻是否正常;
– 上电,测验电源是否正常;
– 分模块调试硬件模块,可凭借示波器、逻辑剖析仪等根据。
软件部分:
验证软件单个功用是否完结,验证软件整个产品功用是否完结。
阶段8:测验
功用测验(测验不经过,或许是有BUG);
压力测验(测验不经过,或许是有BUG或哪里参数规划不合理);功用测验(产品功用参数要提炼出来,供将来客户参阅,这个便是你的产品特征的一部分);其他专业测验:包含工业级的测验,例如含抗搅扰测验,产品寿数测验,防湿润测验,高温文低温测验(有的产品有很高的温度或很低的温度作业不正常,乃至停止作业)。
有的设备电子元器材在特别温度下,参数就会反常,导致整个产品呈现毛病或失灵现象的呈现;有的设备,零下几十度的情况下,根本就发动不了,开不了机;有的设备在高温下,电容或电阻值就会发生物理的改动,这些都会影响到产品的质量。这儿要引出一个论题,工业级产品与消费类产品有什么差异呢?工业级的产品就要防止这些反常和特别问题,有的产品是在很深的海里作业,或许在酷寒的山洞作业,或许炽热沙漠作业,或许动摇的设备上,比方轿车;或许是需求防止雷击;所以这便是工业级产品跟消费类产品的差异,消费类的产品就不需求做这么多的测验。
阶段9:产品
经过上一阶段完好测验验证,在此阶段,即得到咱们开发成功的产品。在此阶段,可以比较实践的产品和开始的构成的产品规范阐明,看经过一个完好的开发进程,是否产品完全契合开始的产品规范阐明,又或许,半途发现产品规范阐明存在问题,对它进行了多少批改呢?
附录:嵌入式硬件开发流程
之前,咱们具体叙述了嵌入式产品的研制流程,那么在这一节,咱们具体以嵌入式产品的硬件部分为例,再次解说其开发进程,期望经过这一节,咱们能对嵌入式硬件开发流程有更深入的知道,在今后的学习和作业中,愈加规范化和规范化,进步开发技术。嵌入式硬件开发流程一般如下图,分为8个阶段:
嵌入式产品的硬件形态万千,CPU 从简略的4 位/8位单片机到32 位的ARM处理器,以及其他专用IC。别的,根据产品的不同需求,外围电路也各不相同。每一次硬件开发进程,都需求根据实践的需求,考虑多方面的要素,挑选最合适的方案来。
硬件阶段1:硬件产品需求
和一般的嵌入式产品需求相同。阶段1:产品需求。
硬件阶段2:硬件整体规划方案
一个硬件开发项目,它的需求或许来自许多方面,比方商场产品的需求或功用提高的要求等,因而,作为一个硬件规划人员,咱们需求主动去了解各个方面的需求并剖析,根据体系所要完结的功用,挑选最合适的硬件方案。
在这一阶段,咱们需求剖析整个体系规划的可行性,包含方案中首要器材的可收购性,产品开发投入,项目开发周期估计,开发危险评价等,并针对开发进程中或许遇到的问题,提早挑选应对方案,确保硬件的顺利完结。
硬件阶段3:硬件电路原理图规划
在体系方案承认后,咱们即可以展开相关的规划作业,原理规划首要包含体系整体规划和具体规划,终究发生具体的规划文档和硬件原理图。
原理规划和PCB规划是规划人员最首要的两个作业之一,在原理规划进程中,咱们需求规划硬件内部资源,如体系存储空间,以及各个外围电路模块的完结。别的,对体系首要的外围电路,如电源、复位等也需求细心的考虑,在一些高速规划或特别运用场合,还需求考虑EMC/EMI等。
电源是确保硬件体系正常作业的根底,规划中要具体的剖析:体系可以供给的电源输入;单板需求发生的电源输出;各个电源需求供给的电流巨细;电源电路功率;各个电源可以答应的动摇规模;整个电源体系需求的上电次序等等。
为了体系安稳牢靠的作业,复位电路的规划也十分重要,怎么确保体系不会在外界搅扰的情况下反常复位,怎么确保在体系运转反常的时分可以及时复位,以及怎么合理的复位,才干确保体系完好的复位后,这些也都是咱们在原理规划的时分需求考虑的。
相同的,时钟电路的规划也是十分重要的一个方面,一个欠好的时钟电路规划,或许会引起通讯产品的数据丢包,发生大的EMI,乃至导致体系不安稳。
原理图规划中要有“拿来主义”!现在的芯片厂家一般都可以供给参阅规划的原理图,所以要尽量的凭借这些资源,在充沛了解参阅规划的根底上,做一些自己的发挥。
硬件阶段4:PCB图规划
PCB规划阶段,便是将原理图规划转化为实践的可加工的PCB 线路板,现在干流的PCB 规划软件有PADS,Candence 和Protel几种。
PCB规划,尤其是高速PCB,需求考虑EMC/EMI,阻抗操控,信号质量等,对PCB 规划人员的要求比较高。为了验证规划的PCB是否契合要求,有的还需求进行PCB 仿真。并根据仿真成果调整PCB 的布局布线,完结整个的规划。
硬件阶段5:PCB加工文件制造与PCB打样
PCB制造完结今后,在这一阶段,咱们需求生成加工厂可辨认的加工文件,即常说的光绘文件,将其交给加工厂打样PCB 空板。一般1~4层板可以在一周内完结打样。
硬件阶段6:硬件产品的焊接与调试
在拿到加工厂打样会的 PCB空板今后,接下来咱们,需求查看PCB空板是否和咱们规划预期相同,是否存在显着的短路或断痕,查看经往后,则需求将前期收购的元器材和PCB空板交由出产厂家进行焊接(假如PCB 电路不杂乱,为了加快速度,也可以直接手艺焊接元器材)。
当PCB 现已焊接完结后,在调试PCB之前,必定要先仔细查看是否有可见的短路和管脚搭锡等毛病,查看是否有元器材类型放置过错,榜首脚放置过错,漏安装等问题,然后用万用表丈量各个电源到地的电阻,以查看是否有短路,这样可以防止轻率上电后损坏单板。调试的进程中要有平缓的心态,遇见问题是十分正常的,要做的便是多做比较和剖析,逐渐的扫除或许的原因,直致终究调试成功。
在硬件调试进程中,需求常常运用到的调试东西有万用表和示波器,逻辑剖析仪等,用于测验和调查板内信号电压和信号质量,信号时序是否满意要求。
硬件阶段7:硬件产品测验
当硬件产品调试经过今后,咱们需求对照产品产品的需求阐明,一项一项进行测验,承认是否契合预期的要求,假如达不到要求,则需求对硬件产品进行调试和批改,直到契合产品需求文明(一般都以需求阐明文档作为评判的一句,当然显着的需求阐明过错在外)。
硬件阶段8:硬件产品
咱们终究开发的硬件成功。一个完好的,完结契合产品需求的硬件产品还不能阐明一个成功的产品开发进程,咱们还需求依照预订方案,按时高质量的完结。才是一个成功的产品开发进程。 在PIC的单片机中有多种类型有内部RC振动器的功用,然后省去了晶振,不光节省了本钱,而且咱们还多了两个IO端口可以运用。
可是,因为RC振动器中电阻、电容的离散性很大,因而,在有内部RC振动器的单片机中,它的内部RAM中都会有一个名为OSCCAL的校准寄存器,经过置入不同的数值来微调RC振动器的振动频率。而且,单片机的程序存储器中,也会有一个特别的字来贮存工厂出产时测得的校准值。下面我以常用的12C508A和12F629为例加以阐明。
PIC单片机RC振动器的运用及校准办法
12C508A的复位矢量是程序的最高字0x1FF,这个字节出产商现已固定的烧写为MOVLW 0xXX,指令履行后,W寄存器中即为校准值XX,当咱们需求校按时,那么,在紧接着的地址0x0应该是一条这样的指令:MOVWF OSCCAL。接下去RC振动器就会以规范的振动频率运转了。
12F629的校准值也存放在最高字–0x3FF中,内容是RETLW 0xXX,但它的复位矢量却是0x0。这样,在咱们需求校准RC振动器时,在初始化进程中要加上下面两句:
CALL 0x3ff
MOVWF OSCCAL
当然,你还要留意寄存器的块挑选位。
曾经,我在做项目时,没太留意这个问题,这是因为在运用12C508A时,HI-TECH在进行编译时现已偷偷地替咱们做了这项作业。它会在程序的0x0处主动加一条MOVWF OSCCAL。用12F629做接纳解码替代2272时也没发生什么问题,可是在用被它作翻滚码解码器时却发现接纳间隔的离散性很大。经屡次试验总算找出是没对振动器的振动频率进行校对所至。
因而,需求别的编写用于校对的句子,我用了两种办法来完结这个意图:
1、用内嵌汇编的办法
#asm //此段汇编程序用于将坐落程序段3FFH的call 3ffh //内部RC振动器的校准值放入校准寄存器,bsf _STATUS,5 //在进行C言语调试时应屏蔽这段程序movwf _OSCCAL#endasm
2、用C言语规范办法
const unsigned char cs @ 0x3ff; //在函数体外。。。
OSCCAL=cs; //仿真时屏蔽此句
用这两种办法都有一个小缺点–仿真时,程序无法运转,这是因为C编译器并没有为咱们在0x3FF放置一条RETLW 0xXX的句子。因而,程序运转到这儿之后,并没有把一个常数(校准值)放入W寄存器然后回来,而是持续履行这条句子的下一句–0x0及其之后的程序,也便是说程序到此就乱了。因而如程序后边注释所示,在仿真时,应先屏蔽这几句程序。在程序调试完结后,需求烧写时,把注释符去掉,再编译一次就可以了。
我还有一种主意,不必屏蔽句子,那便是用函数来完结,便是在0x3FF起树立一个函数,函数体内只要一条句子,如下:
char jz()
{
return 0;
}
当然,还要考虑C函数回来时,必定会挑选寄存器0,实践上这个函数的开始地址应小于0x3FF。可是我找了我所能找到的参阅资料,并上网找了屡次,也没找到为函数肯定定位的办法,期望有知道的朋友点拨一下。
还有,12C508A是一次性编程的,而且0x1FF处的内容,咱们是无法改动的,也便是说你在此处编写任何指令,编程器都不会为你烧写,或许说即便烧写了也不会改动其间的内容。
可12F629是FLASH器材,可屡次编程,假如你没有成心挑选,正品的编程器(如Microchip的PICSTART PLUS)是不会对存有校准值的程序空间进行编程的。即便你无意中对这个程序空间进行了编程,你也可以用一条RETLW 0xXX放在0x3FF处再编程一次就可以了,但这个XX值或许是不正确的,需经试验承认(请参阅后边阐明)。
为了查验OSCCAL的值对振动器频率的影响,特编写了下面一个小程序进行验证:
#include
//*********************************************************__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & BOREN & PROTECT & CPD);//内部RC振动器一般IO口;无效看门狗;上电延时;内部复位;掉电复位;代码维护;数据维护//*********************************************************#define out GPIO0 //界说输出端#define jc GPIO3 //界说检测端
//*********************************************************void interrupt zd(); //声明中止函数//主函数***************************************************void main(){
CMCON=7;
OPTION=0B00000011; //分频比为1:16,
TRISIO=0B11111110;
GPIO=0B00000000;
WPU=0;
T0IF=0;
GIE=1;
T0IE=1;
while(1){
if(jc)OSCCAL=0xFF;
else OSCCAL=0;
}
}
//中止函数*************************************************void interrupt zd(){
T0IF=0;
out=!out;
}
程序其实很简略,便是在中止中让out脚的电平翻转,翻转的时刻为4096个指令周期,电平周期为8192个指令周期。而指令的周期又决定于RC时钟频率。在主程序中,不断的检测JC端口的电平,然后根据此端口电平的值批改OSCCAL寄存器的值。当然,最终从OUT脚的波形周期上反映出了OSCCAL寄存器的值改动。
经用示波器丈量(抱愧,手边没有频率计),JC端接地时,OUT端的电平周期为9.5毫秒左右;而JC端接正电源时,OUT端的电平周期为6毫秒左右。也便是说OSCCAL的值越大,单片机的时钟频率越高。而且,这个改动规模是很大的,因而,假如运用PIC单片机的内部RC振动器时,对其振动频率进行校对是十分必要的。这也是我在做翻滚码接纳解码器时,产品离散性很大的原因。望咱们今后运用内部RC振动器时可以留意到此点。
但还有一点要留意,即便你对RC振动器进行了校对,你也别盼望这个4MHz的RC振动器必定会很规范,实践上它仍是一个RC振动器,它的振动频率是电压、温度的函数,也便是说这个振动频率会跟着电压和温度的改动而改动,仅仅经校对后的值更挨近4MHz算了,这在产品开发的一开端就要留意的。
责任编辑:ct