Crystal trim and lld_sleep_compensate_func warning

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
9个帖子/ 0新
最后一篇
mbwjr12
离线
最后一次露面:3个月2周前
加入:2015-11-05 18:33
Crystal trim and lld_sleep_compensate_func warning

亲爱的对话框,

在我最新批次的电路板上调整水晶后,我发现我在lld_sleep_compensate_func()中收到了assert_warning

// If this Assertion hits then the LP ISR lasts longer than the time
//已通过LP_ISR_TIME_XTAL32_CYCLES和LP_ISR_TIME_USEC保留。
if(sleep_lp_cycles &&(sleep_lp_cycles assert_warning(0);

我的水晶饰边设置为0xFF,最大值/最低频率。当我将值返回到默认值0x80时,警告会消失,但是在该点处的BLE频率误差更大。我的调整过程是用频谱分析仪检查BLE频率偏移误差,并相应地调整晶体以最小化误差。

你有什么建议吗?这是一个硬件设计问题,我应该调查用额外的负载电容等购买晶体吗?我使用32MHz,6PF晶体,具有+/- 10ppm公差和老化(XRCGB32M000F1H00R0)。

Thanks,

麦克风

设备:
PM_DIALOG.
离线
最后一次露面:1 day 10 hours ago
职员
加入:2018-02-08 11:03
嗨mbwjr12,

嗨mbwjr12,

感谢您在线问题,并欣赏您对我们的BLE解决方案的兴趣。

我建议首先检查AN-B-075:DA14531硬件指南应用笔记,提供了基于DA14531 SOC的最小参考原理图,电路解释和设计指南。亚博国际官网平台网址

关于晶体振荡器规格,请参阅第3.2.2节和表10。

Crystal Trimming指南在第3.2.2.1节中描述。

谢谢,PM_DIALOG.

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

你好对话框,

是的,我在设计中提到了Crystal Specs和硬件设计指南。我用完全相同的水晶作为devkit。我遵循了布局指南,并从水晶垫下方移除了平面。一般来说,我的设计正如预期的那样。

我有几个问题:

  • 导致这个问题的机制是什么,是因为32MHz晶体比预期更长的时间从将装饰寄存器设置为0xFF,以便从增加的电容开始何时开始?
  • 这种情况导致警告的效果是什么?例如,如果我要使用plt并且它校准了一些我的晶体,使那些板经历了这一点,它会有什么影响?我需要防止这种情况发生在生产中吗?
  • 如果遵循硬件设计指南,对话框半是否有关于解决此问题的建议?例如,我应该尝试7PF水晶吗?
  • 是BLE频率误差的源极,仅通过晶体的准确性决定?如果我在32MHz的理论上有一个理论上完美的水晶,我的频率误差是否为0,或者系统中有其他错误源吗?

Thanks,

麦克风

PM_DIALOG.
离线
最后一次露面:1 day 10 hours ago
职员
加入:2018-02-08 11:03
嗨mbwjr12,

嗨mbwjr12,

为延迟道歉。让我检查一下,我会回复你。

谢谢,PM_DIALOG.

PM_DIALOG.
离线
最后一次露面:1 day 10 hours ago
职员
加入:2018-02-08 11:03
嗨mbwjr12,

嗨mbwjr12,

关于具体警告,这意味着系统花费太多时间睡眠,无法按时醒来,因此SDK警告您。可能它可能与水晶修剪有关,所以我想退房。

This assertion can also occur if the DA14531 is active (no BLE core active) with the interrupts disabled and its time for BLE core to wake up. To do so, at some point when it’s time for the LP_Handler to execute since the interrupts are disabled the ISR delays execution (at some point the interrupts are enabled but the Handler isn't executed on time). With other words that means that the device was sleeping longer than the time defined and the ASSERTION will occur.

我在一些问题下面才能理解更好的问题:

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

谢谢,PM_DIALOG.

mbwjr12
离线
最后一次露面:3个月2周前
加入:2015-11-05 18:33
你好,

你好,

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

2。I have not. I have made two modifications to the SDK:

1.轻松检索BLE地址I Extern'D STRUCT BD_ADDR APP_RANDOM_ADDR

2.如果不存在,我修改了Arch_System以从Config标志而不是OTP检索默认的Cryst Carrim值,如下所示:

#if定义(__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为默认情况下为QFN芯片为0x80,不会导致警告,但它在0xFF时。

我不相信我禁止中断。我已审核了我的代码,并且通过对话框API调用没有发现或间接地发现,我禁用它们的方式。

我已经检查过periph_init。它的唯一调用是gpio_configurepin(lights_init()也只打电话给gpio_configurepin())

void set_pad_functions(void)//设置gpio端口函数模式{gpio_configurepin(clip_switch_port,clip_switch_pin,输入,pid_gpio,false);gpio_configurepin(clip_temp_sensor_en_port,clip_temp_sensor_en_pin,输出,pid_gpio,false);gpio_configurepin(clip_temp_sensor_port,clip_temp_sensor_pin,输入,pid_adc,false);void periph_init(void)// set i2c,spi,uart,uart2序列克斯{#f定义(__da14531__)//禁用p0_0 gpio_disable_hw_reset()的hw复位功能;//在Boost模式下,使DCDC转换器能够为已使用的GPIOS Syscntl_dcdc_turn_on_in_in_boost(syscntl_dcdc_level_3v0)提供vbat_high。#else //上电外设'Power Domain SetBits16(PMU_CTRL_REG,PERIPH_SLEEP,0);而(!(getword16(sys_stat_reg)&per_is_up));setBits16(CLK_16M_REG,XTAL16_BIAS_SH_ENABLE,1);#endif // rom修补程序patch_func();//设置pad功能set_pad_functions(); lights_init(); // Enable the pads GPIO_set_pad_latch_en(true); }

我正在使用自定义代码。固件处于延迟测试版或发布候选阶段,只有最近的批次批次,即晶体调整经历了此警告。如果我有时间,我还没有尝试运行示例代码我会调查这个问题。

如果我不能轻易解决这个问题,似乎只要我的最终调谐值保持在大约75kHz内的初始频率偏移误差,而无需修剪晶体即可导致此警告即可,我应该良好的生产。MAX BLE错误按照规格为150kHz,这应该给我充足的余量,+/- 10ppm初始,+/- 10ppm温度,以及晶体上的一些老化容差。如果这是大约30ppm的总数最坏情况,则可以在产品的预期寿命中获得〜75khz的额外误差。

Thanks,

麦克风

PM_DIALOG.
离线
最后一次露面:1 day 10 hours ago
职员
加入:2018-02-08 11:03
嗨迈克,

嗨迈克,

  1. 您可以使用下载SDK内的生产测试固件(6.0.14.1114 \ Projects \ target_apps \ prod_test \ prod_test),并使用RF主机进行水晶修剪。

请参阅“用户指南”中的24.1.4节 - 链接提供如下:

http://lpccs-docs.dialog-seminiondiond.com/um-b-083/tools/rfmaster.html.

然后请使用Spectrum Analyzer,以便您可以决定哪个是最佳修剪值。

之后,您可以更改默认值在e arch_system.c file. Please check DEFAULT_XTAL32M_TRIM_VALUE_QFN and DEFAULT_XTAL32M_TRIM_VALUE_WLCSP macro which hold the default trimming values.

  1. 如果您可以运行任何SDK示例,则会很好,以检查是否可以复制此项。请默认情况下,您拥有修剪值。

与此同时,我会再次检查它 - 如我之前的评论中所提到的那样,这个警告的可能原因是因为系统花了太多时间睡觉,并且无法按时醒来。

谢谢,PM_DIALOG.

mbwjr12
离线
最后一次露面:3个月2周前
加入:2015-11-05 18:33
I'm posting an update for

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

使用校准的频率计数器,我能够在25℃下达到52ppm,并且在其他温度下可能更糟。这与我使用Spectrum Analyzer(2.402GHz * 52ppm〜= 125khz错误)完全相匹配。它也可能存在错误的电容等。当我在其位置焊接正确的部分时,我的问题得到了解决。

到目前为止,我无法在0x80的默认修剪中使用正确的水晶来重现此问题。如果该更改,我会更新此线程,但否则我认为此问题已关闭。

PM_DIALOG.
离线
最后一次露面:1 day 10 hours ago
职员
加入:2018-02-08 11:03
嗨mbwjr12,

嗨mbwjr12,

非常感谢您的评论和指示。对社区非常有帮助。

谢谢,PM_DIALOG.