
1. 项目概述与核心价值如果你和我一样是从8051、AVR或者ARM Cortex-M系列单片机一路玩过来的第一次接触Motorola M•CORE架构的MMC2107微控制器时可能会觉得既熟悉又陌生。熟悉的是嵌入式开发那套“三板斧”写代码、下程序、调硬件陌生的则是这套诞生于上世纪末、面向高性能嵌入式应用的RISC核心以及其配套的专用开发工具链。CMB2107控制器与内存板就是Motorola为MMC2107量身打造的一款“官方开发套件”它远不止是一块简单的评估板。在我经手过的众多老式开发板里CMB2107的设计思路非常典型也极具教学意义。它不像现在许多开源开发板那样追求极简和易用而是完整地呈现了一个工业级嵌入式系统的雏形核心MCU、程序存储器FLASH、数据存储器SRAM、可编程逻辑CPLD用于地址译码和系统控制、丰富的调试接口OnCE、RS232、以及一个模块化的扩展总线MAPI。理解并配置好这块板子你收获的不仅仅是如何让一个特定的MCU跑起来更是对“一个完整的嵌入式系统是如何被组织和启动的”有了透彻的认识。这对于理解更复杂的系统或者进行底层驱动、Bootloader开发都是极其宝贵的经验。简单来说CMB2107的核心价值在于它提供了一个从“裸金属”层面理解并操控一个32位RISC微控制器系统的绝佳实验平台。通过手动配置开关来定义内存映射、总线宽度和启动模式通过最基础的串口监控程序Picobug进行机器码级的调试这个过程能让你清晰地看到每一行C代码或汇编指令是如何最终转化为总线上的电信号去访问特定的内存地址或控制外设的。这份“掌控感”和“透视能力”是使用现代集成度更高的开发环境所难以获得的。2. 开发板核心硬件解析与配置逻辑2.1 板载资源深度解读拿到CMB2107第一眼会被它板载的丰富资源所吸引。我们逐一拆解理解每个部分在系统中的作用核心MCU (U10): MMC2107这是一颗基于M•CORE v2架构的32位RISC处理器。它的特点是指令集精简、功耗相对较低且内置了OnCEOn-Chip Emulation调试模块这是通过板载J7接口进行底层调试的关键。处理器通过外部总线接口EBI与板上的存储器和CPLD连接。存储器系统:2MB FLASH (U?)用于存储固化程序如Picobug监控程序、用户应用程序。在嵌入式系统中FLASH相当于PC的硬盘程序掉电不丢失。CMB2107的FLASH通过芯片选择信号Chip Select被映射到特定的地址空间。2MB FSRAM (U?)快速静态RAM用于程序运行时的变量、堆栈和动态数据。其访问速度远快于FLASH是代码高速执行的舞台。它同样通过芯片选择信号映射到地址空间。手册中提到它可配置为16位或32位操作这直接影响数据总线的有效宽度和访问效率。“大脑”外的“小脑”Xilinx CPLD (U1)。这是CMB2107设计的精髓之一。CPLD在这里扮演了“地址译码器”和“胶合逻辑”的角色。MCU发出的地址信号经过CPLD的译码产生对应FLASH、SRAM的片选信号。同时用户选项开关S1, S2的状态也被CPLD读取并据此改变系统的内存映射、总线配置等行为。它实现了硬件层面的灵活配置。调试与通信接口:OnCE接口 (J7)这是Motorola处理器特有的、功能强大的硬件调试接口。通过专用的调试器如EBDI它可以实现硬件断点、实时跟踪、寄存器查看等高级调试功能不占用任何用户资源。双RS232串口 (J57, J58)这是最传统也是最直接的调试和通信手段。J58Port A通常用于连接主机运行Picobug或SysDS LoaderJ57Port B可留给目标应用与其他设备通信。逻辑分析仪接口 (J5, J17, J18)提供了直接探测地址、数据、控制总线的能力是进行硬件时序分析、排查棘手总线故障的终极武器。模块化多功能接口 (MAPI)位于板子顶部P1-P4和底部J1-J4的这组连接器是CMB2107扩展能力的体现。它可以与Motorola的其他平台板如MPFB1200无缝堆叠扩展出更多的I/O、存储或专用外设构建更复杂的原型系统。2.2 用户选项开关配置详解S1和S2这两个DIP开关是配置CMB2107行为的关键其每一个拨动都直接改变了硬件系统的“基因”。理解其配置是玩转这块板子的第一步。开关S1系统基础配置BOOT EX/IN (启动源选择)ON (默认)从“芯片选择0”CS0控制的外部存储器启动。在此模式下内部FLASH被禁用。这意味着CPU上电后会从CS0片选信号所对应的地址空间根据SWAP 02/20的设置可能是FLASH或SRAM读取第一条指令。OFF在**主模式Master Mode下从MCU内部的FLASH启动在仿真模式Emulation Mode**下从“芯片选择1”CS1控制的内存启动。这个开关决定了处理器复位后PC指针的初始位置。DATA 32/16 (数据总线宽度)ON (默认)配置外部数据总线为32位宽。这是发挥M•CORE 32位性能的标准模式。OFF配置外部数据总线为16位宽。此时MCU数据总线的低16位D15-D0可用作通用I/O口。这个设置直接影响SRAM的访问方式。在16位模式下访问一个32位数据需要两次总线操作。SWAP 02/20 (内存映射交换)ON (默认)CS0控制外部FLASHCS2控制外部SRAM。这是手册中的“默认内存映射”。OFFCS0控制外部SRAMCS2控制外部FLASH。这是“交替内存映射”。这个设置会彻底改变FLASH和SRAM的物理地址在编写链接脚本或直接操作内存时必须特别注意。开关S2固件与模式选择M1, M0 (MCU操作模式)ON, ON (默认)主模式Master Mode。MCU从内部或外部存储器直接取指执行是独立的运行模式。ON, OFF仿真模式Emulation Mode禁用CS1上的FLASH仿真。CS1被映射到其他内存如SRAM用于调试。OFF, ON单芯片模式Single Chip Mode。MCU仅使用内部资源外部总线无效。此模式下用户LED和开关通过MCU的Port H控制。OFF, OFF仿真模式启用CS1上的FLASH仿真。CS1被映射到FLASH用于模拟从FLASH启动进行调试。USR0, USR1, USR2 (上电运行固件) 这三个开关的组合决定板子上电或复位后立即跳转执行哪一段固件代码。其地址由CPLD根据开关状态映射到特定地址供CPU读取。OFF, OFF, OFF运行内置自检程序。OFF, ON, OFF(默认)运行Picobug监控程序。这是我们最常用的调试模式。ON, OFF, OFF运行编程器固件用于SysDS Loader烧录FLASH。ON, ON, OFF运行MetroTRK调试器固件。ON, ON, ON运行用户代码。即从用户指定的启动地址开始执行。实操心得开关配置的“生效时机”手册中特别强调BOOT EX/IN、DATA 32/16、SWAP 02/20、M0、M1这几个开关的配置必须在下次复位或重新上电后才能生效。这是因为这些配置直接影响CPLD的上电初始化逻辑。而USR0-2开关的状态则可能被运行中的程序通过MMIO内存映射I/O实时读取。因此更改配置后务必按一下复位键S3或重新上电这是一个非常容易忽略但至关重要的步骤。2.3 电源与测量点板上的多个两针跳线帽J28, J37, J38, J39, J48不仅是电源通路也是关键的测量点。正常使用时务必确保所有跳线帽正确安装否则相应模块会断电。需要测量电流时必须先断电然后取下对应跳线帽将电流表串联接入两个针脚再上电测量。测量完毕先断电再恢复跳线帽。例如想测量MCU核心3V的功耗就操作J28。3. 系统连接、自检与内存映射剖析3.1 完整系统连接步骤断电操作在进行任何连接前确保CMB2107和你的电脑处于断电状态。串行调试连接方案A最常用使用RS232串口线连接CMB2107的J58 (Port A)到你电脑的串口。这将用于Picobug或SysDS Loader通信。方案B高级调试如果你有Motorola EBDI调试器用14芯电缆连接CMB2107的J7 (OnCE接口)到EBDI再将EBDI连接到电脑。此时无需使用J58。可选扩展连接第二串口如果用户程序需要使用串口可将J57 (Port B) 连接到其他设备。平台板扩展若使用MPFB1200等平台板需通过MAPI接口堆叠。对齐板角上的直角三角形丝印标记然后将CMB2107垂直压下确保底部J1-J4与平台板顶部P1-P4紧密对接。逻辑分析仪如需抓取总线时序将Mictor接口的逻辑分析仪探头连接到J5, J17, J18任一接口。供电单独使用CMB2107将12V/0.5A电源适配器连接到J61拨动S4到ON。电源指示灯DS6应亮起。使用平台板给平台板上电CMB2107通过MAPI取电DS6同样应亮起。保险丝检查如果DS6不亮首先检查电源其次检查板载保险丝F1靠近J61它可能因反接或短路熔断需更换为BUS GMA-1.5A或兼容型号。3.2 执行板载自检在首次使用或怀疑硬件有问题时运行自检程序是很好的习惯。断电将S2的USR0,USR1,USR2三个子开关全部拨到OFF。上电。DS6亮自检程序自动运行。观察用户LEDDS2-DS5。它们会按照手册中Table 2-3的序列闪烁分别代表对SRAM进行8位、16位、32位的写和读测试。测试完成后四个LED会依次DS5, DS4, DS3, DS2单独闪烁几次然后全部熄灭。全部熄灭表示自检通过。如果任何LED常亮不灭表示对应的内存测试失败需要联系技术支持或检查硬件。自检完成后务必断电将S2重新设置为需要的模式如Picobug模式OFF, ON, OFF再上电进行后续开发。3.3 内存映射深度解析内存映射是理解嵌入式系统如何寻址物理存储器的核心。CMB2107的映射关系主要由SWAP 02/20开关和CPLD的译码逻辑决定。默认映射 (SWAP 02/20 ON) 这是最常用的配置符合直觉FLASH在低地址SRAM在高地址。0x8000_0000 - 0x801F_FFFF2MB CMB FLASH(由CS0控制)。其中前128KBSector 0-3预装了系统软件如Picobug后1920KBSector 4-18留给用户代码。0x8100_0000 - 0x811F_FFFF2MB CMB SRAM(由CS2控制)。前41KB保留给系统后2007KB供用户使用。两个关键的MMIO地址0x817F_FFFC只读字节。读取的是S2上USR2, USR1, USR0三个开关的实时状态位D31, D30, D29。程序可以据此判断当前的启动配置。0x817F_FFFD只写字节。用于控制4个用户LED (DS2-DS5)和FLASH编程电压。向对应位写1点亮LED写0熄灭。特别注意D20位置1使能FLASH编程/擦除电压Vpp5V置0禁用。误操作此位可能导致意外写入FLASH交替映射 (SWAP 02/20 OFF) 此模式下SRAM和FLASH的片选信号被交换。0x8000_0000 - 0x801F_FFFF映射到CMB SRAM。0x8100_0000 - 0x811F_FFFF映射到CMB FLASH。MMIO地址变为0x807F_FFFC和0x807F_FFFD。与MPFB1200平台板联合映射 当CMB2107堆叠在MPFB1200上时内存空间得到极大扩展。在默认设置下会形成连续的FLASH和SRAM空间0x8000_0000 - 0x807F_FFFF8MB FLASH(CMB的2MB MPFB的6MB)统一由CS0控制。0x8100_0000 - 0x817F_FFFF8MB SRAM(CMB的2MB MPFB的6MB)主要由CS2控制MPFB的SRAM可通过跳线选择CS1。这种映射使得编写大型应用程序时代码和数据可以拥有连续、广阔的空间简化了链接脚本的编写。注意事项链接脚本与内存映射的匹配在集成开发环境如CodeWarrior中编写程序时链接脚本Linker Script必须与你设定的内存映射严格一致。如果你使用默认映射却将代码段.text链接到0x81000000SRAM区程序将无法从FLASH启动。务必根据S1开关的配置调整链接脚本中的MEMORY区域定义确保ROM或FLASH区域的起始地址与BOOT EX/IN和SWAP 02/20开关所决定的启动地址相匹配。3.4 芯片选择1CS1仿真模式详解这是CMB2107调试功能的关键。当M1OFF, M0OFF时板子进入仿真模式此时CS1的行为可以被“仿真”到板载的SRAM或FLASH上主要用于调试Bootloader或需要从特定地址启动的代码。Case I (SWAP 02/20ON)CPU地址0x0000_0000 – 0x0001_FFFF(CS1空间) 被映射到CMB SRAM的0x8102_0000 – 0x8103_FFFF。Motorola系统软件会为CS1配置1个等待状态使其行为“类似”FLASH但比真实FLASH稍慢。这样你可以将一段代码下载到这个SRAM区域并让CPU“以为”自己是从FLASH地址0启动的方便调试启动代码。Case II (SWAP 02/20OFF)CPU地址0x0000_0000 – 0x0001_FFFF被映射到CMB FLASH的0x8102_0000 – 0x8103_FFFF。这用于仿真从FLASH启动。注意此配置下Motorola的系统软件如Picobug将无法使用必须通过EBDI等OnCE调试器进行。Case III (M1OFF, M0ON,SWAP 02/20ON)CS1不映射到任何CMB2107板载内存而是被禁用配置为3个等待状态。这样CS1就可以留给扩展板如MPFB1200上的内存或外设使用实现了资源的灵活分配。4. 核心调试工具实战Picobug监控程序4.1 Picobug环境搭建与启动Picobug是一个驻留在板载FLASH中的简易监控程序它通过串口与主机交互提供最基本的内存和寄存器查看、修改、程序下载和运行控制功能。虽然原始但它是理解底层调试的绝佳工具。硬件连接确保CMB2107的J58通过串口线连接至电脑S2设置为Picobug模式 (USR0OFF, USR1ON, USR2OFF)。终端软件配置在电脑上打开终端软件如Tera Term、PuTTY或古老的HyperTerminal。新建一个串口连接关键参数设置为波特率19200数据位8奇偶校验无停止位1流控制无上电与连接给CMB2107上电然后在终端软件中按几次回车键。如果一切正常你会看到picobug提示符。如果没有检查串口号、波特率以及S2开关设置。4.2 常用Picobug命令实战解析一旦进入picobug你就可以输入命令了。输入?或he可以查看所有命令列表。查看与修改寄存器# 显示所有寄存器 rd # 显示特定寄存器如程序计数器pc rd pc # 修改寄存器的值例如将r0设置为0x12345678 rm r0 0x12345678注意直接修改PC寄存器可以强制跳转到指定地址但可能破坏程序流程。查看与修改内存# 以字节形式显示从0x81000000开始的16个字节内存 md 0x81000000 ;b # 以字4字节形式显示从0x81001000开始的内存 md 0x81001000 ;w # 显示从0x81002000到0x8100200F的内存范围 md 0x81002000 0x8100200F # 修改0x81003000地址处的字节为0xAA mm 0x81003000 0xAA ;b # 进入交互式修改模式从上次查看的地址开始 mm技巧使用;b,;h,;w,;i来指定显示格式字节、半字、字、指令对于分析代码段非常有用。控制程序执行# 从当前PC地址开始运行 g # 从指定地址如0x8100C000开始运行 g 0x8100C000 # 单步执行一条指令Step Over t # 或 s # 设置断点于0x8100D11E br 0x8100D11E # 列出所有断点 br # 删除0x8100D11E处的断点 nobr 0x8100D11E # 删除所有断点 nobr重要提示Picobug的断点是软件断点通过替换目标地址的指令为TRAP异常指令实现。这意味着你无法在只读存储器如FLASH中设置断点只能在SRAM中设置。下载程序# 下载S-record格式文件到SRAM地址由文件内指定 lo输入lo命令后Picobug会等待接收数据。此时需要在终端软件中使用“发送文本文件”功能选择你的.srec或.mot文件。下载完成后会显示“Done downloading”以及程序入口地址。务必使用“文本”模式发送而不是“二进制”或“RAW”模式。4.3 一个完整的调试会话示例假设我们有一个简单的LED闪烁程序编译生成了blink.srec文件。启动Picobug连接成功。下载程序输入lo然后在终端软件中发送blink.srec文件。查看入口点下载完成后提示“The target PC is set to 0x8100C000”。我们可以用rd pc确认PC已指向该地址。反汇编查看代码md 0x8100C000 ;i可以查看开头的几条机器指令验证是否是我们预期的代码。设置断点假设我们想在主循环开始处0x8100C100设断点br 0x8100C100。运行程序输入g。程序开始运行LED开始闪烁。触发断点当程序执行到0x8100C100时会自动停止Picobug会显示“At breakpoint!!”并打印出所有寄存器的状态。此时可以检查变量内存、寄存器值。单步跟踪输入t或s可以一步一步执行观察程序流程。继续运行输入g程序从断点处继续运行。结束调试可以按开发板上的复位键S3PC会复位但断点可能依然存在。最干净的方式是断电然后重新上电进入Picobug。避坑指南Picobug的局限性无源码级调试Picobug只能看到机器码和地址无法直接关联C源码行。调试复杂程序时非常困难。断点数量有限受限于其实现方式可能只支持少数几个断点。无法直接烧写FLASHPicobug的lo命令只能下载到SRAM。要将程序固化到FLASH必须使用下一节介绍的SysDS Loader。依赖串口速度慢大量数据传输或单步调试时响应速度受限于19200波特率。5. 系统开发软件SysDS Loader使用指南Picobug用于调试运行在SRAM中的程序而SysDS Loader则是将程序永久烧录到FLASH的工具也可以用于读取、校验、擦除FLASH内容。5.1 SysDS Loader连接与启动硬件准备连接CMB2107的J58到电脑串口或通过EBDI连接J7。板卡配置将S2开关设置为编程器模式(USR0ON, USR1OFF, USR2OFF)。复位板卡按下S3复位键。运行软件在电脑上启动Motorola SysDS Loader程序。软件会自动尝试连接板卡。如果首次运行或找不到算法文件programmer2107.rec会弹出错误提示需要你手动指定该文件的位置通常在安装目录或随板光盘中。5.2 核心功能操作流程SysDS Loader的图形界面相对直观主要功能如下下载到FLASH (Download)这是最常用的功能。选择编译好的S-record文件软件会将其编程到板载FLASH的指定地址。关键步骤在软件中选择目标文件。指定FLASH中的起始地址必须与链接脚本中定义的ROM区域起始地址一致例如默认映射下的0x80020000避开系统软件占用的前128KB。点击“Download”。软件会先擦除目标扇区然后编程最后校验。从FLASH上传到文件 (Upload)用于备份FLASH中的内容。可以读取整个FLASH或指定范围保存为二进制或S-record文件。校验 (Verify)比较FLASH中的内容与本地文件是否一致用于验证烧录是否正确。显示内存 (Display Memory)以十六进制形式查看FLASH或SRAM指定区域的内容。擦除FLASH (Erase)可以擦除整个FLASH芯片或单个扇区。警告擦除操作不可逆且会删除包括Picobug在内的所有系统软件如果误擦需要通过EBDI等工具重新烧写底层监控程序。空白检查 (Blank Check)检查指定FLASH扇区是否已被擦除全为0xFF。5.3 结合Picobug与SysDS Loader的开发流程一个标准的开发调试流程通常是这样的编写代码在CodeWarrior或其他IDE中编写C/汇编程序。编译链接生成可执行的S-record文件.srec或.mot链接地址设为SRAM区域如0x8100C000。SRAM调试板卡S2设为Picobug模式。用Picobug的lo命令将程序下载到SRAM。用Picobug的g,br,t等命令进行调试修复逻辑错误。FLASH烧录与测试调试无误后修改链接脚本将程序链接到FLASH地址如0x80020000。重新编译生成新的S-record文件。板卡S2设为编程器模式复位。用SysDS Loader将程序烧录到FLASH。板卡S2设为用户代码模式 (USR0ON, USR1ON, USR2ON) 或Picobug模式如果程序从Picobug跳转复位。程序应从FLASH自动运行。此时可以测试脱机运行是否正常。迭代优化如需修改重复步骤1-4。6. 高级主题与原型开发6.1 利用原型区域进行扩展CMB2107板中央的大片穿孔板区域是为用户扩展电路设计的。你可以焊接额外的芯片、传感器、接口电路等。电源引脚区域顶部有一排通孔提供了APWR模拟电源、AGND模拟地、3.3V和5V电源方便为外接电路供电。接地区域左右两侧的整列通孔都是地GND。信号连接你需要通过飞线将自定义电路的信号连接到板子提供的测试点或通过J51、J52、J53这三个未焊接的连接器站点引出。手册第4章提供了这些连接器站点的完整引脚定义信号名称、对应网络你可以自行焊接2x10 pin的排针如Berg 69192-620来引出这些信号例如额外的GPIO、中断线、总线信号等。6.2 内存映射I/O (MMIO) 编程实战如前所述地址0x817F_FFFD或交替映射下的0x807F_FFFD是一个神奇的只写地址。通过向它写入数据可以直接控制硬件。示例用C语言点亮DS2 LED// 定义MMIO寄存器地址假设默认内存映射 #define MMIO_CONTROL_REG (*(volatile unsigned char *)0x817FFFFD) void led_on(void) { // 将bit 16 (对应DS2) 设置为1其他位保持0 // 注意此操作是直接写入会覆盖其他位DS3-DS5和PROG_V // 安全做法是先读取但该地址只写无法读或使用位操作确保不影响其他位 // 由于是只写寄存器我们通常需要全局维护一个shadow变量来记录当前状态 // 这里为了简单演示直接写入 MMIO_CONTROL_REG 0x01; // 二进制 0000 0001即bit161点亮DS2 } void led_off(void) { MMIO_CONTROL_REG 0x00; // 关闭所有LED } // 更安全的做法使用一个变量跟踪状态 static unsigned char led_shadow 0x00; void led_toggle_ds2(void) { led_shadow ^ 0x01; // 翻转DS2对应的bit MMIO_CONTROL_REG led_shadow; // 更新到硬件寄存器 }警告在对0x817F_FFFD进行写操作时务必小心bit 20 (PROG_V)。除非你确实打算进行FLASH编程或擦除否则永远不要将它置1。意外置位可能导致对FLASH的误写损坏程序。6.3 常见问题排查与解决实录问题上电后无反应电源灯DS6不亮。排查检查12V电源适配器是否正常检查保险丝F1是否熔断检查电源开关S4是否在ON位置检查是否通过MAPI从其他板卡取电若是检查上级板卡供电。解决更换保险丝或电源。问题连接Picobug时终端无picobug提示符。排查开关设置确认S2是否为OFF, ON, OFF。串口配置确认波特率19200、数据位8、奇偶校验无、停止位1、流控无全部正确。串口线确认是直连线还是交叉线CMB2107的串口通常是DTE设备连接PC也是DTE可能需要交叉线或使用直连线配合NULL Modem适配器。最稳妥的方法是使用万用表测量或查阅板卡原理图确认J58引脚定义。终端软件尝试按回车键。有些终端需要发送一个字符来激活连接。解决逐一检查上述项目最可能是开关设置或串口线问题。问题使用SysDS Loader时无法连接或烧录失败。排查模式确认S2设置为编程器模式 (ON, OFF, OFF)并已复位。算法文件确认programmer2107.rec文件路径正确且文件未损坏。串口占用关闭所有可能占用该串口的终端软件如Picobug。FLASH保护某些FLASH扇区可能被写保护。确认你烧录的地址范围是可写的用户扇区Sector 4-18。解决重启软件和板卡确保独占串口访问权。问题程序在SRAM中调试正常烧录到FLASH后不运行。排查启动模式烧录后S2是否切换到了用户代码模式 (ON, ON, ON) 或正确的启动模式程序是否链接到了FLASH的正确地址启动代码你的程序是否有正确的启动代码设置堆栈指针、初始化.data段、清零.bss段在SRAM中调试时这些工作可能由Picobug或加载器代劳了但直接从FLASH启动则需要程序自己完成。时钟初始化MCU的时钟PLL是否在启动代码中正确初始化FLASH访问速度可能与SRAM不同。解决检查链接脚本和启动文件。使用仿真模式CS1仿真来调试从FLASH启动的过程。问题逻辑分析仪抓不到总线信号。排查确认逻辑分析仪探头正确连接到J5, J17, J18并且接地良好。确认分析仪的采样率足够高至少是总线时钟频率的5倍以上。确认在CPLD或软件中没有禁用相关总线的输出驱动。解决检查板卡原理图确认你测量的信号线确实在所使用的连接器上。有时需要配置CPLD或MCU的引脚复用功能将内部总线信号输出到这些测试点上。驾驭CMB2107这样的经典开发板就像学习驾驶一辆手动挡汽车。虽然比自动挡现代集成开发环境繁琐但你能更深刻地理解引擎MCU、传动总线和控制系统内存映射是如何协同工作的。每一次开关的拨动、每一次内存地址的计算、每一次通过简陋的串口命令与机器对话都是对嵌入式系统本质的一次触摸。这份在“裸机”上构建和控制系统的经验是应对未来更复杂、更集成的嵌入式平台时那份从容与自信的基石。当你在调试一个基于Linux或复杂RTOS的系统时你会感激曾经在CMB2107上清晰地看到过每一个比特是如何在总线上流动的。