
用IAR调试CC1310最让人抓狂的报错之一就是Fatal error: Failed to connect to the XDS emulator (Error -241 0x0:)。这个错误往往在你刚装完IAR、第一次想下载程序、或者换了一块新板子之后突然蹦出来而且和代码逻辑基本无关纯粹是调试链路没打通。我前前后后帮同事排查过不下十次类似问题从TI的LaunchPad到自研小模块都遇到过核心原因覆盖了驱动、供电、IAR配置、芯片内部配置这几个层面。这篇文章就把这些经验和踩过的坑一次性整理出来按排查顺序讲清楚尽量让你照着做就能解决。1. 先认识一下这个-241到底卡在哪个环节1.1 报错现场和它出现的时机这个错误的典型现场是你在IAR里打开一个CC1310工程点下Debug按钮或者Download按钮IAR底部状态栏先是卡在“Connecting to XDS emulator...”之类的提示上过几秒弹出一个对话框标题写着Fatal error内容是Failed to connect to the XDS emulator (Error -241 0x0:)然后就停止连接了。我遇到这个错误的主要场景有几种你可以对照一下自己是哪一种刚装好IAR新建或导入了一个CC1310工程第一次点调试就报-241。同一个工程之前能正常下载今天插上板子突然连不上。换了一台电脑、换了一个调试器或者换了一块新板子之后开始报。程序里改过引脚配置或者电源管理相关的代码下载过一次后第二次就连接失败。不同场景对应的排查重点其实不太一样。新环境首次连接失败优先查驱动和IAR里的调试器配置之前能连后来连不上优先查板子状态、供电和程序里是否动了调试引脚换硬件之后失败优先查调试器型号和接线。1.2 这串错误在调试链路里意味着什么Error -241不是CC1310芯片本身报出来的也不是IAR编译系统报的而是IAR调用TI的XDS调试器驱动时XDS在尝试访问目标芯片的调试接口时失败了。要理解这个得先看一条完整的调试链路电脑上的IAR → TI的XDS调试驱动Debug Server → USB物理链路 → XDS仿真器硬件 → JTAG/cJTAG信号线 → CC1310芯片的调试端口 → ARM Cortex-M3内核调试组件-241 0x0里的0x0很有信息量。它表示XDS尝试读取目标芯片0x0地址的调试寄存器时失败了也就是XDS和目标芯片之间根本没有建立起有效的调试通信。可以这么理解XDS就像一个快递员它已经站在你家小区门口了但拿着地址却找不到具体楼栋自然送不了货。这个“找不到楼栋”的状态就是XDS无法同步到CC1310调试端口的表现。所以排查方向就很清晰了从这条链路的每一段去找断点。USB线、XDS驱动、IAR配置、JTAG引脚、芯片调试接口任何一环出问题最终都会表现为-241。1.3 CC1310、XDS110和IAR三者怎么配合CC1310是TI推出的Sub-1GHz无线MCU内核是ARM Cortex-M3本身支持标准的JTAG和cJTAG调试接口。TI官方推荐的调试方案一般是XDS系列仿真器最常见的是XDS110尤其是LaunchPad开发板上直接板载了一个XDS110用一根USB线就能同时供电和调试。IAR对CC1310的支持是通过ARM编译器加TI XDS调试驱动实现的。在IAR里你需要在Project → Options → Debugger中把Driver选成Texas Instruments XDS然后在下一级设置里选对具体的仿真器型号和接口模式。很多人第一次接触CC1310工程时会忽略这一步Driver还停留在默认的Simulator模拟器模式或者选成了SEGGER J-Link自然就出现连接类报错。另外还要知道IAR和XDS110之间的连接依赖的是TI的CCS Debug Server组件。如果你安装IAR时没有装全这个调试服务组件IAR就无法正常驱动XDS110。这一点我后面会详细说因为很多人装的是精简版或者自定义组件版坑就埋在这里了。2. 从最外围开始驱动、供电和USB链路2.1 XDS110在设备管理器里应该长什么样排查-241第一步永远是看电脑是否正常识别到了XDS仿真器。用一根已知没问题的USB线把LaunchPad或者独立XDS110接到电脑上然后打开设备管理器展开“端口”和“调试器/芯片”相关分类正常情况下应该能看到类似这样的设备节点XDS110 Class Debug ProbeXDS110 Class Application/User UARTXDS110 Class Auxiliary Data Port其中Debug Probe是调试器的主通道串口相关的节点是XDS110自带的虚拟串口功能。如果设备管理器里看到的是“未知设备”或者设备名前面带了黄色感叹号说明驱动层就有问题IAR自然连不上。驱动装不上的情况最常见的是Windows自动安装失败或者系统里残留了旧版TI调试器驱动。我的处理办法是到TI官网搜XDS110驱动手动更新设备驱动指定到驱动目录安装如果还是不行就在设备管理器里先卸载掉这个设备勾选“删除此设备的驱动程序软件”然后重新扫描硬件让系统重新识别一遍。这一步能解决相当一部分-241。2.2 供电问题LaunchPad跳线和外部供电的坑驱动没问题之后第二个高发原因是供电。很多人会忽略一个事实XDS110的连接时序和芯片上电状态强相关。如果CC1310没有完全上电或者上电时序不对XDS110去访问调试端口的时候芯片根本不响应就会报-241。拿最常见的LAUNCHXL-CC1310来说板子上有一套电源跳线用来控制XDS110是否给目标芯片供电以及是否用外部电源代替仿真器供电。默认跳线状态下USB供电经过XDS110再给CC1310供电这种状态下连接一般没问题。但如果你为了外部供电方便拔过跳线或者用杜邦线额外接了电源就容易出现CC1310没电或者电源电压不对的情况。另外有些自研板或者模块不是通过LaunchPad供电的而是单独给CC1310模块供3.3V然后用外部XDS110连接。这种情况更容易踩坑调试器的地和目标板的地必须共地3.3V必须在合理范围而且供电要稳定不能用那种电流不够的LDO勉强供电。简单自查方法给目标板正常上电用万用表量一下CC1310的VDD引脚对地电压确认在3.3V左右如果用的外部XDS110再确认一下调试器自己也被供电了。很多独立的XDS110需要单独一个USB口供电只插了JTAG排线却没有插USB也是连不上的。2.3 USB线材和接口带来的“灵异现象”这听起来像是玄学但我在实际排障中遇到太多次了。XDS110对USB线材和接口的要求并不高但偏偏有相当一部分-241是USB链路引起的。我踩过的具体情况有这些用了那种只能充电不能传数据的Micro USB线电脑上完全枚举不到设备。USB线内部接触不良设备管理器里XDS110一会儿出现一会儿消失。插在USB Hub上尤其是那种不带外部供电的HubXDS110供电不足导致设备能识别但工作不稳定。笔记本的USB口供电策略比较保守插上XDS110后又接了其它外设电压被拉低。所以遇到-241先做一个最简单的动作换一根短一点的、确定能传数据的USB线直接插到电脑主机背后的原生USB口上不要经过任何转接Hub。这一步看着不起眼但能排除掉一大片硬件层面的干扰。3. IAR工程配置驱动选型、接口模式和复位策略3.1 新建工程后第一件事把Driver选成TI XDS确认驱动和供电都正常之后问题大概率就落在IAR工程本身的调试配置上了。很多人从网上下载的CC1310示例工程或者自己新建的工程默认的调试驱动不一定是对的。进入Project → Options → Debugger看Setup标签页里的Driver下拉框。对于CC1310配合XDS仿真器的情况应该选择Texas Instruments XDS。如果你看到的是Simulator、SEGGER J-Link、CMSIS-DAP这些就要改成Texas Instruments XDS。选好Driver之后还要进到下一级配置页一般在左侧Category列表里会出现TI XDS的专属设置项。在这里需要确认仿真器型号是XDS110还是XDS100V3还是XDS200这个必须和实际硬件一致。如果板载的是XDS110但IAR里默认选的是XDS100连接的时候也会出问题报的错可能就是这个-241。这里还要特别提一个安装相关的问题。IAR在安装时可以自定义勾选组件其中有一类组件就是针对不同调试器的调试服务。如果你安装的时候没有勾选TI XDS相关的支持组件或者选的版本里没有包含CCS Debug Server那么即使Driver选对了IAR在连接时也找不到可用的XDS驱动最终报出Failed to connect。判断方法打开IAR安装目录看里面有没有TI相关的调试服务子目录或者直接看安装日志。如果确实没装全最好的办法是重新运行IAR安装程序选择修改安装把TI XDS支持组件补上而不是手动拷贝文件过去那样很容易出现DLL版本不匹配的问题。3.2 JTAG还是cJTAG换一种接口模式试试CC1310支持标准的4线JTAG也支持TI cJTAG调试接口。XDS110和CC1310之间可以用JTAG也可以用cJTAG具体由调试器侧决定。很多默认配置走的是JTAG模式但在某些情况下比如引脚被复用、线缆过长、或者芯片启动状态特殊JTAG模式可能同步不上换到cJTAG反而能连通。在IAR里进入Project → Options → Debugger → TI XDS设置页找和Interface、Connection、JTAG mode相关的下拉框可能会有JTAG、cJTAG等选项。默认情况下IAR可能会自动选择但如果一直报-241不妨手动切换到cJTAG试一次。我印象很深的一次排障一块CC1310自制板用4线JTAG怎么都连不上后来有同事提醒试cJTAG结果一次就通过了。原因是那块板子在硬件设计上只把TMS和TCK两根线引了出来标准JTAG需要TDI/TDO这四根线没有都接到调试座上XDS在JTAG模式下拿不到完整的链路回应自然报-241。换成只需要两线的cJTAG反而正常了。当然切换接口模式前应该先确认板子上到底连了哪几根调试信号线。用LaunchPad的话一般JTAG和cJTAG都支持可以放心切换如果是自研板最好对着原理图看一眼。3.3 复位策略、连接速度和Extra Options还有一个容易被忽视的点是IAR里的Reset策略。在某些情况下目标芯片处于异常状态比如程序跑飞了、进入了低功耗模式、或者复位电路时序有点怪XDS默认的连接流程访问不到调试端口。这种情况最常用的手段是在点下Debug的同时按住板子上的复位按键等IAR弹出连接成功的提示或者开始下载时再松开。在IAR设置里也有对应的选项。Project → Options → Debugger → Setup里有一个Reset选择框常见选项包括Hardware reset、Software reset、Core reset、Auto等。默认一般是Auto或者Hardware reset。如果连接不稳定可以尝试把Reset方式切换成Hardware reset或者反过来换软件复位方式测试有时就能绕过连接阶段的时序问题。另外XDS的TCK连接速度也是一个变量。调试频率设得太高信号质量跟不上就容易在同步阶段失败。在TI XDS设置页里一般能找到和时钟频率、速度相关的选项默认可能是2.5MHz或者5MHz。如果连接报错可以试着把频率降到1MHz甚至500kHz尤其是自制板、飞线比较多、或者调试线比较长的时候降频往往立竿见影。关于Extra Options文本框我的建议是如果你不清楚XDS的命令行参数含义不要乱填。我见过有人在网上抄了一段从CCS那边移植来的参数直接粘贴到IAR的Extra Options里结果不仅没解决问题还引入了新的报错。保持默认优先通过正常菜单项去调整。4. 硬件侧最常见的几个真凶4.1 CCFG里关了调试口板子就成了“哑巴”这一节要重点讲因为大部分人遇到-241都会在软件层面反复折腾但实际上CC1310有一个非常隐蔽的坑CCFG配置区可以禁用调试端口访问。CCFG是CC1310 Flash末尾区域的一个客户配置区里面存放了很多芯片启动参数其中一个重要配置项和调试端口有关。如果这个配置被改成了禁用调试访问芯片上电后JTAG/cJTAG调试端口就不再响应外部调试器表现就是无论你换什么调试器、怎么调频率、怎么按复位都是-241。量产产品里禁用调试口是一种常见的安全措施防止别人通过调试接口读取固件。但问题是很多人在开发阶段也会不小心把调试禁用配置写进去。有一种典型情况是你用了某个参考工程复制了一段别人写好的CCFG配置结构体里面正好带了禁用调试访问的位或者你在开发板上跑了一个带有量产配置的固件下载成功的那一刻起板子的调试口就被锁住了再想连接就报-241。那怎么恢复如果是LaunchPad这种板载XDS110的板子不要慌还有一个后门TI的SmartRF Flash Programmer 2。这个工具可以在芯片处于特殊启动状态时强制擦除用户Flash只要把整个Flash擦掉CCFG也恢复到默认值调试端口就能重新访问了。具体操作上可以先让芯片进入ROM Bootloader模式具体触发方式需要查CC1310技术参考手册里的Bootloader章节一般是让特定的DIO引脚在复位时为低电平然后用SmartRF Flash Programmer 2的串口/UART方式连接执行擦除。如果是板载XDS110这个工具本身也可能支持某种恢复流程。总之全片擦除是解开调试锁最直接有效的办法。4.2 调试引脚被程序复用成了GPIO另一个非常常见的硬件层原因是CC1310的调试引脚被程序配置成了普通GPIO功能。CC1310的引脚是高度可复用的TMS、TCK这些调试引脚本身也是一组DIO引脚。如果你在初始化代码里把这几个DIO配置成了GPIO输出并且外接了LED、按键、或者驱动了什么电路那么只要程序一运行这些引脚就不再响应调试协议XDS自然连不上。更麻烦的是这种问题有很强的时序特点第一次下载程序前芯片还是出厂状态调试引脚工作正常所以第一次连接、下载都能成功程序跑起来之后初始化的GPIO配置生效调试引脚被夺走你再点第二次下载连接就失败了。我之前遇到过一块板子跑的是一个RTOS移植工程网友分享的例程里有一段把DIO口整体初始化成输出正好把调试引脚也覆盖了结果就是每隔一段时间连不上要靠按复位键卡时机才能重新下载。最后查出来就是这个原因。解法分两层第一程序里不要把调试功能相关的DIO配置成普通GPIO第二如果只是在调试阶段遇到可以在连接失败时按住板子的复位键让芯片在复位状态下由XDS接管调试端口然后再松手让程序停止运行或者跳到断点这样就能重新获得连接机会。4.3 低功耗模式对调试访问的影响CC1310是个低功耗无线MCU大部分应用都会用它的Standby甚至Shutdown模式。这两个模式下CPU停止运行内部的调试访问路径也可能被切断或者进入不完全响应状态。特别是Shutdown模式是真正的深度睡眠几乎整个芯片都断电级别地关闭调试组件无法正常工作。如果程序在启动后很快进入了Shutdown模式XDS去连接就得不到任何回应报-241。这种问题的排查思路比较简单如果程序里用了Power Driver或者直接操作低功耗寄存器先确认它有没有在连接阶段之前就触发低功耗。调试现场处理手段还是那招——按住复位键再连让芯片保持复位状态调试器接管后再松手。同时在软件层面建议在调试阶段暂时屏蔽掉自动进入低功耗的代码或者添加条件编译只在正式版本里启用低功耗。4.4 其他硬件因素复位电容、线缆长度和焊接问题最后再提几个硬件细节虽然不常见但排查到后面也得考虑。复位电路如果RC时间常数太大上电后复位脚的电平恢复太慢XDS启动连接时芯片可能还处于复位状态导致连接失败。一般复位电容用0.1uF左右没什么问题但如果板子上用了比较大的电容比如1uF甚至10uF就有可能影响调试器握手时序。调试线缆太长或线序不对也会导致-241。XDS110的引脚定义中TMS、TCK、TDI、TDO、GND、3.3V等都有明确位置自制调试线的时候很容易接错哪怕只错一根连接也会失败。遇到这种情况最有效的方法是找一个已知完好的LaunchPad作为参照用万用表对着原理图量一遍每一根信号线确认板子到调试器座子之间导通正确。还有焊接问题。贴片封装的CC1310虚焊、连锡都会让调试引脚处于不确定电平状态。用万用表量TMS、TCK对地阻抗如果发现异常低阻八成是连锡了。5. 完整排查顺序与几个真实案例5.1 建议按这个顺序排查如果看到这里你已经试了好几种方法但问题还在我建议不要东一榔头西一棒子按下面这个顺序老老实实走一遍换一根确定能传数据的USB线插到电脑原生USB口。打开设备管理器确认XDS110相关设备正常枚举没有感叹号。用万用表确认CC1310的3.3V供电正常和调试器共地。打开IAR确认Driver选的是Texas Instruments XDS仿真器型号是XDS110。在TI XDS设置页里切换JTAG/cJTAG模式或者降低连接频率。按住板子复位键点击Debug连接出现后松开复位。如果还是不行用SmartRF Flash Programmer 2尝试全片擦除排除CCFG锁死。用TI的XDS110固件更新工具重新刷一次仿真器固件。最后如果条件允许用CCS的Target Configuration测试一下同一块板子确认是否能连上。这个顺序的逻辑是从外部到内部、从软件到硬件。前3步解决的是物理链路4到6步解决的是IAR配置第7步解决芯片内部配置第8步解决仿真器自身问题第9步则是用TI官方工具做交叉验证判断问题到底出在IAR还是不出的硬件。5.2 案例一LaunchPad板载跳线接触不良有一次帮同事调一块新的LAUNCHXL-CC1310打开IAR示例工程点Debug第一次就报-241。当时我把设备管理器、驱动、供电全查了一遍都没问题。后来发现板子上有几颗跳线帽也就是用来连接XDS110和CC1310调试引脚的排针跳线其中一颗跳线帽没有完全插到位导致TMS信号时断时续。把跳线帽重新拔插一次确保完全压到位之后连接就正常了。这个案例给我印象很深因为跳线帽松动是我后来排查同类问题第一个检查的点。LaunchPad类板子出厂时贴片运输跳线帽偶尔会有松动不是每块板子都插得很牢固。5.3 案例二IAR里选错了仿真器型号另一个常见案例是IAR工程里默认选的仿真器型号和实际硬件不匹配。有一次我拿到一台新电脑重新装了IAR并导出一个CC1310工程编译没问题但点下载就报-241。检查发现工程Options里TI XDS设备型号选的是XDS100V3而板子是板载XDS110。把型号改成XDS110之后立刻就连上了。这个错误很容易被忽略特别是从网上下载的别人分享的工程作者用的可能是外置XDS100V3而你自己用的是LaunchPad板载XDS110。所以看到-241先看一眼选项里的设备型号确认它和实际硬件一致。5.4 案例三CCFG被误配置导致锁死这个案例最惊险。有一块CC1310自研板一开始能正常下载程序后来我在工程里加入了一段量产配置代码里面包含了CCFG的设置其中一个字段禁用了调试口令。当时只是想测试量产配置没想到下载成功后板子就再也没法连上了报的正是-241。当时的恢复过程先尝试按住复位连接没用再尝试降低连接频率没用最后用SmartRF Flash Programmer 2通过串口方式进入ROM Bootloader连接成功后对整个Flash执行了擦除CCFG恢复默认调试端口才重新可用。这次之后我吸取了教训凡是量产配置相关的内容一定要通过条件编译和开发版本隔离开绝不能无意中把禁用调试的配置烧进开发板。5.5 常见问题速查表为了节省阅读时间我把排查过的典型情况整理成一张表可以对照着快速定位现象优先检查解决手段设备管理器里没有XDS110USB线、驱动换数据线、手动安装驱动设备管理器有异常设备驱动冲突卸载设备并删除驱动重新识别XDS110正常但连接失败IAR驱动选型确认Driver为TI XDS型号为XDS110第一次能连第二次不行程序里GPIO复用/低功耗按住复位连接检查CCFG配置JTAG模式下失败接口模式切换到cJTAG试试连接速度慢不稳定TCK频率过高降到1MHz甚至500kHz全片擦除后恢复CCFG被禁用调试SmartRF Flash Programmer 2擦除Flash自研板从未连上过接线、供电、焊接对照原理图量线序确认3.3V共地换电脑后失败驱动、IAR组件补装IAR的TI XDS调试组件6. 顺带聊聊IAR环境里那些容易和-241混淆的坑6.1 license问题会干扰判断很多人在IAR刚安装完成、第一次打开工程时会看到类似fatal error[lms001]: license check failed的报错。这个报错和-241风牛马不相及但它出现的时机往往是刚装完IAR之后很容易让人误以为自己的环境有问题然后一股脑去调调试器配置反而把真正的问题掩盖了。license问题的本质是IAR授权没有激活或者激活失败处理方式是用IAR License Manager重新导入license或者检查电脑时间、MAC地址绑定之类的问题。我建议在排查-241之前先把license问题解决掉确保IAR能正常进入调试界面再去看XDS连接的事情。否则一边是License Manager弹窗一边是-241弹窗很难分清主次。6.2 启动文件、SDK版本和RTOS工程的影响CC1310的SDK示例工程在IAR下一般都会带好启动文件和链接配置文件。但如果你参考的是网上其他MCU平台的RTOS移植教程比如STM32F103系列那种基于Keil、IAR开发环境的文章照搬到CC1310上就会踩坑。不同芯片的启动文件、中断向量表、内存布局完全不一样启动文件用错会导致程序根本跑不到预期状态间接影响后续调试连接。特别是当你在一个CC1310工程里移植RTOS的时候RTOS的调度器初始化可能要操作一些系统寄存器部分低功耗相关的操作也可能改变调试接口状态。有一个比较隐蔽的情况是RTOS的心跳定时器或者低功耗管理代码在启动阶段就把芯片切到了某种低功耗状态导致XDS还没完成握手就失联了。这种情况一旦出现看起来也是-241但根因在启动代码而不在调试链路。我的建议是移植RTOS或者大改启动流程时先把调试连接验证通过再写业务代码。如果你在刚移植完RTOS之后遇到-241优先怀疑启动阶段有没有异常配置用按复位连接法先建立调试会话再在启动代码里加断点排查。6.3 新装IAR后快速确认环境是否正常如果你刚装完IAR还没有跑过任何CC1310工程我建议不要直接拿自己的业务工程去试应该先用TI官方SDK自带的一个最简blink或者empty示例工程做冒烟测试。这个冒烟测试可以验证四件事IAR本身能正常编译CC1310工程。IAR到XDS110的驱动链路是通的。XDS110到CC1310的JTAG/cJTAG链路是通的。编译器生成的烧录文件和调试符号能被正确加载。冒烟测试通过之后再打开自己的工程如果此时才出现-241问题基本上就锁定在工程配置或者代码层面了。如果连官方示例都连不上那就是环境或硬件层面的问题按第5节顺序排查。做这个冒烟测试还有一个额外收获因为IAR新建工程时默认的调试Driver可能是Simulator官方示例工程一般会预置好TI XDS相关配置跑通了之后再对照官方示例和自己的工程配置差异很快就能找出少选的地方。写在最后写了这么多最后分享一个我自己的习惯。每次拿到一块新的CC1310板子或者重装完IAR我不会急着打开业务工程点下载而是先花几分钟把调试环境过一遍设备管理器里看XDS110是否识别、用官方例程烧一次点个灯、确认板子复位按键手感正常。这几步看着不起眼但能省掉后面无数个-241。另外还有一个小技巧连接前用手触摸一下CC1310芯片表面如果片子已经发热说明程序可能已经跑起来了并且处于异常耗电状态这种情况下优先检查低功耗和GPIO复用如果芯片是凉的大概率程序还没跑起来问题更倾向于在调试链路本身。这个土办法不一定严谨但在现场排查时确实帮我快速缩小过范围。希望这篇长文能帮正在和-241搏斗的你找到症结。