发布信息

嵌入式产品开发文档大揭秘:需求定义与常见文档类型

作者:软荐小编      2024-07-07 16:03:30     175

俗话说,只会写代码的工程师不是好工程师,这个说法不无道理,初学者可能不懂,但经验丰富的工程师肯定知道。

如果一个产品需要长期维护和销售,那肯定需要大量的开发文档,下面列举一些嵌入式产品开发常用的文档:

1)产品需求文档:描述产品的特性

2)功能需求文档:描述产品必须具备的功能

3)工程描述文档:描述系统实现的方法和满足需求的手段

4)硬件文档:描述相关硬件

5)软件或固件文档:描述如何为特定处理器设计微程序和固件

6)测试描述文档:描述必须测试的项目以及如何验证系统正常运行

1. 需求定义

需求定义用于描述产品的基本功能。对于公司来说,需求一般由公司市场部门或者公司主要客户制定。对于小公司或者爱好者(比如armjishu.com里的爱好者),可以由技术人员负责自己定义需求并写成文档。

通常,需求是根据以下因素来定义的:

1)系统目的(系统需要实现的各项功能定义)

2)实际输入输出是怎么实现的(供元器件选型参考)

3)系统是否需要操作界面(涉及软件层操作系统的选择)

事实上,对于小型嵌入式产品来说,定义需求非常重要,因为明确的需求可以避免后续开发过程中出现一系列问题,例如随机存取存储器(RAM)容量不足或所选的CPU速度无法满足处理需求。

以下是一个简单的实际例子,供大家参考:

系统描述:从化温泉水泵水交换系统电源输入:变压器9V~12V DC水泵功率:375W。

1)采用单相交流电机,采用机械电气控制

2)当温泉池处于低水位时,输入开关关闭,停止水泵运行。

3)用户可以自由设定泵运行或关闭的时间长度

4)除自动设定控制外,还需有手动装置,以便维护人员灵活控制泵进行维护

5)水泵开启、关闭或手动干预的时间可以30分钟为单位调整,范围为30分钟至23小时

6)显示装置可指示水泵的开启/关闭状态、剩余时间以及水泵是否处于手动干预模式

7)具有低水位监测并屏幕显示功能

若是需要用于商业用途,那么其设计文档除了需要满足上面给出的功能要求之外,还必须包括电磁干扰(EMI)和电磁兼容(EMC)认证、安全认证、使用环境(包括环境温度、湿度、盐雾腐蚀等)的要求。

其实确定了上述需求之后,接下来就要考虑选择一款合适的CPU来满足和实现系统功能了。那么我们就需要把上面用户能理解的7个需求转化为我们专业领域的要求了。转化如下,大家可以参考一下:

●a. 输入和输出信号需要多快处理或更新?

解释:目前嵌入式处理器的主频一般在几十兆到几百兆之间,微控制器的主频一般在几十兆,Arm处理器的主频可以达到几百兆。我们主要看产品是否需要处理大量的数据,是否需要对缓冲区进行频繁的操作,是否有类似占用CPU数据的工作要做。这就决定了我们必须选择合适的处理器,才能使产品发挥出最佳的性能。

●b. 可以使用单片集成电路(ASIC)或FPGA进行数据处理吗?

解释:如果可能的话,你不必选择处理器,你可以使用这些专业芯片来代替。

●c.系统是否有大量的用户输入输出操作(如对开关、显示设备的频繁操作)?

解释:如果是,请在选择处理器时考虑这些因素,并选择满足上述要求的 CPU。

●d. 系统与其他外部设备之间需要什么样的接口?

解释:这也是处理器需要评估的一个关键问题,选择具有这些接口函数的处理器将方便我们的电路设计和软件编程。

●e. 设计完成后是否有可能需要修改,或者在设计过程中系统需求是否有可能发生变化?我们的设计能否适应系统需求的变化?

解释:避免选择刚好满足当前需求的处理器,这样当未来业务需求逐渐提升时,如果处理器性能还有提升空间,可以重新使用当前产品;二是选择不会很快停产的芯片。很多处理器应用广泛,可以参考的资料也很多,但很有可能这款芯片已经在市场上流行了很久,芯片厂商早已推出更新的替代品。如果选择这款芯片,很有可能1、2年后就买不到这款处理器芯片了,导致你不得不重新选择新的处理器,重新设计产品。这样不仅浪费时间和金钱,也耗费人力,延误市场机会。

第二个处理器选择

2.1 所需 I/O 引脚数量

大多数处理器都使用内存和外部引脚来控制输入输出设备。处理器通常内置有 ROM 和 RAM,如果内置内存满足需要,处理器可以节省用于产生引用外部内存的信号的引脚,这样处理器就可以提供更多的设备引脚用于输入输出(部分处理器支持使用外部 RAM 或 ROM,但在访问外部内存时,处理器一般需要占用 8 到 10 个 I/O 引脚)。

另外,有的处理器内部有专门的定时时钟,也需要使用端口引脚来实现一定的定时功能;有的处理器还具备漏极输出和大电流输出能力,可以方便地直接驱动继电器或者电磁铁线圈,而不需要额外的驱动硬件支持。

在计算处理器I/O引脚数时,我们必须考虑使用处理器内部功能(例如串行接口和计时器等)时某些引脚的使用限制。

2.2 使用的接口数量

嵌入式处理器的主要功能是与应用环境中的硬件进行交互,这不仅要求外部硬件具备对接口的实时处理能力,还要求处理器能够以足够快的速度有效地处理接口数据。

例如AT91RM9200是ATMEL公司生产的一款工业级Arm9微处理器,基于Arm920T内核,处理速度高达200MIPS,同时该处理器配备了USB、以太网、支持RS485的红外串口、IIC、SPI、SSC等输出接口,其目的就是为了更方便的利用这些接口来开发嵌入式产品。

需要注意的是,由于许多处理器都存在一些限制,而这些限制在处理器技术文档中没有得到充分描述,因此您必须仔细阅读处理器的规格。例如,在阅读文档时,您可能会发现文档可能指出其串行接口可以在最高波特率下运行,但当您仔细研究处理器的规格数据时,您可能会发现并非所有串行端口接口的工作模式都可以在最大波特率下运行。

深刻理解和明确接口需求的方法:可以自己编写一些程序来实际测试一下接口,以确认某个处理器是否能满足应用需求;因为确认某个处理器是否能满足接口需求并不是一件简单的工作。

2.3 所需内存容量

确定内存容量的大小是嵌入式产品设计过程中的一个基本步骤。如果对所需的内存容量估计过高,那么我们可能会选择更昂贵的解决方案;相反,如果对所需的内存容量估计过低,系统可能需要重新设计,项目也可能无法按时完成。

●a.RAM与ROM的区别:

存储器有两种类型:随机存储器(RAM)和只读存储器(ROM)。ROM通常用于存储制造商编写的一些程序或数据,用于启动计算机和控制计算机的工作模式。RAM用于存取各种动态输入和输出数据、中间计算结果、与外部存储器交换的数据以及临时数据。当设备断电时,存储在RAM中的数据将丢失。

●b. 随机存取存储器(RAM)选择:

RAM 容量的预测相对简单。我们只需将所有变量的数量添加到所有内部缓冲区的容量,以及先进先出 (FIFO) 队列的长度和堆栈的长度,即可得到所需的 RAM 总量。

如果所需存储器容量超出该类型处理器的寻址范围,则只能通过增加外部RAM来满足需求;但是增加外部RAM会占用一定数量的I/O引脚来对扩展存储器进行寻址,而这种扩展往往会影响处理器实现应用程序的初衷。

软件的指标_软件产品的主要技术指标_指标软件技术主要产品包括

需要注意的一点是,有些微处理器会限制 RAM 的使用,这种限制的目的是借用部分内存作为内部寄存器组。除了上述因素外,使用的开发语言对所需的 RAM 容量也有一定的影响,一些效率低下的编译器可能会占用大量宝贵的 RAM 空间。

●c. 只读存储器(ROM)的选择:

系统所需的 ROM 大小应该是系统程序代码和所有基于 ROM 的数据表容量之和。预测所需 ROM 空间容量中比较困难的部分是预测程序代码的长度。解决此类问题的唯一方法是随着经验的逐渐积累,提高预测精度。

不过,最重要的不是计算程序的确切代码大小,而是要明确估计代码大小的上限。根据经验,如果 ROM 空间的 80% 都被代码占用,那就太拥挤了。除非你能确保系统要求不会改变,否则至少要为可能发生的变化预留足够的备用 ROM 空间。

大多数情况下,我们可以尝试把一部分程序代码写入ROM中,观察代码所占用的空间,对于带有内部ROM的微处理器系统,系统程序只能占用有限的程序存储空间。

d. 经验:

ROM和RAM的使用量差不多,程序代码的长度和选择的开发语言有关,比如用汇编语言编写的程序占用的空间就比用C语言编写的程序小很多。

对于追求低成本的小型系统,一般不建议使用高级编程语言;这是因为高级语言虽然更易于使用、调试和维护,但也需要较大的内存空间和大量的处理器时钟周期。

如果开发语言选择不当,其后果可能是将一个简单的低成本微控制器系统改造成一个需要使用几兆字节RAM空间的64位嵌入式处理器系统。

2.4 要使用的中断数

中断的主要目的是通知中央处理器当前正在发生的某种特殊事件。此类事件包括计时器超时事件、硬件触发事件等。

需要强调的是,大多数系统设计人员经常过度使用中断功能。其实,中断的主要功能是中断当前程序的执行。中断最适合于需要中央处理器立即提供服务的事件。

在设计和使用中断时,首先要确认实际需要的中断数量,然后要考虑系统内部占用的中断资源。如果需要使用的中断资源超出了处理器可以接收的中断数量,就应该采用一些特殊的手段来减少所需的中断信号数量。

2.5 实时处理考虑

实时处理是一个非常广泛的话题,其主要内容与系统的处理速度密切相关,实时事件是嵌入式微处理器需要关注的主要任务。

例如,处理器与串口通信时,一般经过上层软件(为保证实时性,任务切换时间足够短),然后占用处理器执行从串口获取数据的任务,并保证处理器速率快于串口速率,这样处理器就能以最快的速度响应和处理串口的相关任务,以达到最大的实时性;

另一方面,如果处理器本身内置有串口控制器、DMA、LCD控制器等,那么可以保证这些处理器内置接口直接用来控制串口、液晶屏等对象,以实现最大的实时性。

2.6 厂商是否提供良好的开发工具和环境?

选择新的处理器很可能要求使用新的开发工具和开发环境,包括软件编译环境等。对于开发时间紧迫的项目,开发人员往往抽不出专门的时间来研究和熟悉新的开发工具,从而无法完全掌握使用开发工具的技巧。

另外,有些开发工具价格比较高,可能只能从厂商处购买,仿真工具也需要付费,这些都是我们在选择处理器时需要考虑的成本因素。

2.7 处理器速度考虑因素

有几个细节需要考虑:

1)处理器速度和处理器时钟之间的关系

比如我们以 8031 单片机为例,由于该处理器可以适应 12MHz 的输入时钟频率,那我们是否可以认为它是一个速度为 12MHz 的处理器呢?不是的,事实上,由于处理器内部逻辑电路需要多个不同频率的时钟脉冲来执行每一条指令,因此处理器内部时钟电路需要将输入的 12MHz 时钟进行 12 分频;最终处理器只提供 1MHz 的主频。

有时,主频为80MHz(输入时钟为80MHz,执行速度为80MHz)的处理器的执行速度比主频为200MHz(输入时钟为200MHz,执行速度为50MHz)的处理器快得多。

2)处理器指令系统

如果应用程序不需要进行复杂的数学运算,那么采用RISC指令集的处理器速度更快;如果进行比较复杂的运算,那么采用CISC指令集的处理器速度更快。

3)芯片结构体系

现在有些芯片会将多个功能不同的内核封装到一个芯片IC中,以定制特定功能,例如DSP,它包括硬件乘法器和移相器,用于数字解码和乘法运算;但这种类型的处理器也受到其自身局限性的限制。通常,在执行某些常见操作之前,必须使用附加指令将RAM中的数据放入内部寄存器中。相比之下,一般处理器只允许直接访问RAM中的数据。

2.8 只读存储器 (ROM) 选择

大部分工程项目在开发阶段一般会使用可擦除可编程只读存储器(EPROM)或闪存,这类可擦除可重写的存储器主要优点是可以多次使用。一旦产品开发完成,EPROM存储器就可以用一次性写入器件(OTP)代替。一次性写入器件的外观和封装几乎与EPROM一模一样,唯一的区别是表面没有擦除窗口,价格也比EPROM低很多。

但另一种情况,如果产品日后需要升级固件或者进行在线编程的话,我们还是应该选择可擦除、可编程的存储器。

还有非挥发性记忆体,例如制造电视机时,有可能需要装置有记忆最后观看频道的功能,即使断电后,频道信息也不会丢失。

总结:因此根据不同的产品选择不同的内存也是一门非常复杂的学问。

2.9 电源要求

在一些设计方案中,电源根本不是问题,对电源的唯一要求就是能正常给电路供电即可。其实选择电源主要有三个方面需要考虑:

1)注意设计对供电方式是否有限制,比如是否像大多数家用电器一样需要通过家里的墙上插座供电,还是使用USB口供电

2)看看系统是否需要电池供电。如果需要,我们应该考虑选择不需要高驱动电流的处理器,然后再为其选择合适的电池。

3) 休眠电流:许多微处理器支持低功耗工作模式,在该模式下,系统的 CPU 处理器处于休眠模式,所有外部设备暂时关闭,以降低系统的功耗。有些微处理器在此模式下需要的维持电流非常小,但有些微处理器在此模式下不会节省太多电量。无论如何,我们需要估计系统在节点模式下的工作时间,以便针对具体情况选择要使用的电池。

总之,不管是哪种情况,我们一定要清楚系统所需的总电源量。

2.10 设备工作环境要求

环境要求主要考虑温度、湿度等,如果系统必须在温度范围很大的环境中运行,比如军事装备或汽车的控制系统,那么可用的处理器范围就会小得多。

而且由于温度变化较大的器件通常价格昂贵,设计过程中不能以一般工业级器件的价格来预算。

2.11 生命周期成本

如果我们的产品是MP3,一般情况下,我们不需要考虑在用户端修改M​​P3程序的问题,也不用担心能否拿到设备的备件,因为MP3是消费产品;

也就是说,如果我们的产品是一个价值几万美元的工业设备,需要常年不间断运行,那么我们在产品设计的时候就必须有长远的眼光:

a. 首先,我们需要选择一款处理器或存储架构可以升级的设备

b.考虑到程序升级的可能性,还需要选择更大的内存容量

c.最后要注意的是所选处理器是否能长期供货,这比处理器的价格重要得多。

除了上述考虑因素外,生命周期成本也是设计之初需要考虑的因素。一般来说,生产的零件越多,可接受的前期开发成本就越高。如果产品是 MP3,我们可能会选择低成本的微处理器,并投入大量资金开发控制 MP3 的软件。

但如果我们的产品是昂贵的工业设备,那么在产品的生命周期内,销量也就几百台。毫无疑问,开发这样的产品,最重要的是降低开发成本(降低开发成本而不是硬件成本!!!);另外,工业产品的成本不像家电或消费电子产品那么敏感。综上所述,在开发工业产品时,当然要选择易于开发、有助于缩短开发流程的处理器。

2.12 关于处理器是否有足够的信息?

如果该处理器已经在市场上广泛应用,我们可以获得更多相关信息,观察别人的产品是如何使用该处理器的,也可以在网上找到很多相关的设计信息和相关技术专题,进一步降低了技术门槛,确保使用该处理器制作产品的可行性,降低了风险。

指标软件技术主要产品包括_软件产品的主要技术指标_软件的指标

相反,如果是厂商全新推出的处理器,由于市场上没有产品可以参考,我们只能从阅读英文芯片手册开始去了解这款芯片,这样不但会延长开发周期,还会增加不可预知的风险。

3. 开发成本的预测与估算

大多数项目或产品都会有专人负责预测整个过程的开发成本,对于任何一个项目来说,开发成本主要包括人力和物力的支出。

预测开发成本很大程度上取决于经验,这也是为什么大公司一般会委派经验丰富的高级工程师来完成这个任务。除了人力、物力成本外,总结一下以下成本:

1)人力资源成本(开发人员、经理、销售人员、其他行政和其他支持人员)

2)材料成本(硬件材料和损耗,有时需要几个PCB版本才能稳定产品)

3)系统开发及开发工具软件费用

4)硬件工具费用(如示波器、模拟器等)

对于整个项目来说,上面的这些费用可能直接导致产品成本的增加,这其中人工成本是最关键的,尤其是在中国,哈哈。

4.产品开发设计文档(需包含硬件和软件两个方面)

4.1 硬件文档的编写思路

1)首先是需求定义或产品规范:

如果这些是产品的最终目标,那么产品的硬件和软件要求就是技术解决方案的最终目标;硬件和软件要求从定义用户界面和系统功能开始。

2)其次,根据需求,在总体系统定义文档中给出硬件接口的具体定义:

定义硬件最有效的方法是从需求开始,由于硬件必须支持系统中定义的所有功能,所以硬件定义与系统描述密不可分。

例如,我们设计一个定时器的时候(事先需求写明定时器不能连接个人电脑,所以不能用CRT来显示时间),我们只有两种选择,一种是使用发光二极管(LED),一种是使用液晶显示器(LCD)。虽然LCD的显示效果更好,但考虑到定时器会常年位于户外,早期的LCD显示器无法在低温下工作,我们最终选择了LED器件(这整个过程描述了我们的硬件选型思路,硬件选型是和需求紧密联系在一起的)。

3)整体系统描述文档完成后,开始系统设计:

首先,必须细化硬件描述的内容,包括添加工程师能够理解的设计意图,以及软件工程师围绕硬件设计程序时需要用到的硬件信息。

在完成硬件电路板描述文档之后,我们还需要在文档中添加前言,描述系统最初的需求,包括方案的设计思路、方法等。除此之外软件产品的主要技术指标,还要附上软件工程师掌控硬件所需的各种信息,这些信息主要包括以下内容(软件工程所需的信息):

内存和 I/O 端口地址(如有需要可提供内存映射)

●可用内存容量

●状态寄存器各位的定义

●各端口引脚的用途

● 如何驱动外部设备(例如,解释输入定时器电路的时钟频率等)

●软件经理在设计程序时需要知道的其他信息

对于比较复杂的系统,硬件文档常常采用独立的两个部分进行描述;第一部分用来描述硬件指标和工作原理,第二部分主要向软件人员提供程序设计所需要的信息。

4.2 软件文档写作思路

1、软件文档的组织方式与硬件文档类似,软件需求文档的主要内容是定义软件所要实现的功能。在简单项目的设计过程中,软件定义也可以只描述用于一块电路板的软件。对于较为复杂的项目,由于此类项目涉及的软件人员分别负责设计驱动不同硬件部分(同一块电路板)的代码,因此每个软件人员可能针对自己的设计代码指定不同的定义。此类软件描述需要提供以下内容:

(1)讨论实施项目所需的内容,包括需求定义、工程指标、硬件参数等。

(2)软件之间、处理器之间、处理器与其内部设备之间所采用的通信协议的描述:内容应包括缓冲区接口机制、命令/响应协议、信号控制等的详细描述。

(3)用流程图、伪代码或其他可能的方法描述软件实现的方法和过程

2.软件与硬件考虑的区别(这个经验方便技术总监或者其他相关经理参考,因为不管技术经理有多高级,他/她要么是硬件背景,要么是软件背景,要么是非技术背景)

a.软件的灵活性远大于硬件,软件人员了解某种软件的内部格式是一项非常困难的工作。解决办法是详细定义其他程序员需要了解的编程接口的具体内容,以及其他工程人员在实施开发项目时需要用到的技术细节。

b.软件工程师只有在收到硬件描述文档后才知道如何操作系统硬件;硬件人员一般不需要了解软件程序的技术细节。

c.由于软件易变,程序内容常常根据销售人员提供的要求而改变,某些情况下软件文档的内容不能及时反映程序的最新变化。

d.软件往往是工程项目中最后完成的部分,因此其文档往往由于时间不够而不够完整。其实软件文档是否详细、完整,在一定程度上与公司或客户的要求有关。例如,军事或国家项目一般都要求开发商对其软件所实现的所有功能提供全面、详细的文档。

e. 有一条不成文的规定,软件的需求越复杂,需求正确的可能性就越小。这是一条经验法则。我们需要以需求为准则来做我们的工作,而不是陷入个人主义,用我们自己不切实际的想象来对待软件需求。

f. 可以先设计硬件,再围绕硬件编写软件。虽然实际的系统实现过程可能是硬件和软件的并行开发,但软件人员基本上是围绕已经实现的硬件来设计程序;对于更复杂的系统,开发过程可能会重复。

例如,一个项目的硬件工程师和软件工程师可能坐下来开会,决定使用哪种硬件来实现某项功能;软件人员可能提出需要给数据缓冲端口增加内存容量,或者要求某种外部设备接口,以充分利用现有接口程序提供的各种驱动代码。

一般来说,必须在提高软件开发效率和硬件系统的复杂性和成本之间做出权衡。

五位嵌入式系统专家对技术的理解(包括他们多年心血的精华)

许多人认为,嵌入式系统性能的核心因素实际上是根据这种逻辑的,系统设计的问题应成为软件人员的责任,实际上,这种观点反映了如何考虑在设计嵌入产品时进行硬件的功能,这是通过硬件的实现来实现硬件的实现:但它将占据处理器和内存资源)。

For example, for the Arm-based mp3 embedded product we designed here, we can use a professional decoding chip to decode and play mp3 music files, or we can use another method to decode mp3 voice files, allowing the Arm processor to use software control registers to drive headphones or speakers. After decoding the mp3 voice file, the processor sends the decoded data stream to the audio output hardware interface for playback in a certain protocol format.

优点:此解决方案将设备保存在硬件中,降低成本,并且功能也很容易调试(因为它在软件中实现)。

缺点:从另一个角度来看,尽管节省了语音解码芯片,但同时在三个方面增加了成本。

首先,将语音协议解码的代码添加到程序中;

其次,可能有必要添加ROM来存储语音解码协议,从而提高速度。

最后,运行该程序将占用处理器时间和资源。

实际上,在这种情况下,上述成本不会引起任何问题,包括驱动程序的增加,只需要少量讨论此MP3产品案例。

一般而言,更多的功能是由软件实施的,当然,这必须具有足够的处理速度和记忆空间,以实现俗话说的功能;由软件编辑。

尽管软件中的各种功能将增加开发成本软件产品的主要技术指标,如果在构造每个系统组件的情况下,产品的成本将不可避免。

来源|

相关内容 查看全部