TI中文支持网
TI专业的中文技术问题搜集分享网站

AM2434: 层出不穷的问题,继续,DMASS0如何使用

Part Number:AM2434Other Parts Discussed in Thread:LP-AM243, UNIFLASH

我在调试板子时,发现PowerClock_init()函数过不去,跟踪发现,是DMASS0的DMASS0_SEC_PROXY_0_STATUS寄存器的CUR_CNT,在Sciclient_sendMessage()发送消息后,无法计数置1。请问,什么情况下,Sciclient_sendMessage()发送消息,可以使DMASS0的DMASS0_SEC_PROXY_0_STATUS寄存器的CUR_CNT,可以收到计数,并置1???DMASS0应该如何设置???

li ljch:

同样程序,在LP-AM243上就没问题,用在自己板子上,Sciclient_sendMessage()发送消息,DMASS0的DMASS0_SEC_PROXY_0_STATUS寄存器的CUR_CNT,计数就不能增加,DMASS0这部分,应该完全和MCU外部设计硬件无关,同样程序不应该出现这样的问题,估计和仿真调试接口及仿真器识别通讯有关,请专家帮忙看看原因。。。

,

Katherine Wang:

感谢您对TI产品的关注!已为您咨询TI资深工程师,一旦得到回复会立即回复给您。

,

li ljch:

好的,谢谢

,

Katherine Wang:

Sciclient_sendMessage() 是一个低级别的 Sciclient 内部函数,从多个 Sciclient 函数调用,这些函数从 PowerClock_init() 调用。我收集到对 Sciclient_sendMessage() 的调用(用于将 DMASS0_SEC_PROXY_0_STATUS:CUR_CNT 设置为 1)在 PowerClock_init() 的某处被调用,请问它具体在哪里被调用?

您是否在 LP 和您的定制板上使用了相同的启动方法(boot method)?

,

li ljch:

都是同一个工程,代码一模一样,PowerClock_init()>>>Module_clockEnable()>>>SOC_moduleClockEnable()>>>…>>>Sciclient_sendMessage()

,

Katherine Wang:

请问您在 LP 和您的定制板上用的是相同的启动方法(boot method)吗?

,

li ljch:

是的,设置的都是QSPI,我现在的问题,是在用CCS.12.10+XDS110或XDS200调试过程中出来的

,

Katherine Wang:

好的,我了解到您正在使用 CCS/JTAG 进行调试。

您是否使用 SBL NULL(从 OSPI 或 SD 卡启动)或 CCS 脚本进行 SOC 初始化?

SOC初始化方法介绍如下:

SBL NULL (OSPI): https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/EVM_SETUP_PAGE.html#EVM_FLASH_SOC_INIT
SBL NULL (SD boot): https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/EVM_SETUP_PAGE.html#EVM_SOC_INIT_SD_BOOT_MODE
CCS scripts: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/EVM_SETUP_PAGE.html#EVM_SOC_INIT_NOBOOT_MODE

调试时,LP 和自定义硬件平台上的启动(boot)模式引脚设置是否相同呢?

,

li ljch:

两个板子都设置成一样的启动模式,主启动QSPI,第二启动NONE,LP-AM243上时可以正常正确调试的,自己做的板子,用XDS110或XDS200就不行

另外,你说的SBL NULL,是只在串口模式启动吧?这个模式,也是相同结果。

还有,用tools/ccs_load/am243x/load_dmsc.js初始化后,再加载app,也是一样

,

li ljch:

感觉上,是不是和ARM内核调试系统有关系,可以问问专家查一查

,

Katherine Wang:

li ljch 说:PowerClock_init()>>>Module_clockEnable()>>>SOC_moduleClockEnable()>>>…>>>Sciclient_sendMessage()

当您在自定义硬件板上观察到异常行为时,Sciclient()(或其他)API 函数是否返回任何类型的故障?

异常行为是否导致应用程序在 PowerClock_init() 期间失败,或者应用程序是否继续通过 PowerClock_init() 并且稍后发生新的故障?

发生该异常行为时您正在启用哪个模块时钟呢?您可以找到 gSocModules[] 数组中的索引(变量 i)的值,然后检查 ti_power_clock_config.c.c 中的 gSocModules[] 数组,从而确定这一点。

li ljch 说:两个板子都设置成一样的启动模式,主启动QSPI,第二启动NONE

抱歉,我不太理解,一般一次只能选择一种启动模式。

两块板通常都设置为 QSPI 启动(即 SBL 和应用程序在 QSPI 闪存中)。

您什么时候使用NONE作为第二启动?是当通过 JTAG 调试时吗?或者您说第二启动NONE是不是指没有用二次bootloader (secondary bootloader)?

li ljch 说:自己做的板子,用XDS110或XDS200就不行

它们是运行不正常(可能是由于某些 JTAG 硬件信号问题),还是完全无法运行呢?

li ljch 说:说的SBL NULL,是只在串口模式启动吧?

关于这个问题,我要进一步询问TI工程师。

有关bootflow和bootloader的更多详细信息,请参见此处:https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/BOOTFLOW_GUIDE.html

SBL NULL 详细信息可参阅此链接:https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/BOOTFLOW_GUIDE.html#autotoc_md263

li ljch 说:用tools/ccs_load/am243x/load_dmsc.js初始化后,再加载app,也是一样

在设置为 NO BOOT 并使用 CCS 脚本的自定义硬件板上,您是在加载和执行程序后发现问题的吗?

为保证准确性,我有一点想和您确认一下,因为 CCS 脚本方法需要 JTAG 连接,如果 JTAG (XDS110/XDS200) 无法在您的定制板上工作,CCS 脚本是如何在您的定制硬件板上工作的?

请在此处查看有关NO BOOT引脚设置的详细信息:NO BOOT: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/EVM_SETUP_PAGE.html#BOOTMODE_NOBOOT

,

li ljch:

第二启动NONE,就是没有设置Backup Boot。

XDS110或XDS200是可以连接调试MCU的,只是自己板子在PowerClock_init()函数处,无法通过。

SOC_moduleClockEnable()在使能任何模块,比如UART等都会无法通过,进入Sciclient_waitForMessage(),死循环。

昨天我把SBL重新烧了一次,感觉又可以了,请问是什么原因?是不是可能SBL损坏,DMSC检测不到正确的SBL,直接关闭了所有模块?

,

Katherine Wang:

关于SBL NULL的描述可参阅:https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/BOOTFLOW_GUIDE.html#autotoc_md263

SBL NULL 通常flash到 OSPI 或 SD,然后从这些非易失性内存源之一启动。

这是工程师昨天给您的回复,您的最新疑问已经为您转达给了工程师。

,

li ljch:

好的,我看看,谢谢

,

Katherine Wang:

感谢您的反馈。

我目前的理解是:

1. LP 和您的硬件板的启动方法(boot method)都是 SBL OSPI。自定义硬件板无法正确执行应用程序,但具体原因尚不清楚。2. 为了调试该问题,电路板被置于 NO BOOT 模式并且 CCS 脚本用于 SOC 初始化。

1) LP:没有观察到挂起。2) 自定义板:应用程序在 PowerClock_init() 中挂起。

3. 在自定义硬件板上刷新 SBL OSPI 后,不再观察到启动(boot)失败。

您是否在使用 SBL OSPI 时尝试调试自定义硬件板上的故障?

操作方法:

1) 在 System_init() 之前的应用程序启动时添加自旋锁。有关示例,请参见 <SDK>\examples\drivers\boot\sbl_ospi\am243x-lp\r5fss0-0_nortos\main.c2) 重建/刷新应用程序。3) 启动后,在 CCS 中启动目标。4) 不使用“目标连接”GEL 功能连接到 R5F0_0。5) 从 .out 文件加载符号。6) 禁用自旋锁以允许应用程序继续。7) 逐步执行 PowerClock_init() 以查看是否发生挂起。

li ljch 说:昨天我把SBL重新烧了一次,感觉又可以了,请问是什么原因?是不是可能SBL损坏,DMSC检测不到正确的SBL,直接关闭了所有模块?

我无法确定是否一定是这样,需要跟您确认一下。

您是否使用了 Uniflash(UART 或 JTAG)? https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_04_00_17/exports/docs/api_guide_am243x/TOOLS_FLASH.html

最初在自定义硬件板上刷写 SBL/应用程序时,您在刷写过程中是否观察到任何错误?

如果您反复刷机,能否重现同样的开机错误?

,

li ljch:

我加了自旋锁,结果还是一样,请问加自旋锁,目的是什么???

status = Spinlock_lock(CSL_SPINLOCK0_BASE,3);

Spinlock_unlock(CSL_SPINLOCK0_BASE,3);

,

Katherine Wang:

已为您询问TI工程师,稍后会给您回复

,

li ljch:

好的,谢谢

,

Katherine Wang:

解决办法是添加一个软件自旋锁,而不是硬件自旋锁。请参阅 <SDK>\examples\drivers\boot\sbl_ospi\am243x-evm\r5fss0-0_nortos\main.c 示例:

/* call this API to stop the booting process and spin, do that you can connect* debugger, load symbols and then make the 'loop' variable as 0 to continue execution* with debugger connected.*/
void loop_forever()
{volatile uint32_t loop = 1;while(loop);
}

这种类型的旋转可以添加到应用程序中。应用程序启动后,您可以使用 JTAG 连接到内核、加载符号、设置 loop=0 并单步执行 PowerClock_init()。这是为了确认您在bootload时与使用 NO BOOT 模式并从 JTAG 加载应用程序时看到相同的故障。

Katherine Wang 说:如果您反复刷机,能否重现同样的开机错误

如果您反复刷机,能否重现同样的开机错误?

,

li ljch:

你的回复,怎么看不到呢

,

Katherine Wang:

方法是添加一个软件自旋锁,而不是硬件自旋锁。请参阅 <SDK>\examples\drivers\boot\sbl_ospi\am243x-evm\r5fss0-0_nortos\main.c 示例:

/* call this API to stop the booting process and spin, do that you can connect* debugger, load symbols and then make the 'loop' variable as 0 to continue execution* with debugger connected.*/
void loop_forever()
{volatile uint32_t loop = 1;while(loop);
}

这种类型的旋转可以添加到应用程序中。应用程序启动后,您可以使用 JTAG 连接到内核、加载符号、设置 loop=0 并单步执行 PowerClock_init()。

需要确认您在bootload时与使用 NO BOOT 模式并从 JTAG 加载应用程序时看到相同的故障。

想问一下,如果您反复刷机,能否重现同样的boot错误?

,

li ljch:

软件自旋锁,是不是说,循环等待DMSC在后台准备好设备吗?还是什么目的?我这边现象是,只要flash里面固化了SBL,程序就可以正常执行 PowerClock_init(),否则就在PowerClock_init()内部等待死循环。

我看SDK源码,里面的SCI接口函数,应该是DMSC完全控制MCU外设,APP必须要和DMSC通讯,才能使能外设模块。同时,DMSC在QSPI启动模式时,一定要检查Flash中是否有完整的SBL,如果没有,相关外设就禁用了,不知我理解是否正确?

另外,DMSC相当于PC机里面的BIOS,管理外设,但很难用,能否禁止DMSC功能,在Flash全空(0xFF)情况下,让用户自己的SBL或APP完全控制外设的使能和禁止?

,

Katherine Wang:

已将您的疑问转达至TI工程师,您也可以访问(3) AM2434: Problems regarding how to use DMASS0 – Arm-based microcontrollers forum – Arm-based microcontrollers – TI E2E support forums了解最新进展

,

li ljch:

好的,谢谢

,

li ljch:

没有回应呢?

,

Katherine Wang:

实在抱歉,因为E2E英文论坛工程师正处在圣诞假期中,所以要到1月3号以后才能回复

,

Katherine Wang:

li ljch 说:软件自旋锁,是不是说,循环等待DMSC在后台准备好设备吗?还是什么目的?

目的是证明在 SBL 完成后,应用程序代码在 PowerClock_init() 中失败。我认为当使用 CCS 脚本进行 SOC 初始化时,您的硬件上也发生了应用程序故障。

我将总结我目前对情况的理解,能否请您确认我的总结是否正确?

Uniflash 用于将 OPSI SBL、SYSFW 和应用程序写入flash。

LP 和客户 HW 板的boot method都是 SBL OSPI。

LP的boot和执行都正确。
自定义硬件板在启动后无法正确执行应用程序。连接 JTAG 并加载符号后,发现应用程序代码卡在 PowerClock_init() 循环中。

如果板被放置在 NO BOOT 模式下并且 CCS 脚本用于 SOC 初始化:

LP:没有观察到挂起。
自定义板:未观察到挂起。

这意味着该问题仅在自定义硬件上的 OSPI 引导时出现。

在自定义硬件板上刷新 SBL OSPI 后,不再观察到启动故障。

li ljch 说:我这边现象是,只要flash里面固化了SBL,程序就可以正常执行 PowerClock_init(),否则就在PowerClock_init()内部等待死循环。

好的,所以这个问题与 Uniflash 有关,与 SBL、SYSFW、PowerClock_init() 或 DMASS 无关,请问这样理解对吗?对于失败案例,Uniflash 在flash过程中是否报告任何错误呢?

赞(0)
未经允许不得转载:TI中文支持网 » AM2434: 层出不穷的问题,继续,DMASS0如何使用
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1