
1. 项目概述为什么我们需要一颗集成了CAN收发器的MCU在工业控制、楼宇自动化或者一些对成本敏感但要求可靠性的消费电子领域里打拼过的工程师大概都绕不开CAN总线。这东西好抗干扰能力强实时性也不错是构建分布式控制网络的骨架。但每次画板子总得在MCU旁边再放一颗CAN收发器芯片比如经典的TJA1050或者SN65HVD230。这颗芯片不贵但也不便宜更重要的是它占地方还得多考虑一堆外围的匹配电路、共模电感PCB布局布线也得小心翼翼生怕电磁兼容EMC出问题。一套下来BOM成本、设计复杂度和板子面积都上去了。所以当我第一次接触到NXP的LPC11C00系列时感觉就像发现了一个“作弊码”。它直接把CAN收发器塞进了微控制器MCU的封装里用一颗芯片的钱干了两颗芯片的活。这颗芯片的核心是ARM Cortex-M0内核跑在50MHz搭配16KB或32KB的Flash以及8KB的SRAM。听起来配置不算顶配但对于大量的CAN节点设备——比如产线上的一个传感器模块、一台家电的电机控制器、或者一个楼宇的灯光面板——来说这性能绰绰有余甚至有些富余。它的目标很明确为基于CAN的应用提供一个低成本的入口。这不是要替代那些需要复杂逻辑和大量计算的高端MCU而是精准地切入那些被传统“MCU外置收发器”方案的成本和复杂度所阻碍的应用场景。对于开发者而言这意味着更少的元器件采购、更简单的电路设计、更小的PCB面积以及最终更快的产品上市时间。今天我就结合自己的使用经验来拆解一下这个系列特别是带集成收发器的LPC11C22/C24型号看看它到底怎么用以及在实际项目中需要注意哪些坑。2. 芯片深度解析LPC11C00系列的内外乾坤要用好一颗芯片光看广告词不行得把它里里外外摸清楚。LPC11C00系列虽然都顶着同一个名头但内部还是有差异的选型是第一步。2.1 型号选择与关键差异从官方提供的选型表可以清晰地看到四个主要型号LPC11C12, LPC11C14, LPC11C22, LPC11C24。它们的核心区别在于两点Flash大小和是否集成CAN收发器。LPC11C12/C14不集成片内CAN收发器。它们只有C_CAN控制器。这意味着如果你用这两款芯片依然需要像传统方案一样在外部连接一颗独立的CAN收发器芯片如NXP自家的TJF1051也就是TJA1051的工业级版本才能连接到物理CAN总线上。C12是16KB FlashC14是32KB Flash。LPC11C22/C24集成了片内高速CAN收发器。这是本系列最大的卖点。你只需要把芯片的CANH和CANL引脚直接拉到总线上再配上必要的终端电阻通常120欧姆和基本的保护电路如TVS管即可。同样C22是16KB FlashC24是32KB Flash。注意这个集成收发器是“高速”型的符合ISO 11898-2标准最高速率支持到1Mbps足以应对绝大多数工业现场总线应用。但它不是“容错”或“低速”类型的如果你的应用场景是特殊的容错CAN如一些汽车车身网络可能需要额外注意或选择其他方案。除了这个最核心的区别它们在GPIO数量上也有细微差别C12/C14有42个GPIO而C22/C24是36个。这是因为集成收发器占用了一些引脚资源。不过对于大多数CAN节点设备来说36个IO已经非常充裕了。2.2 核心外设与性能解读这颗基于Cortex-M0的芯片其外设配置是典型的“小而精”思路完全围绕着一个智能节点设备的需求来打造。1. 通信接口为连接而生这是它的强项。除了集成的CAN带CANopen驱动这个主角它还配备了1个UART支持分数波特率发生器这意味着你可以非常精确地设置波特率减少通信误差。常用于连接调试终端、GPS模块或与其他微控制器进行简单串口通信。2个SPI控制器带FIFO支持多协议。这在需要连接外部Flash、SD卡、显示屏或者多个传感器时非常有用。两个SPI可以让你灵活地进行主从设备扩展。1个I2C接口支持Fast Mode Plus最高1Mbps。用于连接EEPROM、各种I2C传感器温湿度、压力等、IO扩展芯片等是构建小型传感器网络的利器。2. 模拟与数字控制10位ADC8个通道最高400ksps的采样率对于电机电流采样、电池电压监控、模拟传感器读取等任务完全够用。±1 LSB的差分非线性保证了不错的线性度。丰富的定时器2个32位和2个16位通用定时器/计数器提供了多达13个匹配输出和4个捕获输入。这意味着你可以轻松实现多路PWM输出控制电机、LED调光、输入捕获测量脉冲宽度、频率以及复杂的时间调度逻辑。还有一个独立的24位系统定时器SysTick和看门狗定时器WDT。3. 时钟与电源管理时钟系统灵活内部12MHz RC振荡器精度1%外部1-25MHz晶体振荡器可编程看门狗振荡器以及锁相环PLL。你可以根据应用在精度和功耗之间做权衡。比如在深度睡眠时使用内部RC振荡器快速唤醒在需要高精度通信如UART、CAN时切换到外部晶振。电源管理单元PMU支持睡眠、深度睡眠和深度掉电三种低功耗模式。配合掉电检测BOD和上电复位POR能很好地构建电池供电或对功耗有要求的设备。4. 存储与代码密度Flash和SRAM16/32KB 8KB的组合在今天看来不大但得益于Cortex-M0的Thumb-2指令集其代码密度非常高。官方数据是比传统8/16位MCU节省40-50%的代码空间。这意味着你能用更小的存储空间实现相同的功能。内置ROM中的CANopen驱动这是一个巨大的优势。它不是一个简单的寄存器操作库而是符合CiA标准的CANopen协议栈驱动以API形式提供。它被固化在ROM里不占用你的Flash空间相当于省了最多8KB并且提供了通过CAN总线进行安全引导加载Bootloader的功能。这对于现场固件升级FOTA来说是开箱即用的福利。3. 硬件设计实战从原理图到PCB的避坑指南拿到一颗集成度高的芯片硬件设计会简单很多但绝不意味着可以掉以轻心。下面以LPC11C24带集成收发器为例说说设计时的关键点。3.1 最小系统与电源设计LPC11C00是单电源供电典型电压为3.3V。虽然内核电压由内部稳压器产生但外部供电的稳定性至关重要。电源去耦在每个电源引脚VDD附近必须放置一个100nF的陶瓷电容并且尽可能靠近引脚。通常建议在芯片的电源入口处再增加一个10uF的钽电容或电解电容以应对瞬间的大电流需求。对于模拟部分如ADC参考电压VDDA去耦要求更严格建议使用单独的LC滤波并与数字电源隔离。复位电路虽然芯片内部有POR但在复杂工业环境中一个外部的手动复位按钮和简单的RC复位电路如10k上拉电阻100nF电容到地仍然是推荐做法便于调试和应对极端情况。调试接口它支持Serial Wire DebugSWD只需要两根线SWDIO SWCLK和一根地线即可进行调试和编程比传统的JTAG节省引脚。务必把这两个引脚以及复位引脚引到调试连接器上。3.2 集成CAN收发器外围电路设计这是设计的核心也是相比传统方案简化最多的部分。你不再需要为独立的收发器芯片设计电源、模式控制等电路。引脚连接找到芯片的CANH和CANL引脚。对于LPC11C22/C24这两个引脚是直接用于连接CAN总线的。注意它们不再是普通的GPIO或复用功能引脚而是专用的模拟收发器接口。终端电阻CAN总线必须在两端各接一个120欧姆的终端电阻以消除信号反射。对于作为中间节点的设备通常不接终端电阻。所以在你的设备原理图上终端电阻应该设计为可选项比如用一个0欧姆电阻或跳线帽根据设备在网络中的实际位置来决定是否焊接。总线保护电路这是保证可靠性的关键。CAN总线可能暴露在恶劣的工业环境中会面临浪涌、静电放电ESD和电磁干扰EMI。ESD保护在CANH和CANL对地之间各放置一个ESD保护二极管如SMBJ5.0CA。这能吸收瞬间的高压静电。共模滤波如果环境干扰特别强可以在总线进入收发器之前增加一个共模电感。这能有效抑制共模噪声。隔离考虑集成的收发器本身是非隔离的。如果你的设备需要与高压侧或其他地电位不同的网络进行CAN通信必须额外使用隔离CAN模块内部集成了隔离电源和隔离式收发器。此时LPC11C24的集成收发器优势就不明显了你可能需要选择不集成收发器的C12/C14或者直接使用带隔离的收发器模块。PCB布局布线CAN信号线CANH和CANL应作为一对差分线走线。尽量保持线宽一致、线距恒定并远离高频噪声源如开关电源、晶振、电机驱动线。在空间允许的情况下最好在差分线对周围铺地铜皮进行屏蔽。电源完整性为模拟部分包括CAN收发器提供干净、稳定的电源至关重要。确保电源走线足够宽回流路径顺畅。实操心得我第一次用LPC11C24画板时犯了一个想当然的错误我把CANH/CANL像普通IO一样走线很长并且绕过了晶振。结果上电后通信极不稳定误码率很高。后来缩短走线并严格按差分线规则处理问题立刻消失。教训是即使收发器集成在内部其外部引脚到总线连接器的走线依然是高速差分信号必须按高速信号规则对待。3.3 时钟与外围器件连接晶振选择虽然内部RC振荡器精度有1%但对于需要高精度定时或UART/CAN通信稳定的场合强烈建议使用外部晶振。选择一个8MHz或12MHz的晶体搭配两个20pF左右的负载电容具体值参考晶体手册连接到OSC_IN和OSC_OUT引脚。记得在晶体下方铺地并远离其他数字信号线。ADC参考源如果对ADC精度要求高不要直接使用VDD作为参考电压VDDA。最好使用一颗独立的低压差线性稳压器LDO为VDDA引脚供电或者至少使用一个LC滤波器从VDD中分离出干净的模拟电源。同时VSSA模拟地应通过一个磁珠或0欧电阻单点连接到数字地VSS。4. 软件开发与环境搭建硬件准备就绪后软件开发就是让芯片“活”起来的关键。LPC11C00的生态比较成熟有多种选择。4.1 开发工具链选择MCUXpresso IDE这是NXP官方基于Eclipse打造的免费集成开发环境对NXP的MCU支持最好。它集成了GCC编译器、调试器和大量的中间件、驱动库。对于初学者或快速原型开发非常友好。你可以直接从NXP官网下载安装。Keil MDK-ARM / IAR Embedded Workbench这两款是商业编译器以优秀的代码优化效率和强大的调试功能著称。如果你所在的公司有正版授权或者项目对代码大小和运行效率有极致要求它们是很好的选择。NXP为这些工具提供了设备支持包Device Family Pack。命令行工具GCC OpenOCD对于喜欢自定义流程或进行自动化构建的开发者可以使用ARM GNU工具链gcc-arm-none-eabi配合OpenOCD进行编译和调试。这种方式更灵活但需要自己配置构建脚本和调试环境。我个人在多数情况下使用MCUXpresso因为它免费且与芯片更新同步快内置的配置工具如引脚配置、时钟树配置能极大减少底层寄存器操作的错误。4.2 利用内置ROM驱动与CANopen这是LPC11C00系列的一大宝藏很多开发者可能忽略了。ROM API调用芯片内部ROM存储了系统启动代码、IAP在应用编程函数以及CAN驱动和CANopen协议栈。要使用CAN你不需要自己从头编写底层驱动。NXP提供了相应的软件包里面包含了链接ROM API的库文件和头文件。在你的工程中只需要包含can.h和can_api.h等头文件然后调用诸如CAN_Init(),CAN_Transmit()等函数即可。这些函数最终会跳转到ROM中执行。CANopen集成ROM中的CANopen驱动实现了基本的CANopen层服务如NMT网络管理、SDO服务数据对象和PDO过程数据对象的通信机制。这为你快速构建一个标准的CANopen从站设备提供了可能。你需要做的是定义你的对象字典Object Dictionary这是一个描述设备所有参数、数据和功能的电子数据表。初始化CANopen层并配置好你的对象字典。在应用层通过回调函数或查询方式处理接收到的PDO数据或通过SDO响应主站的读写请求。CAN BootloaderROM中的IAP函数支持通过CAN总线更新Flash。这意味着你可以轻松实现一个不依赖额外串口或专用编程器的现场升级方案。你需要编写一个小的上位机程序按照特定的协议将新的固件文件通过CAN总线发送给设备设备端的Bootloader可以基于ROM IAP函数开发负责接收并写入Flash。注意事项使用ROM API时必须确保你的链接脚本Linker Script正确保留了ROM区域的地址空间并且没有将代码或数据链接到这些区域。MCUXpresso和Keil等IDE在创建针对LPC11C00的工程时通常会自动处理好这些。但如果是从零开始手动配置这一点需要仔细检查。4.3 基础软件框架与代码示例一个典型的CAN节点应用程序框架如下#include chip.h // LPC11xx系列的头文件包含所有寄存器定义 #include can.h // ROM CAN API头文件 // 1. 系统初始化 void SystemInit(void) { // 配置时钟使用外部12MHz晶振通过PLL倍频到50MHz Chip_SetupXtalClocking(); // 使用LPCOpen库函数 SystemCoreClockUpdate(); // 初始化GPIO、UART用于调试打印等 Board_Init(); } // 2. CAN初始化 void CAN_InitModule(void) { CAN_BAUD_RATE_SETUP_T baudCfg; // 配置CAN波特率为500kbps假设系统时钟为50MHz // 计算方式波特率 PCLK / ((BRP1) * (TSEG1TSEG23)) // 这里使用库函数简化计算 baudCfg.pclk SystemCoreClock; // 50 MHz baudCfg.baud_rate 500000; // 500 kbps baudCfg.sjw 1; baudCfg.sam 0; // 单次采样 // 初始化CAN控制器使用CAN1LPC11C00只有一个CAN CAN_Init(LPC_CAN, baudCfg); // 配置接收过滤器例如只接收ID为0x100~0x1FF的报文 CAN_RX_FILTER_CFG_T filterCfg; filterCfg.id_value 0x100; filterCfg.id_mask 0x700; // 屏蔽高7位匹配低9位范围 CAN_SetRxFilter(LPC_CAN, 0, filterCfg, ENABLE); // 使能CAN中断如果需要 CAN_IRQCmd(LPC_CAN, ENABLE); NVIC_EnableIRQ(CAN_IRQn); } // 3. CAN发送函数示例 uint32_t CAN_SendMessage(uint32_t id, uint8_t *data, uint8_t len) { CAN_MSG_T txMsg; txMsg.id id; txMsg.type DATA_FRAME; txMsg.format EXTENDED_ID; // 或STANDARD_ID txMsg.len (len 8) ? 8 : len; memcpy(txMsg.data, data, txMsg.len); return CAN_Transmit(LPC_CAN, 1, txMsg); // 使用邮箱1发送 } // 4. CAN中断服务例程简化版 void CAN_IRQHandler(void) { CAN_MSG_T rxMsg; uint32_t intStatus CAN_GetIntStatus(LPC_CAN); if (intStatus CAN_ICR_RI_MASK) { // 接收中断 if (CAN_Receive(LPC_CAN, 0, rxMsg) SUCCESS) { // 从邮箱0读取 // 处理接收到的报文 rxMsg.id, rxMsg.data, rxMsg.len ProcessCANMessage(rxMsg); } } // ... 处理其他中断如发送成功、错误等 } int main(void) { SystemInit(); CAN_InitModule(); // 初始化CANopen协议栈如果使用 // CANopen_Init(myObjectDictionary); while(1) { // 主循环 // 1. 执行应用任务如读取传感器、控制执行器 // 2. 准备需要发送的CAN数据 uint8_t sensorData[4]; // ... 获取数据 // 3. 发送CAN报文 CAN_SendMessage(0x200, sensorData, 4); // 4. 处理CANopen协议栈的周期性任务 // CANopen_Process(); // 5. 进入低功耗模式如需要 // __WFI(); } }这段代码展示了从时钟配置、CAN初始化到发送和中断接收的基本流程。在实际项目中你需要根据使用的具体开发库如LPCOpen库来调整函数名和参数。5. 应用场景与方案优化LPC11C00的定位决定了它在特定场景下能大放异彩。5.1 典型应用场景深度剖析工业远程IO/传感器模块这是最经典的应用。一个模块负责采集4-8路模拟量温度、压力或数字量开关状态通过CAN总线将数据实时上报给PLC或主控制器。LPC11C00的集成收发器、ADC和适量IO正好满足需求。利用CANopen协议可以轻松实现设备的即插即用和参数配置。小型电机驱动器/阀门控制器在纺织机械、包装设备中常有大量需要精确点位控制的小功率电机或气动阀门。LPC11C00可以产生多路PWM控制电机通过CAN接收来自主站的位置指令并反馈状态。集成方案减少了驱动器体积和成本。智能家电控制板高端洗衣机、空调的分布式控制。主控板作为CAN主站各个功能板显示板、电机驱动板、传感器板作为从站。LPC11C00可以胜任风机驱动、水泵控制、面板按键扫描等子板功能通过CAN与主控交互布线比一大堆线束简洁可靠得多。楼宇自动化节点如智能灯光面板、窗帘控制器、温控面板。每个房间或区域一个节点通过CAN总线互联实现集中控制和场景联动。低功耗特性使其适合常电待机。5.2 性能与资源优化技巧在有限的16/32KB Flash和8KB RAM内完成功能需要一些优化策略代码空间优化充分利用ROM驱动这是最大的节省。确保你的CAN通信代码调用的是ROM API而不是自己实现的或链接到Flash的库。编译器优化等级在Release构建时将优化等级设置为-Os优化大小或-O2平衡大小与速度。这通常能显著减少代码体积。减少库依赖避免引入庞大的标准库函数如printf。如果需要调试输出实现一个精简的UART_SendString函数。使用-nostdlib选项并自行实现必要的底层函数如_start,memcpy。函数和变量修饰将只读数据如查找表、字符串常量放到const段。将不频繁调用的函数标记为__attribute__((section(.text.slow)))并放到Flash末尾可能有利于某些链接器的优化。RAM空间优化合理使用内存池对于CAN报文、通信缓冲区等动态数据使用静态数组分配固定大小的内存池避免动态内存分配malloc/free带来的碎片化和开销。减小栈和堆大小在链接脚本中根据实际需求调整栈Stack和堆Heap的大小。对于没有动态内存分配的程序堆可以设置得非常小如256字节。使用__packed结构体处理通信协议时使用__attribute__((packed))定义结构体可以避免编译器为了对齐而插入的填充字节节省RAM但会稍微降低访问速度。功耗优化善用三种睡眠模式睡眠模式CPU停止外设继续运行。中断可唤醒。适用于短暂空闲。深度睡眠主振荡器和PLL关闭内部RC振荡器可保持运行。功耗更低。由外部中断、看门狗等唤醒。深度掉电几乎所有电路都关闭仅保留少量寄存器和RTC如果使能。功耗极低微安级。只能通过外部复位或特定唤醒引脚唤醒。外设时钟门控在初始化外设后如果长时间不用可以通过系统配置寄存器关闭其时钟源进一步降低动态功耗。降低系统频率如果不是时刻需要50MHz的全速运行可以在空闲时通过配置时钟分频器降低系统时钟频率。6. 调试与问题排查实录即使设计再仔细调试阶段也总会遇到问题。以下是我在LPC11C00项目上踩过的一些坑和解决方法。6.1 CAN通信不通或不稳定这是最常见的问题。检查物理层终端电阻用万用表测量CANH和CANL之间的电阻。在总线两端设备都上电的情况下电阻值应该在60欧姆左右两个120欧姆并联。如果电阻无穷大或非常大说明终端电阻没接或接触不良。波形观察使用示波器以差分模式将通道A接CANH通道B接CANL然后使用A-B数学功能观察总线波形。一个健康的CAN差分信号应该是干净、幅值对称约2V的方波。如果波形畸变、幅值不足或有过冲检查收发器供电、总线保护电路和PCB走线。共模电压测量CANH和CANL分别对地的电压。在静态时无通信它们应该都在2.5V左右。如果偏差很大检查收发器是否损坏或电源是否正常。检查配置波特率确保总线上所有设备的CAN波特率设置完全一致。哪怕有百万分之一的误差长期累积也会导致错误帧。最好使用相同的时钟源如都使用外部晶振和相同的波特率计算参数。工作模式确认芯片是否正确进入了正常工作模式。有些CAN控制器需要从复位模式切换到运行模式。软件层面过滤器设置如果设置了接收过滤器确保你发送的报文ID在过滤器的接受范围内否则软件层根本收不到。中断与状态检查CAN控制器的错误状态寄存器。如果错误计数不断增加说明存在物理层或总线冲突问题。检查是否有节点持续发送错误帧导致总线关闭。6.2 程序无法下载或调试连接问题确认SWD调试接口SWDIO SWCLK GND RESET连接正确且牢固。线缆不宜过长。芯片启动模式LPC11C00的PIO0_1引脚在上电复位时被采样决定是从用户Flash启动还是从系统Bootloader启动。确保该引脚在上电时的电平符合你的预期通常拉高从Flash启动。如果意外进入了Bootloader模式可能无法正常连接调试器。Flash保护芯片的Flash可能被写保护。需要通过ISP在系统编程方式使用串口工具如Flash Magic连接芯片的UART先解除保护才能再次下载程序。这是一个大坑尤其在使用别人的开发板或二手芯片时容易遇到。电源不稳定在连接调试器的瞬间电流波动可能引起复位。确保电源有足够的余量并且调试器与板共地良好。6.3 常见问题速查表问题现象可能原因排查步骤CAN通信完全无反应1. 终端电阻未接或错误2. 波特率设置错误3. 芯片未供电或复位4. CANH/CANL线接反1. 测量总线电阻应为~60Ω2. 核对所有节点波特率计算值3. 检查芯片VDD电压和复位引脚电平4. 交换CANH/CANL测试CAN通信时好时坏错误帧多1. 总线布线不佳电磁干扰大2. 节点间地电位差大3. 缺少总线保护受浪涌影响4. 某个节点硬件故障1. 用示波器看差分波形是否干净2. 检查各节点地线连接3. 检查ESD/TVS管是否完好4. 逐个断开节点排查程序下载失败1. SWD接口连接问题2. Flash被写保护3. 芯片处于Bootloader模式4. 调试器驱动/配置错误1. 检查连线与接触2. 尝试通过串口ISP工具解除保护3. 检查PIO0_1引脚上电电平4. 重启IDE更换调试器试试ADC采样值不准、跳动大1. VDDA供电不干净2. 模拟输入信号阻抗过高3. 采样时间配置过短4. PCB布局干扰1. 测量VDDA电压纹波加强滤波2. 在ADC输入引脚加一个小电容如100pF到地3. 增加ADC时钟分频延长采样时间4. 让模拟走线远离数字区域7. 进阶思考与其他方案的对比与选型建议LPC11C00并非万能。在为新项目选型时需要将其放在更广阔的市场中对比。1. 对比传统“MCU外置CAN收发器”方案优势BOM成本降低省去一颗收发器芯片及周边阻容、PCB面积减小、设计简化、可靠性提升减少连接点和兼容性问题。劣势灵活性降低。如果需要隔离CAN、或需要特殊类型的收发器如容错CAN、单线CAN集成方案无法满足。此外如果CAN收发器部分损坏需要更换整个MCU。2. 对比其他集成CAN的Cortex-M0/M MCU市场上还有其他厂商提供集成CAN的M0芯片如ST的STM32F0系列部分型号、Microchip的SAMC21系列等。LPC11C00的核心竞争力在于其集成了物理层收发器而不仅仅是控制器。这是它在当时以及现在对成本极度敏感的应用中的独特卖点。其他厂商的M0芯片可能在主频、Flash/RAM大小、外设丰富度上更有优势但通常需要外挂收发器。需要根据项目对集成度、成本、性能的综合要求来权衡。3. 何时选择LPC11C00成本驱动型项目对每分钱成本都敏感且产量较大。空间受限型设备PCB面积非常宝贵需要高集成度。可靠性要求高的标准节点不需要隔离但要求连接可靠、设计简洁的工业传感器、执行器。快速原型验证想快速搭建一个CAN网络demo不希望在外围电路上花费太多时间。4. 何时考虑其他方案需要电气隔离必须选择外置隔离CAN收发器模块此时LPC11C22/C24的集成优势丧失可考虑C12/C14或其他MCU。需要更高的性能需要更快的CPU、更大的内存、更复杂的算法如FOC电机控制应选择Cortex-M3/M4甚至M7内核的MCU。需要更丰富的外设需要多个CAN通道、以太网、USB、高分辨率ADC等LPC11C00无法满足。开发生态偏好团队更熟悉ST、Microchip或其他厂商的生态系统和工具链。在我个人看来LPC11C00系列像是一个精准的“手术刀”在它擅长的领域——低成本、紧凑型、标准CAN节点——里它依然是一个非常出色且具有性价比的选择。尤其是对于从8/16位单片机升级过来需要接入CAN网络但又担心成本和复杂度的团队它是一个平滑而高效的过渡桥梁。它的价值不在于参数表的顶端而在于用恰到好处的资源以极致的集成度解决了一类非常具体的工程问题。