公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

您好,我正在使用 CYT2B9,请问可以使用 IAR + J-link 进行 Corex-M4 工程的调试吗?

我们目前的情况是只能使用 IAR+J-link调试 Cortex-M0 的工程,调试 Cortex-M4 的工程时会依次弹出两个错误窗口。如下图所示。

错误窗口1错误窗口1错误窗口2错误窗口2

0 点赞
1 解答
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi Pengzw,

我按照KBA文档的步骤进行安装调试,并不能复现您的问题。

你可以先尝试使用我司提供的SDL的sample project,不要做任何修改,按照文档的步骤做一次看看是否有问题。请先操作cm0plus,成功后关掉再打开cm4进行操作。

在原帖中查看解决方案

0 点赞
16 回复数
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi pengzw,

关于如何使用J-link调试,我司有份KBA文档,您可以在myICP查找002-28450. 

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

谢谢,我先尝试一下,稍后回复您!

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

@Roy_Liu ,您好!

我按照https://community.infineon.com/t5/Knowledge-Base-Articles/Debug-and-Program-Traveo-II-MCU-with-J-Lin... 中介绍的方式(Jlink+IAR的方法)尝试,但还是不能调试 Cortex-M4 工程。下面是我的详细步骤,请问能帮我看下是哪里出了问题吗?

1. 删除 XXX_Debug.jlink 文件,如下图所示。

0.1.png0.2.png

2. 点击“Download and Debug”按钮,如下图所示。

1.png

3. 下图可见 Cortex-M0 工程已经进入调试(程序已经刷写到 Flash)2.png

4. 停止 Cortex-M0 工程的调试,如下图所示。3.png

5. 如下图所示,Cortex-M0 工程已经退出调试。4.png

6. 点击 Cortex-M4 工程的 “Download and Debug”按钮。5.png

7. 弹出错误窗口,如下面两张图所示。6.png7.png

谢谢!

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi Pengzw,

我按照KBA文档的步骤进行安装调试,并不能复现您的问题。

你可以先尝试使用我司提供的SDL的sample project,不要做任何修改,按照文档的步骤做一次看看是否有问题。请先操作cm0plus,成功后关掉再打开cm4进行操作。

0 点赞
lock attach
Attachments are accessible only for community members.
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

您好,@Jimmy_L 

我已经按照您的提示,按照 KBA 文档的步骤(Debug and Program Traveo II MCU with J-Link - KBA2... - Infineon Developer Community),能够对 Cortex-M4 示例工程进行调试。

但是我还有一些问题。当我把示例工程 Cortex-M4f 的工程切换到 rtos 的配置时,不能正常启动 FreeRTOS(卡在了 svc 0 指令)。可能是某些原因触发了 Hardfault,导致 svc 中断不能正常响应。请问能帮我分析下可能的原因吗?对示例程序的修改见附件

下面是我的环境。

1. IAR Embedded Workbench for ARM 8.42.1

2. 使用 TVII_Sample_Driver_Library_7.1.0.exe 重新安装的 SDL。

3. J-Link EDU Mini

4. CYT2B97CACES,自制板。

 

下面是我的详细步骤。

01. 将“TVII_Sample_Driver_Library_7.1.0\tviibe2m\src\main_cm4.c”替换为附件的“main_cm4.c”,附件程序添加了 FreeRTOS 线程的创建和调度器的启动。

02. 打开“TVII_Sample_Driver_Library_7.1.0\tviibe2m\tools\iar\flash”目录下的“tviibe2m_flash_cm0plus_template.eww”和“tviibe2m_flash_cm4_mc_template.eww”工程。并分别切换为 rev_c 和 rtos 配置。0101

03. 修改 Debugger 配置为 J-Link,并将接口改为 SWC02020303

04. 为两个工程执行rebuill all,给板子重新供电,下载调试 Cortex-M0 工程。0404

05. 如下图所示,Cortex-M0 工程已经进入调试,然后点击退出调试按钮。0505

06. 点击图中按钮,下载调试 Cortex-M4 工程。0606

07. 如下图所示,会卡在下载界面,点击“cancel”,再次尝试下载调试。07070808

08. 如下图所示,已经进入调试界面。0909

09. 如下图所示,在线程函数中打断点,点击运行。1010

10. 如图所示,FreeRTOS 未能正常启动,卡在了“svc 0”指令处。从 Fault Exception View 窗口中看到已出发 Hardfault。1111

为了查找在哪里触发的 Hardfault,我又尝试了下面步骤。

01. 如下图操作,确保进入调试时停在入口地址。

01.png

02. 按照上面步骤,重新进入 Cortex-M4 工程的调试。点击单步运行按钮,执行第一条指令。02.png

03. 触发 Hardfault。03.png

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi pengzw,

我用你的code也碰到了你的问题,在第一次烧录卡在下载界面的时候,如果你点cancle,会报如下的debug log

JimmyLiu_0-1662345543454.png

这时候不管你烧写什么代码进去都会发生异常卡在svc 0处。

此时需要用auto flash utility先做一下erase and program把芯片恢复正常。

关于您的test code,您在创建task的时候定义的stack size,如果我把它改成configMINIMAL_STACK_SIZE就不会出现您之前的问题,第一次烧录就可以正常并进行debug。这个问题可能跟SRAM有关,您也可以尝试改user stack的大小,比如您用C 版本的chip的话,可以改linker_directives_tviibe_rev_c.icf。

JimmyLiu_0-1662357255712.png

针对您原先代码,我测试了一下以下改动

cm0plus_sram_reserve改为16K

cm4_heap_reserve改为4K

cm4_stack_reserve改为32K

这样编译烧录就没有问题。

0 点赞
lock attach
Attachments are accessible only for community members.
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

您好,我按照您的提示再次做了尝试。但还是之前的现象。我的操作过程如下。

1. 修改代码

1.1 将 main_cm4.c 中创建线程的栈大小改为 configMINIMAL_STACK_SIZE。

1.2 将 linker_directives_tviibe_rev_c.icf 中的 cm0plus_sram_reserve 改为 16K

1.3 将 linker_directives_tviibe_rev_c.icf 中的 cm4_heap_reserve 改为 4K

1.4 将 linker_directives_tviibe_rev_c.icf 中的 cm4_stack_reserve 改为 32K

2. 安装 AutoFlashUtil

按照 Solved: Auto Flash Utility download link - Infineon Developer Community 中的地址下载AutoFlashUtil 并安装。

3. 使用 AutoFlashUtil 擦除并编程

在 Cypress Auto Flash Utility 1.0\bin 中打开 PowerShell,并执行下面命令。

 

 

PS C:\Program Files (x86)\Cypress\Cypress Auto Flash Utility 1.0\bin> .\openocd.exe -s ..\scripts\ -f ..\scripts\interface\jlink.cfg -c "transport select swd" -f ..\scripts\target\traveo2_2m.cfg -c "init; reset init; flash erase_sector 0 0 last; program C:/Users/vienp/Desktop/CYT2B7/driver_lib/TVII_Sample_Driver_Library_7.1.0/tviibe2m/tools/iar/flash/cm4_mc/rtos/Exe/cm4.hex verify exit"

 

 

运行结果如下。

01.png

4. 按照上一次回复(Sep 03, 2022 12:45 PM)的步骤依次下载、进入调试、退出调试 Cortex-M0 工程,然后依次下载、进入调试 Cortex-M4 工程。

并没有卡在编程窗口(在使用 AutoFlashUtil 之前,很多时候也不会卡在编程窗口)。会卡在 svc 0 指令处。

5. Debuglog 的分析

Debuglog 显示是在 0x8040000 地址处发生的 Hardfault 的,但是我使用的芯片 CYT2B97CAC 的 SRAM 地址范围是 0x8000000 ~ 0x803ffff, 0x8040000 恰好在此范围之外。这个地址感觉不像是我的程序访问的(不在调试模式下,两个 CPU 都可以正常运行),是不是调试环境哪里配置的不对导致的?

 

修改后的 main_cm4.c、linker_directives_tviibe_rev_c.icf 以及 Cortex-M4 工程的 Debuglog 见附件。

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi pengzw,

先说一下我这边的调试环境,因为我没有CYT2B9的芯片,我用的是我司CYTVII-B-E-176-SO demo板,上面是CYT2B7的芯片,版本是D版本,区别也就是1M和2M的flash大小。SDL是目前官网最新的7.5.0. debug的参数设置都是根据KBA设置的默认的。目前我用SDL里面的RTOS sample code和您的test code都可以正常调试,无法复现您的问题。请问您有试过我司SDL的sample code吗?

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

我使用的是"TVII_Sample_Driver_Library_7.1.0\tviibe2m"里面的示例程序,并在 Cortex-M4 工程中添加了创建线程和启动 FreeRTOS 的操作。

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi pengzw,

请问您不修改sample code的话可以正常debug吗?

从log file可以看到是PRECISERR和BFAR的错误,查询了资料可能还是RTOS的线程堆栈大小的问题。您也可以升级SDL到最新的7.5.0,先测试一下标准例程的功能。

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

@Jimmy_L 您好!

我还在排查这个问题。请问有下图中这个下载算法的源码吗?或者有制作CYT2B9下载算法的指导资料吗?

01.png

 

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi pengzw,

你这个截图有个问题,你load的文件还是在cypress底下的,这个应该早换成infineon了。这个问题是在安装完IAR后,copy完相应的文件,需要删除\arm\config\devices\Cypress\Traveo-II文件夹,详情参考\T2G_Sample_Driver_Library_7.5.0\misc\tools\iar目录里面的Readme。正常的log应该如下

JimmyLiu_0-1662689088301.png

另外您说的下载算法应该指的是programming的方法,这个如果您有注册myICP,可以在myICP的programming specs里面找到相应的文档。如果没有注册,请参考https://www.infineon.com/cms/en/product/microcontroller/#!details 进行注册。

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

请问你们上海有办公地点吗?我想当面请教下!

0 点赞
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

Hi pengzw,

请问现在还是那个老问题吗?用我们的SDL提供的sample project跑也会出现同样的问题吗?或者您也可以先不跑RTOS,先测试其它的例程进行调试,确保J-link是可以正常工作的,然后再去测试RTOS。

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

关于FreeRTOS 线程栈与 linker_directives_tviibe_rev_c.icf 的配置的问题。

FreeRTOS 的 Heap 由 heap_4.c 中的 static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] 数组分配,与 linker_directives_tviibe_rev_c.icf 指定的 heap 和 stack 空间无关。

示例工程中 configTOTAL_HEAP_SIZE 的大小为 8192,configMINIMAL_STACK_SIZE 的大小为 128,所以按照之前创建线程的方式应该是可以满足的。

0 点赞