DA14531 学习笔记(二)经验总结

DA14531 学习笔记(二)经验总结

烧录

Flash

DA14531 为了降低成本和功耗,片内有32KB的OTP用于存放用户程序。
在这里插入图片描述
OTP只能烧录一次,为了方便调试,DA14531还支持外部flash。
在这里插入图片描述
使用外部flash时,首先需要根据硬件配置flash对应管脚
在这里插入图片描述
在这里插入图片描述
然后连接烧录就可以了
在这里插入图片描述

OTP

正式生产的时候就需要将外部flash去掉,烧录OTP。OTP烧录分为两部分,OTP header 和 固件

OTP header
  • 禁用jtag管脚
    在这里插入图片描述
    在这里插入图片描述

  • 使用OTP

    两个标志位需要选择yes

  • 设置MAC地址

    使用public 地址时,可以设置这里

  • OTP 长度

    上电后,需要使用DMA将OTP中的代码搬运到RAM(OTP不能跑代码),实测这里不填实际长度也可以(使用默认FFFFFFFF)

在这里插入图片描述

在这里插入图片描述

SDK 框架

DA14531 SDK不建议修改程序结构,也就是不建议修改mian函数。程序的执行流程如下
在这里插入图片描述
在这里插入图片描述
根据SDK框架的程序执行流程,用户可以在回调函数中添加自己的代码,而不需要直接修改mian函数。
回调函数在user_callback_config.h 文件中
在这里插入图片描述

MAC地址

静态随机地址

选择使用静态随机地址
在这里插入图片描述
默认静态随机地址生成函数,可以修改成自己的。
在这里插入图片描述
也可以在广播开始前修改

#include "llm.h"
#include "lld_util.h"

/* 使用静态地址时, 可以修改这里修改地址 */
llm_le_env.rand_add.addr[0] = 0x00;
llm_le_env.rand_add.addr[1] = 0x01; 
llm_le_env.rand_add.addr[2] = 0x02;
llm_le_env.rand_add.addr[3] = 0x03;
llm_le_env.rand_add.addr[4] = 0x04;
llm_le_env.rand_add.addr[5] = 0xC9;

广播开始后修改地址

#include "llm.h"
#include "lld_util.h"

llm_le_env.rand_add.addr[0] = 0x01;
...
lld_util_set_bd_address(&llm_le_env.rand_add, ADDR_RAND);

公共地址

设置公共地址
在这里插入图片描述
公共地址默认设置
在这里插入图片描述

当OTP header 中的地址字节不是 0xFFFFFFFFFFFF 时,CFG_NVDS_TAG_BD_ADDRESS 的默认地址将会无效,工程使用OTP Header 中的MAC地址

程序可以通过 nvds_get_func 函数来获取公共地址

#include "llm.h"
/* 获取广播地址 */
uint8_t addr[6];
nvds_get_func(NVDS_TAG_BD_ADDRESS, NULL, addr);

低功耗

DA14531的框图如下所示,突出显示的红色框是放置保留存储器块的位置,其中包括SysRAM1(16kB),SysRAM2(12kB)和SysRAM3(20kB)。因此,总共有48kB的系统RAM可用。
在这里插入图片描述

DA14531 有三种休眠模式:

  1. 扩展睡眠模式

    在扩展休眠模式下,除 SysRAM、无线电域和外设域外设域外,系统域将断电,XTAL16M 时钟将停止。SysRAM 仍通电以保留数据,但无法访问。

    AON电源域为ON,用于将数据保存在保留RAM中,并为可以唤醒系统的模块(即唤醒计时器,正交解码器和BLE计时器)供电。

  2. 深度睡眠模式

    在深度睡眠模式下,为了进一步降低功耗,SysRAM也断电。其他电源域的状态与在扩展休眠模式下的状态相同。

    该器件可以使用时钟唤醒控制器、GPIO、RTC 警报或定时器1从深度睡眠中唤醒。

  3. 休眠休眠模式

    与前两种睡眠模式相比,在休眠模式下,PD_SLP(睡眠电源域)域将关闭。这意味着CRG(时钟和复位发生器)已关闭电源,这就是为什么此模式称为无时钟模式的原因。

    设备只能从配置为唤醒的 GPIO 中唤醒。用于将设备从休眠状态唤醒的可用GPIO P0_1,P0_2…P0_5。

在这里插入图片描述

睡眠模式由 SDK 中的#defines配置

  • Extended Sleep mode

    扩展睡眠模式可以选择 ARCH_EXT_SLEEP_OTP_COPY_ON 模式(代码RAM休眠,休眠后功耗会更低(只保留数据RAM),但是退出休眠时需要从OTP中将代码搬运到RAM,这部分操作也会耗电,如果休眠周期小于1s,不建议使用 ARCH_EXT_SLEEP_OTP_COPY_ON 模式)和 ARCH_EXT_SLEEP_ON模式。休眠时SDK会自动计算出RAM Blank使用情况,将未使用的RAM关闭。
    在这里插入图片描述
    扩展睡眠模式可以通过RTC,Timer1, BLE timer唤醒,例如如果有BLE事件(如定时广播等),则BLE Timer可以唤醒DA14531.

    如果没有BLE唤醒,也可以设置额外的定时唤醒周期。
    在这里插入图片描述
    在这里插入图片描述

  • Deep Sleep mode
    在这里插入图片描述

  • Hibernation mode

    深度睡眠模式和 休眠休眠模式比较类似,可以选择性关闭RAM 或者保留全部RAM,当关闭所有RAM后,休眠时更省电,但是唤醒时需要重新将代码从OTP加载到RAM。使用的时候需要定义相对的宏定义并定义唤醒方式,具体可以参考SDK中\projects\target_apps\ble_examples\prox_reporter 或者 扩展SDK中的hibernation 例子
    在这里插入图片描述

    /**
     ****************************************************************************************
     *
     * @file user_proxr.h
     *
     * @brief Proximity Project application header file.
     *
     * Copyright (C) 2015-2020 Dialog Semiconductor.
     * This computer program includes Confidential, Proprietary Information
     * of Dialog Semiconductor. All Rights Reserved.
     *
     ****************************************************************************************
     */
    
    #ifndef _USER_PROXR_H_
    #define _USER_PROXR_H_
    
    /**
     ****************************************************************************************
     * @addtogroup APP
     * @ingroup RICOW
     *
     * @brief User Application entry point.
     *
     * @{
     ****************************************************************************************
     */
    
    /*
     * INCLUDE FILES
     ****************************************************************************************
     */
    
    #include <stdint.h>
    #include "gapc_task.h"
    
    /*
     * DEFINES
     ****************************************************************************************
     */
    
    /****************************************************************************************
    * Selects the sleep mode that the device will enter after advertising completion        *
    *  - CFG_APP_GOTO_DEEP_SLEEP        Deep Sleep mode                                     *
    *  - CFG_APP_GOTO_HIBERNATION       Hibernation mode (DA14531 only)                     *
    *  - CFG_APP_GOTO_STATEFUL_HIBERNATION   Stateful Hibernation mode (DA14531 only)       *
    * Note: If none is defined, then system will enter the selected Extended sleep mode     *
    *                                                                                       *
    * IMPORTANT: If CFG_APP_GOTO_STATEFUL_HIBERNATION is defined, CFG_STATEFUL_HIBERNATION  *
    * shall be defined as well (in Options for Target 'DA14531' --> Asm -->                 *
    * Conditional Assembly Control Symbols --> Define:)                                     *
    ****************************************************************************************/
    #undef CFG_APP_GOTO_DEEP_SLEEP
    
    #if defined (__DA14531__)
    #undef CFG_APP_GOTO_HIBERNATION
    #undef CFG_APP_GOTO_STATEFUL_HIBERNATION
    
    #if defined (CFG_APP_GOTO_HIBERNATION)
    /****************************************************************************************
     * Hibernation mode configuration                                                       *
     ****************************************************************************************/
    #define CFG_HIBERNATION_RAM1            PD_SYS_DOWN_RAM_OFF
    #define CFG_HIBERNATION_RAM2            PD_SYS_DOWN_RAM_OFF
    #define CFG_HIBERNATION_RAM3            PD_SYS_DOWN_RAM_OFF
    #define CFG_HIBERNATION_REMAP           REMAP_ADDR0_TO_ROM
    #define CFG_HIBERNATION_PAD_LATCH_EN    false
    #elif defined (CFG_APP_GOTO_STATEFUL_HIBERNATION)
    /****************************************************************************************
     * Stateful Hibernation mode configuration                                              *
     ****************************************************************************************/
    #define CFG_STATEFUL_HIBERNATION_RAM1           PD_SYS_DOWN_RAM_ON
    #define CFG_STATEFUL_HIBERNATION_RAM2           PD_SYS_DOWN_RAM_ON
    #define CFG_STATEFUL_HIBERNATION_RAM3           PD_SYS_DOWN_RAM_ON
    #define CFG_STATEFUL_HIBERNATION_REMAP          STATEFUL_HIBERN_REMAP_ADDR0_TO_RAM1
    #define CFG_STATEFUL_HIBERNATION_PAD_LATCH_EN   false
    #endif // CFG_APP_GOTO_HIBERNATION
    #endif // __DA14531__
    
    #if defined (CFG_APP_GOTO_DEEP_SLEEP) && (defined (CFG_APP_GOTO_HIBERNATION) || defined (CFG_APP_GOTO_STATEFUL_HIBERNATION))
        #error "Config error: Can not define both CFG_APP_GOTO_DEEP_SLEEP and CFG_APP_GOTO_HIBERNATION/CFG_APP_GOTO_STATEFUL_HIBERNATION."
    #endif
    
    #if defined (CFG_SPI_FLASH_ENABLE) && (defined (CFG_APP_GOTO_HIBERNATION) || defined (CFG_APP_GOTO_STATEFUL_HIBERNATION))
        #error "Config error: Can not define both CFG_SPI_FLASH_ENABLE and CFG_APP_GOTO_HIBERNATION/CFG_APP_GOTO_STATEFUL_HIBERNATION."
    #endif
    
    #if defined (CFG_APP_GOTO_DEEP_SLEEP)
    /****************************************************************************************
    * Deep Sleep mode and Wake-up from Deep Sleep Configuration                             *
    * Selects the trigger mechanism to wake up from deep sleep.                             *
    *                                                                                       *
    * - CFG_DEEP_SLEEP_WAKEUP_POR       - Wake up from POR pin                              *
    *                                                                                       *
    * - CFG_DEEP_SLEEP_WAKEUP_GPIO      - Wake up from WakeUp Controller                    *
    *                                                                                       *
    * - CFG_DEEP_SLEEP_WAKEUP_RTC       - Wake up from RTC Timer (only in DA14531)          *
    *                                                                                       *
    * - CFG_DEEP_SLEEP_WAKEUP_TIMER1    - Wake up from Timer1 (only in DA14531)             *
    *                                                                                       *
    * NOTE:                                                                                 *
    * A hardware reset or power cycle will always wake up the system from deep sleep.       *
    ****************************************************************************************/
    #undef CFG_DEEP_SLEEP_WAKEUP_POR
    #define CFG_DEEP_SLEEP_WAKEUP_GPIO
    
    /****************************************************************************************
     * Deep sleep mode configuration                                                        *
     ****************************************************************************************/
    #define CFG_DEEP_SLEEP_RAM1            PD_SYS_DOWN_RAM_OFF
    #define CFG_DEEP_SLEEP_RAM2            PD_SYS_DOWN_RAM_OFF
    #define CFG_DEEP_SLEEP_RAM3            PD_SYS_DOWN_RAM_OFF
    #define CFG_DEEP_SLEEP_PAD_LATCH_EN    false
    
    #if defined (__DA14531__)
    #undef CFG_DEEP_SLEEP_WAKEUP_RTC
    #undef CFG_DEEP_SLEEP_WAKEUP_TIMER1
    #endif
    
    #if defined (CFG_DEEP_SLEEP_WAKEUP_POR) && defined (CFG_DEEP_SLEEP_WAKEUP_GPIO)
        #error "Config error: Can not define both CFG_DEEP_SLEEP_WAKEUP_POR and CFG_DEEP_SLEEP_WAKEUP_GPIO."
    #endif
    
    #if !defined (CFG_DEEP_SLEEP_WAKEUP_POR) && !defined (CFG_DEEP_SLEEP_WAKEUP_GPIO) && \
        !defined (CFG_DEEP_SLEEP_WAKEUP_RTC) && !defined (CFG_DEEP_SLEEP_WAKEUP_TIMER1)
        #error "Config error: At least one wake-up source has to be selected."
    #endif
    
    #endif
    
    /****************************************************************************************
    * Wake-up from Extended Sleep Configuration                                             *
    * Selects the trigger mechanism to wake up from extended sleep.                         *
    *                                                                                       *
    * - CFG_EXT_SLEEP_WAKEUP_RTC       - Wake up from RTC Timer (only in DA14531)           *
    *                                                                                       *
    * - CFG_EXT_SLEEP_WAKEUP_TIMER1    - Wake up from Timer1 (only in DA14531)              *
    *                                                                                       *
    * NOTE:                                                                                 *
    * If none is defined, then system will wake up from extended sleep by button press.     *
    ****************************************************************************************/
    #undef CFG_EXT_SLEEP_WAKEUP_RTC
    #undef CFG_EXT_SLEEP_WAKEUP_TIMER1
    
    #if defined (CFG_EXT_SLEEP_WAKEUP_RTC) && defined (CFG_EXT_SLEEP_WAKEUP_TIMER1)
        #error "Config error: Can not define both CFG_EXT_SLEEP_WAKEUP_RTC and CFG_EXT_SLEEP_WAKEUP_TIMER1."
    #endif
    
    /*
     * FUNCTION DECLARATIONS
     ****************************************************************************************
     */
    
    /**
     ****************************************************************************************
     * @brief Enable push button. Register callback function for button press event.
     *        Must be called in periph_init().
     ****************************************************************************************
     */
    void app_button_enable(void);
    
    /**
     ****************************************************************************************
     * @brief Function to be called on the advertising completion event.
     * @param[in] status GAP Error code
     ****************************************************************************************
     */
    void app_advertise_complete(const uint8_t status);
    
    #if (BLE_SUOTA_RECEIVER)
    /**
     ****************************************************************************************
     * @brief Function called when the SUOTAR status changes.
     * @param[in] suotar_event SUOTAR_START or SUOTAR_STOP
     ****************************************************************************************
     */
    void on_suotar_status_change(const uint8_t suotar_event);
    #endif // BLE_SUOTA_RECEIVER
    
    /**
     ****************************************************************************************
     * @brief Disconnection function.
     * @param[in] param         Pointer to GAPC_DISCONNECT_IND message
     ****************************************************************************************
    */
    void user_app_on_disconnect(struct gapc_disconnect_ind const *param);
    
    /// @} APP
    
    #endif // _USER_PROXR_H_
    
    

ADC

在这里插入图片描述
ADC内部有一个分压电路,使用的时候需要注意。

学习笔记,如有错误,欢迎斧正。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Wireshark是一款功能强大的网络协议分析工具,它可以用来捕获和分析网络数据包。而OPC(OLE for Process Control)是一种用于实时数据通信的标准,它允许不同厂商的设备和软件之间进行数据交换。 Wireshark可以通过捕获OPC DA(Data Access)协议的网络数据包来帮助我们分析OPC DA通信的运行情况。OPC DA是一种用于实时数据通信的协议,主要用于工业自动化和监控系统中。 使用Wireshark捕获OPC DA协议的数据包可以提供以下一些功能和优势: 1. 分析通信问题:Wireshark可以以图形化界面显示捕获到的数据包,并提供包括源IP地址、目标IP地址、协议类型等详细信息。通过分析这些数据包,我们可以快速定位通信问题,比如延迟、丢包、错误等。 2. 检测网络攻击:Wireshark可以检测到潜在的网络攻击,例如入侵、欺骗、劫持等。通过分析OPC DA协议的数据包,我们可以发现异常的通信行为,帮助保护系统的安全。 3. 排查设备故障:通过监视OPC DA通信的数据包,Wireshark可以帮助我们发现设备故障。例如,如果我们在网络数据包中看到大量的错误响应或异常数据,这可能意味着某个设备出现了问题。 4. 优化系统性能:Wireshark可以帮助我们优化OPC DA通信的性能。通过分析数据包,我们可以识别潜在的网络瓶颈、冗余通信或数据传输问题,并采取相应的措施来提高系统的性能和效率。 综上所述,通过使用Wireshark来捕获和分析OPC DA协议的网络数据包,可以帮助我们解决通信问题、检测网络攻击、排查设备故障以及优化系统性能。使用Wireshark作为分析工具,可以提高OPC DA通信的可靠性和效率,进一步提升工业自动化和监控系统的稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值