4. 软件设计类

本节介绍了与软件有关的常见问题。

4.1. 我可以将SWD引脚重新分配到到其他GPIO吗?

是的,可以将SWD重新映射到不同的GPIO。 SWD信号映射是由 SYS_CTRL_REG[DEBUGGER_ENABLE] 位域定义。将此位域设置为:

  • 0x0:禁用调制器。

  • 0x1:将SW_CLK和SW_DIO分别配置到P0_2和P0_5上(WLCSP17封装的默认选项)。

  • 0x2:将SW_CLK和SW_DIO分别配置到P0_2和P0_1上。

  • 0x3:将SW_CLK和SW_DIO分别配置到P0_2和P0_10上(FCGQFN24封装的默认选项)。该配置对WLCSP17封装不可用。

举例

要将SW_CLK和SW_DIO配置为P0_2和P0_1,应将SYS_CTRL_REG[DEBUGGER_ENABLE]位字段编程为0x2,如下所示:

SetBits16(SYS_CTRL_REG, DEBUGGER_ENABLE, 2);

Note

用户固件运行后,即可立即应用当前设置。如果设备重置或重新引导,则引导程序会将SWD引脚恢复为默认设置。 DA14531 datasheet 中的 Note 1 也描述了该过程。

4.2. 我可以使用旧版本Pro-DK(DA14580DEVKT-P)通过单线UART对DA14531子板进行编程吗?

是的,您可以使用旧版本Pro-DK通过单线UART下载固件,进行编程。当DA14531子板连接到旧版本的Pro-DK时候,P0_5 将暴漏在 J7.Pin6(P2_5) 的Header上。 此时需要从J5到J7通过布线连接一个100 Ohm的电阻,如 Figure 1 所示。

_images/wiring.png

Figure 1 DA1458x 专业版开发板接线

举例

如何使用旧的Pro-DK通过单线UART使用生产测试固件对DA14531进行编程。

步骤

  1. 使用Keil IDE从SDK6.0.14打开并编译Production Test项目。Keil项目位于 projects \ target_apps \ prod_test \ prod_test \ Keil_5 SDK路径下。也可以使用已经存在的用于Production Test文件下的二进制文件, 该文件位于 6.0.14.1020 \ binaries \ da14531 \ prod_test 下。

  2. 编译完成后,固件 prod_test_531.hex 将会在 Keil_5\out_DA14531\Objects 文件中被创建。

  3. 打开 SmartSnippets Toolbox V5.0.16, 更多信息请参考 user manual

  4. Board Setup 中,选择 single wire UART communication。请参考 Figure 2

_images/board_setup.png

Figure 2 SmartSnippets Toolbox 电路板设置

  1. 打开 RF Master

  2. 下载 prod_test_531.hex 固件。

  3. 重置 DA1458x Pro DK,然后就可以使用 RF Master了。

4.3. 如何启用调试UART机制以及如何在DA145xx Pro开发套件中对其进行测试?

此演示中使用了SDK6.0.14的ble_app_barebone工程。该工程位于 projects \ target_apps \ ble_examples SDK路径下。您应按照以下步骤启用调试UART机制。此外,还需要 DA145xx Pro 开发套件。

步骤

  1. da1458x_config_basic.h 中定义 CFG_PRINTF 宏 ,参见 Figure 3

_images/CFG_PRINTF.png

Figure 3 定义CFG_PRINTF宏

  1. user_periph_setup.h 中定义了有关UART2的设置,也可以根据应用要求进行修改。P0_6用于启用 UART2 Tx功能 (参见 Figure 4 )。

_images/UART2_settings.png

Figure 4 UART2配置设置

  1. user_barebone.c 中引用 arch_console.h 头文件,参见 Figure 5

_images/arch_console.png

Figure 5 包含arch_console.h头文件

  1. user_app_adv_start() 中添加以下代码:

char ch = 0xFF;
arch_printf("Device starts advertising") ;
arch_printf("\n\r") ;
arch_printf("Print 1 byte") ;
arch_puts(&ch);
arch_printf("\n\r");
  1. 如图 Figure 6 所示,从 J2.27J1.17 连接一个跳线。

_images/DA145xx_wiring.png

Figure 6 DA145xx跳线配置

  1. TeraTerm的配置:确保选择了正确的COM端口,您设置中的COM端口可能有所不同。选择两个选项中最低编号的COM端口。

  2. 运行示例,结果将显示在串行监视器中。请参阅 Figure 7

_images/result.png

Figure 7 串行监视器中的结果

4.4. DA14531有多少种休眠模式可用,以及如何配置?

DA14531 SoC支持 3 种休眠模式,即:

  1. Extended sleep mode (with or without OTP copy) - 扩展睡眠模式(带有或不带有 OTP 副本)。

  2. Deep sleep mode (also known as shipping clocked mode) - 深度睡眠模式(也称为出厂时钟模式)。

  3. Hibernation mode (also known as shipping clock-less mode) - 进阶休眠模式(也称为出厂无时钟模式)。

有关如何将DA14531 SoC配置为三种睡眠模式中的任意一种睡眠模式的概述,请参见 Sleep Mode Tutorial

除了本教程之外,请参考 DA14531 Bluetooth® Low Energy Eddystone beacon with Hibernation Or Deep Sleep ModeDA14531 Configuring Hibernation and State-aware hibernation mode 软件例程。

4.5. 如何制作带有广播扫描指示(ADV_SCAN_IND)数据包的 DA14531 广播?

在非连接模式下运行时候,外设使用 ADV_SCAN_IND PDU 发送扫描响应。此时设备应配置为不可连接的广播模式,并且还应定义扫描响应数据。有关更多信息,请参见 Simple Beacon ExampleBluetooth® Low Energy Advertising Tutorial

4.6. 我可以在睡眠模式下使用DA14531中任意一种定时器吗?

是的,Timer1可以在睡眠模式下保持Active状态。因为其时钟源可以在 System Clock (sys_clk)Low Power Clock (lp_clk) 之间进行选择。 有关更多信息,请参见 DA14531 Timer1 软件例程。

Note

无论将DA14531配置成哪一种睡眠模式,系统时钟将会被禁用。取而代之的是 Low Power Clock (lp_clk) 将被当作时钟源以供设备运行。

4.7. 将我的固件从DA14585迁移到DA14531时,我应该遵循什么?

我们最新的SDK6.0.14对DA14531和DA14585/586通用。如果现有应用程序是基于DA14585/586和SDK6.0.10,该应用程序可以轻松移植到 DA14531和SDK6.0.14中。大多数功能将自动更改。在完成迁移之前,仅需检查一些配置。 文档 SDK Porting Guide 描述了需要将基于DA14585/DA14586 SDK 6.0.10版本开发的应用程序移植到最新的DA14585/586/531 SDK 6.0.14版本中的更改和步骤。

4.8. 无时钟唤醒和时钟唤醒之间有什么区别?

不同之处在于,仅在系统处于hibernation mode(进阶休眠模式)时, Clockless wake-up controller (无时钟唤醒控制器)将会被启用, 而系统在处于extended 或 deep sleep mode(拓展或深度休眠模式)下, Clocked wake-up controller (时钟唤醒控制器)将会被启用。 在hibernation mode(进阶休眠模式)下,所有时钟都将停止。但在extended 或 deep sleep mode(拓展或深度休眠模式)下,唤醒控制器将驻留在 PD_SLP 电源域中,并在 LP_CLK 上运行。

请在 DA14531 datasheet 中的 Sections 17 and 18 参见更多有关时钟唤醒/无时钟唤醒的信息。

Sleep Mode tutorial 中展示了无时钟唤醒。Bluetooth® Low Energy Notify Button Wakeup 软件例程展示了时钟唤醒。

4.9. HW RESET(硬件复位)功能可以重新分配到任意GPIO上吗?

不可以。硬件复位专用于 P0_0 并且只能禁用。 如果要将其禁用,应将 WR_CTRL_REG[DISABLE_HWR] 字段设置为1。 此外,SDK的驱动程序提供了禁用P0_0上的硬件复位功能的功能接口: GPIO_Disable_HW_Reset() 。 驱动程序位于SDK路径 6.0.14.1114 \ sdk \ platform \ driver \ gpio 中。 然而,Power-On-Reset (POR) (上电复位)可以重新分配到任意可用的GPIO上。 其中极性通过 POR_PIN_REG[POR_PIN_POLARITY] 来设置 。 GPIO可以通过 POR_PIN_REG[POR_PIN_SELECT] 来设置。 其中复位时间可以通过 POR_PIN_REG[POR_TIMER_REG] 来设置。 其中 POR_TIME: Time = POR_TIME x 4096 x RC32K clock period 。 用户必须在POR_TIME的持续时间内将复位引脚保持为高电平或者低电平(基于你所设置的极性)。

4.10. 如何使系统进入Hibernation(clockless or shipping)进阶睡眠模式

Configuring to Hibernation Mode 示例中展示了实现该模式的整个过程。

Sleep Mode tutorial 中也展示了如何将DA14531配置为进阶睡眠模式。

4.11. DA14531的QDID是什么?

请使用以下连接来查看DA14531 Controller, Host和 Profile Subsystems的 QDID。

  1. QDID Controller Subsystem

  2. QDID Host Subsystem

  3. QDID Profile Subsystem

4.12. 如何修改广播数据

根据Bluetooth Low Energy规范,广播数据(和扫描响应数据)应遵循特定格式。请参考 Bluetooth® Low Energy Advertising Tutorial 中的 3.1. Changing the Advertising Data 章节,以了解更改广播数据的正确步骤。

4.13. DSPS和AT Codeless是否也可用于DA14531 TINY Module上?

是的,DSPS和AT Codeless例程可用于DA14531 TINY Module上。

Dialog Serial Port Service (DSPS)

DSPS例程仿真了串行通信。提供了RS-232连接的简单替代方案,包括通过低功耗蓝牙实现的软件流控制逻辑。 SPS例程包括了应用程序和配置文件源代码,并支持GAP中央/外围设备角色。

请点击 DSPS support page 来获取更多有关DSPS例程的信息。

CodeLess™ AT Commands

CodeLess例程使您可以通过一组AT命令快速入门无线物联网应用程序。 CodeLess AT命令平台允许通过Bluetooth®Low Energy控制本地UART连接的设备以​​及远程设备。 您可以创建简单的演示/应用程序/概念验证而 无需任何代码开发,也可以在顶层构建自己的应用程序!

请点击 CodeLess support page 来获取更多有关Codeless例程的信息。