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

CC1310: assert 函数 dionumberlegal检查出错

Part Number:CC1310

各位好,目前在调试CC1310程序时,有时候会出现dionumberlegal中返回0的情况,查看下来发现iocount的值为0,iocount是从FCFG1中的IOCONF的低8bits获取的,查看是0x1E,是什么原因会导致这个读取出错呢,有人遇到过这个问题吗

Yolande Wang:

您好,已经知悉您的问题,我们会尽全力来协助您。

1. 您可以先查阅 DataSheet 详细了解 FCFG1 寄存器和 IOCONF 字段的配置方式。确保您正确地使用了位偏移和位掩码来读取 iocount 的值。

2. 其次您可以在程序中增加调试输出语句,打印相关的寄存器值和变量,看是否存在与 iocount 相关的异常情况。

3. 您还可以检查芯片与外部电路的连接情况。

尝试以上三种情况如果未能解决您的问题,请您提供一下您正在使用的协议栈版本和相关示例,以供我们更好地快速定位问题。

,

jinghua chen:

1、这个函数不是一直有问题的,是偶尔出现这样的概率,因此位偏移和位掩码是没有问题的

2、在debug下,在gpio.c的dionumberlegal函数中,在return dionumber<iocount中加断点,有时候会停在这里,但并不是每次都会

3、正常情况下不会出现,但有时候我会调用模拟i2c去实现一些io口的操作,有时候会进入fault isr,不知道和这有没有关系,目前不知道怎么排查fault isr的进入原因

,

Yolande Wang:

已经跟进您的问题,需要一些时间。

,

jinghua chen:

目前发现可能是模拟i2c开启另外一个模块时,导致的Vsys电压跌落造成的。Vsys即CC1310的Vdd,该电压由3.54V下降至2.28V,100us左右下降1.26V,300us后恢复,从数据手册上看,允许的最大跌落为20mv/us,应该在范围内,Vdd的电压也在1.8V以上,但低功耗flash情况下允许的最大跌落速率为3mv/us。这个是否会影响FCFG1寄存器的读取?

,

Yolande Wang:

您使用的是哪个版本的 SImpleLink CC13x0 SDK?我们过去曾遇到过这样的已知问题,但已于 2018 年修复。

您定义了 DRIVERLIB_DEBUG 吗?

,

jinghua chen:

我这边用的sdk是比较老的,具体版本不清楚了,gpio.c的更新时间是2015-01-13  版本号为42365。自定义了一个宏为DRV_LIB_DEBUG_EN,可能是当时改了名字。2018年修复的bug能具体告知一下是哪个errat吗,具体的代码可以贴一下,好让我对比查看一下

,

Yolande Wang:

您可以在ccs中右键点击示例->Show Building Settings->Products下,如图所示,查看SDK版本号

,

Yolande Wang:

您可以点击此处查看driverlib发行说明:

,

Yolande Wang:

您能找到并查看您的 driverlib/gpio.h 版本吗?

对于 CC13x0 器件,合法范围在 dioNumberLegal 中按以下方式返回:

return (( dioNumber > 0 ) && ( dioNumber <= ioCount ));

期待您的回复!

,

jinghua chen:

查了相关代码和文件,应该与该代码无关。还是和CC1310的电源电压Vsys快速跌落相关,Vsys即CC1310的Vdd,该电压由3.54V下降至2.28V,100us左右下降1.26V,300us后恢复,从数据手册上看,允许的最大跌落为20mv/us,应该在范围内,Vdd的电压也在1.8V以上,但低功耗flash情况下允许的最大跌落速率为3mv/us。这个是否会影响FCFG1寄存器的读取?

,

Yolande Wang:

正在跟进您的问题,请等候一下。

,

Yolande Wang:

您好,

E2E给出的建议是:

您能否使用稳定的电源进行测试并验证问题是否仍然存在?

期待您的回复。

,

jinghua chen:

稳定电源下程序运行是没有问题的。但想了解目前的vsys的跌落情况在datasheet内,是否在允许的跌落的范围内,部分外设可能会存在不正常的情况

,

Yolande Wang:

收到您的最新需求,已经帮您同步到英文论坛,有消息会立即回复您。

,

Yolande Wang:

默认情况下,设备在低功耗闪存模式下运行,因为使用高功耗闪存模式时电流消耗会增加。 

如数据表中所述,电源电压的最大下降速率为 3 mV/us。电路板上的电源电压远高于此速率。因此,无法正确读取FLASH。

,

jinghua chen:

低功耗的闪存模式是怎么配置的,我查看核对一下程序是否存于低功耗闪存模式

,

Yolande Wang:

您好,

已经跟进您的问题,请稍等一下,有进展会立即回复您。

,

Yolande Wang:

当您使用我们的 SDK 或 SmartRF Studio 时,设备默认配置为低功耗模式。

我核实如何检查设备正在使用哪种模式,请等候一下。

您可以尝试在硬件层面解决这个问题。

电源电压下降 1.26V 是相当大的。

我的建议是尝试找到电压下降的根源并防止其发生,尝试在 SW 中解决它会比较困难。

,

jinghua chen:

对于未生产的设备,我们肯定会采用硬件的解决方式,避免电源电压下降;

但针对已生产的设备,由于不能进行拆机维修,所以期望如果能有软件解决的方式的话,会临时使用一下,希望您这边能给出一下检查方法和修改方式,非常感谢。

,

Yolande Wang:

明白,我已将您的需求反馈给E2E,应该明天会给出答复。

,

Yolande Wang:

您好,

以下是来自E2E的回复:

我还在研究如何启用高功率闪存模式。截至目前,我们认为通过在 FLASH:FSEQPMP: VIN_BY_PASS (0x4003 20A8 [8]) 处写入 0x1 并在 FLASH:FSEQPMP:VIN_AT_X 0x4003 20A8 [14:12] 处设置 0x0 来启用高功耗模式。

我必须对此进行测试,并在周三之前回复您。您也可以在您这边测试一下,看看是否有帮助?您可能需要先在 FLASH:FLOCK 0x4003 2064 处写入 0xAAAA,然后才能写入寄存器 FLASH:FSEQPMP

,

Yolande Wang:

收到来自E2E工程师测试后的回复:

我现在已经测试了上述设置。这是启用高功率闪光模式的方法。在写入 FLASH:FSEQPMP 寄存器之前,必须存储 FLASH:FLOCK 的值并将 0xAAAA 写入 FLASH:FLOCK 寄存器。当您写入 FLASH:FSEQPMP 后,您必须将 FLASH:FLOCK 寄存器重写为其默认值。请注意,此模式会增加电流消耗。

另外,如果使用NVS_write 函数,FLASH:FSEQPAMP 寄存器将恢复为默认值。这意味着设备将返回低功耗闪存模式。

,

jinghua chen:

收到配置信息,谢谢。

我们这边准备在开启额外的电路前开启高功率闪光模式,等电路稳定后,再关闭高功率闪光模式。

这样的处理措施可行吗?想了解一下,开启高功率闪光模式后,多久硬件才会生效,允许20mV/us的下降速率

,

Yolande Wang:

您好,

可以将模式更改回低功耗模式。只需将 0x7 写入 FLASH:FSEQPMP:VIN_AT_X 并将 0x0 写入 FLASH:FSEQPMP:VIN_BY_PASS 即可返回默认模式。

我 不确定此切换的时间,但应该不会花费太多时间。

您可以对此进行评估一下。

赞(0)
未经允许不得转载:TI中文支持网 » CC1310: assert 函数 dionumberlegal检查出错
分享到: 更多 (0)