水晶修剪和lld_sleep_compensate_func警告

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support。我们会在接下来的几天修复bug /优化搜索和标记。
9个员额/0个新员额
最后发表
mbwjr12
离线
最后看到:3个月2周前
加入:2015-11-05 18:33
水晶修剪和lld_sleep_compensate_func警告

亲爱的Dialog,

在我最近几批主板上调试完水晶后,我发现我在lld_sleep_compensate_func()中收到了ASSERT_警告

//如果此断言命中,则LP ISR持续时间超过该时间
//通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留。
If (sleep_lp_cycles && (sleep_lp_cycles < slp_period))
ASSERT_WARNING (0);

我的晶体微调设置为0xFF,即最大值/最低频率。当我将该值返回到默认值0x80时,警告消失,但此时我的BLE频率误差更大。我的调整过程是使用频谱分析仪检查BLE频率偏移误差,并相应地调整晶体以将误差降至最低。

您有什么建议吗?这是硬件设计问题吗?我是否应该调查购买具有额外负载电容等的晶体?我使用的是32MHz、6pF晶体,公差为+/-10ppm,并且老化(零件号XRGB32M000F1H00R0)。

谢谢,

迈克

设备:
PM_对话框
离线
最后看到:2天1小时前
工作人员
加入:2018-02-08 11:03
你好,mbwjr12,

你好,mbwjr12,

感谢您在线提出的问题以及对我们的BLE解决方案的兴趣。

我建议先检查一下AN-B-075:DA14531硬件指南应用说明,为基于DA14531 SoC的BLE应用提供了最小参考原理图、电路说明和设计指南。亚博国际官网平台网址

晶体振荡器的规格请参考3.2.2节及表10。

晶体修整指南见第3.2.2.1节。

谢谢,PM_Dialog

mbwjr12
离线
最后看到:3个月2周前
加入:2015-11-05 18:33
你好,对话框,

你好,对话框,

是的,我在设计时参考了水晶规格和硬件设计指南。我使用了与开发工具包相同的水晶。我遵循了布局指南,移除了水晶垫下面的平面。总的来说,我的设计和预期的一样。

我有几个问题:

  • 导致此问题的机制是什么?是不是因为32MHz晶体从将微调寄存器设置为0xFF开始所需的时间比预期的要长?
  • 导致警告的这种情况的影响是什么?例如,如果我使用PLT,它校准了我的一些晶体,使这些板出现这种情况,它会产生什么影响?我需要防止这种情况在生产中发生吗?
  • 如果遵循了硬件设计指南,Dialog Semi是否有解决这个问题的建议?例如,我应该试试7pF晶体吗?
  • BLE频率误差的来源仅仅由晶体的精度决定吗?如果我有一个理论上完美的晶体在32MHz,我的频率误差是0还是系统中有其他的误差来源?

谢谢,

迈克

PM_对话框
离线
最后看到:2天1小时前
工作人员
加入:2018-02-08 11:03
你好,mbwjr12,

你好,mbwjr12,

很抱歉耽搁了。让我查一下,然后给你答复。

谢谢,PM_Dialog

PM_对话框
离线
最后看到:2天1小时前
工作人员
加入:2018-02-08 11:03
你好,mbwjr12,

你好,mbwjr12,

关于具体的警告,这意味着系统花费了太多的睡眠时间,无法按时醒来,所以SDK会警告你。可能和水晶装饰没有关系,所以我想查一下。

如果DA14531是活动的(没有BLE核心活动),并且中断被禁用,并且BLE核心唤醒的时间也会发生此断言。为此,在LP_Handler执行的某个时刻,由于中断被禁用,ISR会延迟执行(在某个时刻,中断被启用,但处理程序没有按时执行)。换句话说,这意味着设备的睡眠时间比定义的时间长,断言将发生。

为了更好地理解这个问题,我在下面提出一些问题:

  1. 你是使用RCX还是外部晶体振荡器作为低功率时钟?
  2. 您是否修改了BLE_WAKEUP_LP_处理程序或任何SDK文件?
  3. 请检查您是否手动禁用代码任何部分中的中断?
  4. 此外,请检查periph_init()中是否有延迟系统的代码段?每次唤醒时都会执行periph_init(),因此如果有延迟系统的代码,也会延迟唤醒。
  5. 您使用的是自定义代码还是任何SDK示例?此行为是否可以在任何SDK示例中复制?

谢谢,PM_Dialog

mbwjr12
离线
最后看到:3个月2周前
加入:2015-11-05 18:33
你好,

你好,

1.我使用的是RCX,没有使用外部LP晶体。

2.我没有。我对SDK做了两个修改:

1.为了方便检索BLE地址,我使用外部结构bd\u addr app\u random\u addr

2.我修改了arch_system来从配置标志检索默认的水晶修剪值,而不是OTP,如果它不存在,像这样:

#if define (__DA14531__) +#ifdef CFG_DEFAULT_XTAL32M_TRIM_VALUE^M +#define DEFAULT_XTAL32M_TRIM_VALUE_QFN (CFG_DEFAULT_XTAL32M_TRIM_VALUE) +#define DEFAULT_XTAL32M_TRIM_VALUE_WLCSP (CFG_DEFAULT_XTAL32M_TRIM_VALUE) +#else (CFG_DEFAULT_XTAL32M_TRIM_VALUE) +#else (CFG_DEFAULT_XTAL32M_TRIM_VALUE

QFN芯片的CFG_DEFAULT_XTAL32M_TRIM_值默认为0x80,这不会导致警告,但在0xFF时会导致警告。

3.我不相信我曾经禁用过中断。我已经检查了我的代码,没有发现通过对话API调用直接或间接禁用中断的方式。

4.我已经检查了periph_init。它只调用GPIO_ConfigurePin(lights_init()也只调用GPIO_ConfigurePin())

void set_pad_函数(void)//设置gpio端口功能模式{gpio_配置引脚(CLIP_开关_端口,CLIP_开关_引脚,输入,PID_gpio,false);gpio_配置引脚(CLIP_TEMP_传感器_EN_端口,CLIP_TEMP_传感器_EN_引脚,输出,PID_gpio,false);gpio_配置引脚(CLIP_TEMP_传感器_端口,CLIP_TEMP_传感器_引脚,输入,PID_,false)}初始外围(void)//设置i2c、spi、uart、uart2串行时钟{#如果已定义(u DA14531_uuuu)//禁用P0_0 GPIO的硬件重置功能禁用硬件重置();//在Boost模式下,启用DCDC转换器为所用GPIOs系统提供VBAT_HIGH(系统控制单元DCDC_电平3V0);\(PMU_CTRL_REG,PERIPH_SLEEP,0);while(!(GetWord16(SYS_STAT_REG)和PER_IS_UP));SetBits16(CLK_16M_REG,XTAL16_BIAS_SH_ENABLE,1);#endif//ROM patch patch _func();//设置焊盘功能集_pad函数();lights_init()//启用焊盘GPIO集_闩锁((true)}

5.我使用自定义代码。固件是在一个后期测试版或发布候选阶段,它只是在最近的一批板,这个警告经历了晶体调优。我还没有尝试运行样本代码,如果我有时间,我会研究这个。

如果我不能很容易地解决这个问题,它似乎只要我的最终调谐值保持初始频率偏移误差在75KHz左右,没有修剪太多的晶体导致这个警告,我应该是好的生产。最大BLE误差按照规格是150KHz,这应该给我足够的裕度与+/-10ppm的初始,+/-10ppm的温度,和晶体上的一些老化公差。如果这大约是30ppm的最坏情况,这是~75KHz的额外误差可能在产品的预期寿命。

谢谢,

迈克

PM_对话框
离线
最后看到:2天1小时前
工作人员
加入:2018-02-08 11:03
嗨,迈克,

嗨,迈克,

  1. 你可以下载SDK中的生产测试固件(6.0.14.1114\projects\target_apps\prod_test\prod_test),并使用RF Master进行晶体微调。

请参阅《用户指南》第24.1.4节-链接如下:

http://lpccs-docs.dialog-semiconductor.com/UM-B-083/tools/RfMaster.html

然后请使用频谱分析仪,以便您可以决定哪一个是最好的微调值。

之后,您可以修改arch_system.c文件中的默认值。请检查DEFAULT_XTAL32M_TRIM_VALUE_QFN和DEFAULT_XTAL32M_TRIM_VALUE_WLCSP宏,它们持有默认的微调值。

  1. 如果您可以运行任何SDK示例来检查它是否可以被复制,那就太好了。请同时使用默认值和自己的微调值。

与此同时,我将再次检查它——正如我在之前的评论中提到的,出现此警告的可能原因是系统睡眠时间过长,无法按时醒来。

谢谢,PM_Dialog

mbwjr12
离线
最后看到:3个月2周前
加入:2015-11-05 18:33
我在更新

我正在为遇到相同问题的其他人发布更新。我将其诊断为坏晶体:最新的生产测试批次实际上没有像以前的批次一样使用XRCGB32M000F1H00R0,并且某些替代晶体被未知特性替代。

使用校准过的频率计数器,我能够显示它在25摄氏度时关闭了52ppm,在其他温度下可能更糟。这与我在频谱分析仪上看到的误差完全匹配(2.402GHz*52ppm~=125KHz误差)它也可能有错误的电容等。我的问题解决了,当我焊接正确的部分在其位置。

到目前为止,我还不能在默认修剪0x80的正确晶体上重现这个问题。如果有变化,我将更新这个线程,否则我认为这个问题已经结束了。

PM_对话框
离线
最后看到:2天1小时前
工作人员
加入:2018-02-08 11:03
你好,mbwjr12,

你好,mbwjr12,

非常感谢您的意见和指示。这对社区很有帮助。

谢谢,PM_Dialog