前 言 您既可以找到由硬件工程师编写的向硬件工程师们讲授如何设计硬件的书籍,也可以找到由固件工程师编写的向固件工程师们讲授如何设计固件的书籍。本书由固件工程师编写,但是主要面向硬件工程师。 很多工程师在硬件上运行固件时遇到过问题。硬件和固件通常是分别独立设计而成并期望在集成时能够一起工作。但是,这会出现一些问题和缺陷。有时甚至不知道缺陷在何处—— 是硬件还是固件的问题,或者是文档的问题。 有关如何使硬件和固件在一起协同工作的书籍非常少。本书试图填补这一空白。本书阐述了硬件领域和固件领域之间的接口,并提供实践以减少生产嵌入式系统产品所需的时间和工作量。它涵盖了开发硬件/固件接口相关的所有方面,包括开发的过程、顶层设计以及详细设计等。 本书的主要特色是包含300多个最佳实践,可为开发过程及设计的各个方面提供详细的指导。这些最佳实践的应用效果极佳,但是它们只适用于特定的情况。应当根据实际情况详细地对照检查它们。全书处处强调让工程师形成他们自己的最佳实践集。尽管工程师是以这300多个最佳实践作为起点的,但是应当以此为基础不断发展,逐渐形成他们自己的最佳实践集,因为这样做可以增加其所在组织的项目获得成功的几率。 为了帮助工程师理解这300多个最佳实践,同时为了帮助他们创建自己的最佳实践集,本书列出了七项原则作为纲领性指导。即使在某些情况下没有特别合适的最佳实践,这些原则也能帮助工程师遵循正确的方向工作。依靠这七项原则和300多个最佳实践,将提高设计小组成功生产嵌入式系统产品的能力。 本书概述 下面的各章概述提供本书内容的概述,可以帮助读者浏览全书。 第1章:该章为全书打下基础。讨论各种类型的硬件以及它们对硬件/固件接口的影响。该章定义了原则和最佳实践、目标读者以及产品生命周期。此外,还展示了一个贯穿全书的案例研究。 第2章:该章介绍了七项原则并高度概括了本书的讲述方向,以及本书按照这个方向来讲述的原因。理解这些原则是理解列出的实践为什么是最佳实践的关键。 第3章:硬件工程师和固件工程师之间合适而充分的合作是影响嵌入式产品成功的关键因素。该章定义了在合作中的角色和过程。 第4章:在项目开始之前,必须做计划以确定并同意新产品采取的研究方向。该章涵盖了在计划新项目时所需考虑的几个方面。 第5章:大多数被指派去编写文档的工程师都不喜欢这项工作。同时,大多数工程师都因为阅读不完整且不正确的文档而迷糊。该章讨论文档的类型、何时编写文档、如何检查文档以及文档应包含哪些类型的内容。 第6章:该章介绍了可以完成在其自己所在领域内所有任务的组件的概念,并且讨论了超级组件的优点以及如何建立并根据需要使用超级组件。此外,还讨论了实际实现时的局限以及处理方法。 第7章:该章讨论设计的各个方面,例如事件、上电顺序、通信及控制。 第8章:寄存器是硬件与固件间的基本接口。该章详细讨论寄存器,包括地址、数据位的位置以及数据位的类型。 第9章:由于业界使用的中断设计缺乏一致性,因此该章着重于详细讨论如何管理硬件产生并传递至固件的中断。该章还将提议一种中断标准并对此展开详细讨论。 第10章:通常,很少考虑错误以及如何修复错误。该章讨论必要的设计元素以便固件能中止硬件的操作、恢复及继续处理。 第11章:逻辑分析仪无法探测芯片的内部,但是了解芯片内部发生的情况对于确保固件能在硬件上正常运行至关重要。在芯片内安放一些固件可访问的钩子能使固件获取信息供工程师分析。该章将介绍许多可以运用的钩子。 第12章:该章总结全书,还包含几个卡通图画来演示书中所讲述的概念。 附录 附录A:该附录将本书中所有的最佳实践汇聚于此。 附录B:该附录解释和说明第5章涉及的文档模板。 附录C:对于必须共同完成某项目的硬件和固件工程的学生该附录就如何将本书中的知识传达给他们提供了一些建议。 附录D:由于本书涉及两个不同的工程学科:硬件工程和固件工程,因此本附录涵盖了其中一个领域不为另一个领域所理解的术语。