ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AURIX TC375开发环境搭建指南:ADS安装与多核调试技巧

AURIX TC375开发环境搭建指南:ADS安装与多核调试技巧 手头躺着一块吃灰的TC375开发板别让它继续吃灰了。这篇文章准备聊聊英飞凌AURIX TC375这个三核单片机怎么从零开始搭建ADSAURIX Development Studio开发环境以及我实际调试时沉淀下来的几个实用技巧。先强调一句这里的ADS和微波射频仿真那个ADS是两码事别搜错了东西。英飞凌的ADS是一款基于Eclipse的免费集成开发环境内置TASKING编译器装完就能编译TriCore工程不需要额外折腾许可证、也不需要去配那套让人头疼的GCC交叉编译链。如果你是刚从TC2xx转过来的老工程师或者是刚接触AURIX的在校学生这篇内容能帮你少踩不少坑。1. 为什么选了ADS免费工具链与TC375的适配性分析1.1 先认识AURIX TC375这颗三核单片机TC375属于英飞凌AURIX TC3xx家族用的是TriCore架构同一颗芯片里面放了三个独立的内核每个核都带DSP和FPU最高能跑到300MHz。这种多核设计在汽车域控制器、BMS主控、底盘控制器这些场景里非常常见一个核跑控制逻辑、一个核跑通信协议栈、一个核跑诊断任务逻辑上互相隔离实时性也更好。TC375内部还集成了MB级别的PFlash和DFlash、大容量本地RAM外设方面有GTM定时器阵列、EVADC、EDSADC、SENT、QSPI、CAN、LIN、FlexRay这些基本覆盖了车身控制和动力域控制的主流需求。最让人看重的是它内置了硬件安全模块HSM可以做通信加密和密钥管理这也是一线Tier1在选型时非常看重的点。从我自己的使用体验来说TC375比TC2xx好用不少主要在于三点第一是主频提升后算力明显更强第二是外设资源更丰富第三是调试相关的基础设施更完善比如它支持多核同步调试这在排查并发问题的时候是救命级功能。所以如果你想认真深入嵌入式领域TC375是块值得花时间的板子。1.2 主流AURIX开发工具链对比为什么ADS最省心AURIX系列能用的开发工具链其实不止一种我自己先后试过HighTec、Tasking和ADS三种这里把它们的核心差异整理一下工具链基础编译器授权方式上手难度适合场景HighTecGCC免费版有代码大小限制完整版需要商业授权中等习惯开源工具链、需要深度定制TASKING自家商用编译器商业授权费用较高中等正式量产项目、需要编译器官方支持ADSAURIX Development Studio内置TASKING编译器免费较低学习评估、前期原型开发ADS本质上就是英飞凌把Eclipse IDE和TASKING编译器打包在一起做了深度定制和预设你不需要自己去下载Eclipse插件、配置编译器路径、维护Makefile。它自带工程模板、示例代码库、链接脚本和调试配置。之前遇到不少朋友在HighTec上折腾交叉编译环境光CToolchain路径一个地方就能卡半天换到ADS之后基本上打开就能用。我现在给客户做预研项目的时候前期先用ADS快速验证MCU外设和算法等方案定下来之后再切到商业环境去做产品化效率非常高。如果你是学习或者做原型验证ADS绝对够用。2. ADS下载、安装与首次配置实操2.1 下载与安装要点版本选择、网络与杀毒软件避坑ADS安装包直接在英飞凌官网搜索AURIX Development Studio就能找到。下载时注意版本号尽量选择当前最新的稳定版本不要一看到有RC版本就急着装RC版本可能存在插件兼容性问题。我见过有同事装了一个开发中的版本结果打开示例工程一直报错查了半天才发现是IDE本身的问题。下载前需要注册英飞凌的账号这一步免费按流程走就行。安装时有几个细节强烈建议注意一下。第一安装路径不要带中文、不要带空格默认的C:\AURIX Development Studio这种路径是没问题的但如果你为了图方便建了一个带空格的目录后续编译时有些脚本可能会因为路径解析出问题虽然现在新版工具对空格的处理已经好很多了但没必要赌这个。第二安装之前关闭杀毒软件或者把安装目录加入白名单ADS安装过程中会释放一些编译插件和驱动文件部分安全软件会误拦截。第三安装完成后建议重启一次电脑让环境变量和驱动生效尤其是你已经插着调试器的时候驱动识别会更稳。我自己的习惯是安装完之后先把IDE打开一次让它自动生成工作空间和默认配置确认没有报错再去做别的操作。这一步能提前暴露大部分环境问题。2.2 首次启动与TASKING编译器激活首次启动ADS之后它会提醒你激活TASKING编译器许可证。这一步很多人会卡住其实没有想象中复杂。ADS内置的TASKING编译器是免费授权模式只要电脑能联网在License Manager界面选择自动激活即可不需要手动填License文件。激活完成之后在Help - About AURIX Development Studio或者编译器工具栏能够看到TASKING的版本信息就说明环境已经准备就绪了。这里有一个常见的坑如果你是在公司内网环境下使用代理设置可能会导致激活服务器连不上。遇到这种情况先检查IDE的网络代理配置或者在能访问外网的环境下完成激活。还有个容易忽视的问题TASKING编译器版本和ADS版本是对应的如果你同时装了多个版本的ADSOpenGCC或者LSL路径可能互相干扰。我的建议是除非有明确的兼容需求否则一台机器只保留一个ADS版本省心第一。2.3 三个关键配置项Workspace、芯片型号与库路径第一次启动ADS会让你选择Workspace路径这个路径存放你的工程和在IDE里做的视图配置。我见过不少人把它放到了C盘的默认目录时间一长C盘空间被Eclipse的metadata占满编译也变慢。建议专门建一个D:\AURIX_Workspace这样的目录。接下来是芯片型号。ADS新建工程的时候会要求选择目标芯片例如你的板子上焊的是SAK-TC375TP-96F300S那么在芯片列表里要找到对应的TC375产品系列。选错型号的后果很严重轻则启动代码跑不起来重则外设寄存器地址对不上编译能过但是运行乱飞所以这一步一定要对着板子上的丝印选。最后一个是库路径。ADS自带的示例工程和iLLD库路径在安装目录下正常不需要手动修改。但如果你像我一样喜欢把示例代码拷贝出来改就会遇到include路径失效的问题。这时候在工程属性里检查C/C General - Paths and Symbols把缺失的Infineon\Libraries路径补回去就行。3. 创建第一个TC375工程导入例程比新建更聪明3.1 通过例程导入快速生成工程很多嵌入式新手喜欢从空工程开始写代码我支持理解这种心情但强烈不建议在TC375上这么做。原因很简单AURIX工程的启动代码、链接脚本、头文件配置这些底层骨架非常繁琐手工处理很容易漏。正确做法是直接用ADS内置的示例工程导入功能File - Import - AURIX Development Studio - Example Projects然后从列表里选你需要的例程。ADS自带的示例工程非常丰富覆盖了GPIO点灯、PWM、ADC采样、STM定时、CAN收发这些常用外设。我个人的习惯是先导入一个Hello World或者GPIO_LED例程把它编译一遍确认整个工具链和调试链路是通的再在这个基础上做修改。这样做有一个额外的好处你能看到一个官方的、正确的三核启动流程是什么样的后续自己写多核程序的时候有据可依。3.2 工程目录结构拆解三核启动与链接脚本ADS生成的AURIX工程目录结构比较固定打开工程之后重点看几个文件夹。首先是src目录里面通常会拆成Cpu0_Main.c、Cpu1_Main.c、Cpu2_Main.c三个文件这三个文件分别对应TriCore三个内核的入口函数。TC375的启动过程和单核单片机不一样每个CPU核在复位之后会各自跳转到自己的main函数你如果把初始化代码写在Cpu0_Main里然后指望Cpu2也用上这里的全局变量初始化那就大错特错了。其次是链接脚本ADS工程里通常带.lsl文件例如Lcf_Tasking_Tricore_Tc.lsl。这个文件定义了Flash地址、RAM地址、栈大小和堆大小。在很多应用场景下你不需要改它但需要注意一点当你的程序需要往DFlash里存数据或者需要特定数据放在指定RAM段时就得来改这个文件。改不好链接脚本会导致烧录进去程序直接HardFault所以每次改动都建议先编译看map文件确认地址有没有冲突。3.3 从GPIO点灯看iLLD库函数怎么调英飞凌AURIX系列提供了一套底层驱动库叫iLLD全称Infineon Low Level Driver。这套库封装了寄存器操作让你不用查看几千页的User Manual也能把外设跑起来。但需要注意的是iLLD不是生来就有的库它是基于芯片寄存器模型生成的每个外设的API命名很规律模块前缀加动作比如IfxPort_setPinMode、IfxPort_setPinState、IfxStm_waitTicks。拿最经典的点灯程序来说核心代码大概是这样的#include Ifx_Types.h #include IfxPort.h #include IfxStm.h #define LED_PIN IfxPort_P00_6 #define LED_MODE IfxPort_Mode_outputPushPullGeneral void initLED(void) { IfxPort_setPinMode(MODULE_P00, LED_PIN.pinIndex, LED_MODE); IfxPort_setPinState(MODULE_P00, LED_PIN.pinIndex, IfxPort_State_high); } void delay_ms(uint32_t ms) { IfxStm_waitTicks(MODULE_STM0, (uint32_t)(IfxStm_getFrequency(MODULE_STM0) / 1000.0) * ms); } int core0_main(void) { Ifx_Ssw_Tc375_Init(); /* 芯片级初始化一般由模板生成 */ initLED(); while(1) { IfxPort_setPinState(MODULE_P00, LED_PIN.pinIndex, IfxPort_State_low); delay_ms(500); IfxPort_setPinState(MODULE_P00, LED_PIN.pinIndex, IfxPort_State_high); delay_ms(500); } return 0; }这段代码里MODULE_P00对应P00端口寄存器组IfxPort_P00_6说明LED接在P00口的第6根引脚上。你拿到自己的开发板时一定要去看原理图或者板卡手册确认LED到底挂在哪个端口直接照搬例程里的引脚号经常点不亮。这也是我反复跟同事强调的一点拿到一块新开发板第一件事不是写代码是先看原理图把LED、按键、串口、调试器的引脚关系全部标出来。4. 连接调试器与在线调试技巧4.1 调试器连接与Target配置文件TC375支持JTAG和DAP两种调试接口开发板上通常引出的是DAP接口一个比较小的连接器。DAP接口只需要四根线DAP0、DAP1、GND、RST当然如果你板子上带供电脚那就把供电脚也接上。我第一次调试的时候就是因为只接了数据线没接RST导致调试器一直识别不到芯片后来把RST接上之后就正常了。在ADS里做在线调试关键是Target Configuration。从菜单Run - Debug Configurations进入找到AURIX Target Configuration选择你的调试器型号、目标芯片以及连接方式。这里有几个选项需要说清楚连接速度不要拉太高我一般设置成5MHz以下尤其是线缆比较长的情况下速度过高会导致调试器频繁断开。另外有一个 Reset 的选项建议选择Reset and Halt这样每次烧录后会停留在main入口的位置方便你从头看执行流程。4.2 调试面板的五个实用高招如果你以前习惯Keil的调试窗口ADS基于Eclipse很多快捷键和视图逻辑其实是类似的比如F5是Step IntoF6是Step OverF7是Step ReturnF8是Resume。但TC375多核调试有几个跟单核MCU完全不一样的地方这里分享一下我实测下来最实用的五个操作。第一多核同步暂停。调试三核程序的时候你会发现在一个核上下断点其他核还在继续跑。这个特性有时候是好事但当你需要排查全局资源冲突时就会很头疼。在调试配置里找到Target Settings下的Core Control把Breakpoint handling设置成Break all cores这样任何一个核触发断点三个核都会停下来。第二寄存器窗口与Memory窗口联动。看外设是否配置成功不用去读代码直接在Peripherals视图里展开当前外设的寄存器组比如看GTM的计数器值、看P00口的输出状态一目了然。我自己调PWM时喜欢同时打开GTM寄存器窗口和Pwm相关寄存器改一次参数点一次Resume波形变化和寄存器值能直接对上。第三条件断点的使用。TC375硬件断点数量有限如果循环次数很大直接在循环体内下断点你会发现跑很久才停一下而且断点资源占满之后其他位置就下不了断点了。这时候右键断点设一个条件比如i 99只在满足条件的时候停下来效率提高非常多。第四Watch窗口别只填变量名还可以填表达式。比如*(volatile uint32_t*)0xF0000000这种地址访问表达式在Eclipse里也能实时刷新用来观察某个寄存器特别方便。我曾经在调试CAN通信时用这种方式直接盯住Message Buffer的地址比反复切换Memory窗口快多了。第五用Reset and Halt来固定起点。TC375的启动过程比较长从复位向量到main入口会经过汇编和C运行时初始化。如果每次Reset之后程序直接跑飞先不要怀疑代码先确认启动配置里的Reset选项是不是Reset and Halt确认之后每次都能停在main入口的第一行调试心态会好很多。4.3 断点与观察变量在TC375上的特殊之处TC375是带Flash和复杂存储映射的芯片调试器在Flash上设置软件断点时本质上是要往Flash临时写入一条调试指令这就引出几个注意事项。硬件断点在RAM和Flash上都能工作数量有限软件断点则依赖调试器去patch flash如果芯片的Flash保护被打开软件断点就可能失效。所以调试阶段建议关掉任何Flash写保护功能。另外优化等级对调试的影响很大。TASKING编译器默认可能会开某些优化变量被优化掉后Watch窗口显示的值就会很奇怪甚至显示optimized out。我在性能调优之前通常先把优化等级改成O0或者O1把功能逻辑跑通后再开优化不然排查bug的时候连变量都看不清纯属折磨自己。5. 环境搭建中的典型问题与排查清单5.1 编译、加载、连接三类错误速查表环境搭建过程中遇到的报错归纳起来无非三大类编译阶段错误、加载阶段错误、连接调试器错误。我挑几个碰到次数最多的列在下面方便直接对照排查。错误现象可能原因解决方法编译时找不到Ifx_Types.h等头文件工程include路径被改动或损坏在工程属性中恢复iLLD库路径或者重新导入示例工程编译器报错 License not foundTASKING许可证未激活或过期重新打开License Manager联网激活链接时报内存溢出堆栈设置偏大或代码段超过Flash检查LSL链接脚本中的RAM大小和栈定义烧录时提示 Cannot access target调试器接线错误、目标板未供电检查DAP0/DAP1/GND/RST四根线确认板子供电正常调试器能识别但下载失败Flash保护位被设置用调试器连接后解锁Flash保护或者进入Boot模式擦除整片程序烧进去但没跑起来的现象启动模式错误或时钟配置异常检查启动引脚电平确认TC375启动模式为上电自动运行这几种错误我都踩过尤其识别但下载失败这个坑排查起来最让人抓狂。有一次给一个工程加了HSM相关代码之后下载就报错最后发现是之前测试时无意中把PFlash保护位打开了芯片侧的回收保安机制不允许调试器往对应地址写内容。解决方案是用调试器连接之后进入Debug模式在调试配置里选择全片擦除把保护位一起清掉再重新烧录就正常了。5.2 我踩过的几个坑和后续建议第一个坑是在ADS安装异常之后卸载不干净。后来我发现一旦出现这种问题光用卸载程序是不够的Eclipse在注册表里会残留一堆服务项和扩展点。需要把安装目录手动删掉同时清理注册表里AURIX Development Studio相关的键值再重装才有效。所以在安装之前选好路径、关掉杀毒软件这件事真的很重要。第二个坑是编译通过了但一进调试就报错错误信息还指向一个地址不明的内存区域。查到最后发现是工程里同时包含了板级配置的启动文件和示例工程的启动文件两个core0_main符号冲突了。解决办法是检查工程src目录是不是干净不需要的文件及时排除编译。第三个坑我调试时遇到过GDB Connection Timed Out死活连不上芯片。后来发现是电脑上同时装了好几个调试工具它们的USB驱动冲突导致DAP调试器被识别成了别的设备。处理方式是到设备管理器里把调试器对应的驱动卸载重新插拔让系统重新安装驱动问题立刻解决。最后给点个人建议。在做TC375开发之前先把用户手册的Memory Map和Startup流程那一章过一遍这两块是理解AURIX工程的关键。不用背但心里要有个大概。然后买一块带板载调试器的开发板比如英飞凌官方的TC375开发板这样就省去了调试器接线和驱动适配的麻烦。我当初为了省钱买了裸板加外置DAP调试器结果在环境问题上花的时间比写代码还多。环境搭好了剩下的就是多写多调。TC375这颗芯片性能强、外设复杂但正因为复杂所以把基础打牢之后能做的东西也特别多。祝你早日把板子跑起来点灯顺利。
返回列表