跳过主要内容

Inventek ISM14585-L35

蓝牙模块

ism14585-l35.jpg

DA14585的所有优点都具有更大的灵活性。

ISM14585-L35-P8提供最小、最低功耗和最集成的蓝牙®解决方案,最高可达8Mbit的Flash和可选的板上范围扩展放大器。

这个多功能模块非常适合将低能耗蓝牙添加到远程控制、邻近标签、信标、联网医疗设备和智亚博电竞菠菜能家庭节点等产品中,支持所有蓝牙开发,包括蓝牙5。它甚至有一个集成的麦克风输入语音命令支持。

ISM14585-L35-P8易于设计,并支持独立应用程序和托管应用程序。亚博国际官网平台网址它由Dialog的完整开发环境(包括SmartSnippets™软件)支持,以支持快速原型设计、大规模生产设计和优化功耗。

特性

DA14585 BLE5.0 SoC

集成8Mb SPI Flash板

集成SkyWorks PA在飞机上增加TX功率

集成16Mhz和32kHz振荡器

综合10 b ADC

综合电源管理单元

FCC、CE、IE认证完成

选择一个认证的嵌入式天线或认证的w.fl外部天线

1.8 - 3.6V工作电压

所有需要的无源元件

LGA封装6.0mm x 8.6mm x 1.2mm

亚博国际官网平台网址

物联网应亚博国际官网平台网址用

声控遥控器

键盘和鼠标

连接传感器

信号灯和标签

家庭自动化

连接的玩具

家用电器

每个季度,我们都将我们的产品、软件开发主题、培训、活动的最佳技术信息捆绑在一起,并将其发送到您的收件箱。亚博电竞菠菜

签我
查看以前的版本

保持联系

请直接通过我们的全球销售办事处与我们联系,或与我们的全球分销商和代表联系。

调查 分销商和代表 注册通讯
数据表
的名字 日期 版本
B24P-W w.fl外置天线初步数据表(782.51 KB) 10/08/2018 1.0
ISM14585-L35-P8初步数据表(3.75 MB) 28/01/2020 3.6
《ISM14585-L35-P8-EVB评估板用户手册(1.63 MB) 19/11/2019 3.5
产品简短
的名字 日期 版本
ISM14585-L35产品简短(338.06 KB) 1.0
SDK
的名字 日期 版本
针对ism14585的Inventek SDK 6.0.14.1114 release(9.46 MB) (仅注册用户) 28/05/2020 6.0.14.1114
SDK用户手册
的名字 日期 版本
UM-B-049 DA14585 & DA14586入门指南与PRO-Development Kit (HTML)(25.09 KB) 02/11/2018 2.1
UM-B-049 DA14585 & DA14586入门指南与PRO-Development Kit (PDF)(2.36 MB) 02/11/2018 2.1

开发工具包和参考设计

iotcomboevk - 14585装备

立即购买

产品 商店
ISM14585-L35 Digikey 逮老鼠
物联网组合评估试剂盒 Digikey
回的结果

DA14585

2个月前

在DA14585上从深度睡眠中醒来

发布的分别Michihiro挂川115点 8回答说
0的问题

你好,

我使用的是DA14585,我的申请是广播广告,也使用深度睡眠来节省电池消耗。

我已经将固件编程到OTP内存中,看看它是否进入深度睡眠和醒来,并再次开始广告。

不幸的是,它没有。

我正在寻找一些线索,解释为什么它没有再次开始做广告。

我正在使用Android的BLE Scanner应用程序接收广告。

当我的自定义板运行时,它接收到一个广告,在触发自定义板上的唤醒中断后,它不接收。

我已经从广告完整函数(user_app_adv_nonconn_complete()函数)调用该函数进入深度睡眠。
我已经定义了EXCLUDE_DLG_MSG(0)(用于发生唤醒回调)

我需要进一步的程序开始广告后,从深度睡眠醒来?

我将把我的代码放在下面。

在我的自定义板上没有XTAL32kHz,所以我已经定义了CFG_LP_CLK到LP_CLK_RCX20和未定义cfg_xtal16m_adaptive_settle

2个月前

分别Michihiro挂川 115点

当我用注释掉的arch_set_deep_sleep()函数启动调试会话时,它不会进入深度睡眠,但它将在唤醒中断后重新启动广告(在我的情况下从GPIO中唤醒)。

src / user_app / user_deep_sleep.c

void put_system_into_deep_sleep(void){//配置唤醒中断按钮app_button_enable();//设置深度睡眠-外部中断唤醒// arch_set_deep_sleep(true);// <——comment out for debug}

下面是我的代码片段的固件,被编程到OTP。(SDK版本为6.0.14.114)

src / user_app / user_deep_sleep.h

/**************************************************************************************** * 选择完成后,设备将进入睡眠模式广告* * - * * CFG_APP_GOTO_DEEP_SLEEP深度睡眠模式CFG_APP_GOTO_HIBERNATION休眠模式(仅DA14531) * *——CFG_APP_GOTO_STATEFUL_HIBERNATION状态休眠模式(仅限DA14531) * *注意:如果没有定义,则系统将进入选定的扩展睡眠模式* * * *如果定义了cfg_app_goto_stateful_hibernate,CFG_STATEFUL_HIBERNATION * *应定义为好(在选择目标“DA14531”- > Asm - > * *条件汇编控制符号- >定义 :) * ****************************************************************************************/ # 定义CFG_APP_GOTO_DEEP_SLEEP #如果定义(CFG_APP_GOTO_DEEP_SLEEP)/**************************************************************************************** * 深度睡眠模式,从深度睡眠中唤醒配置* *选择触发机制从深度睡眠醒来。* * * * - 从运动销CFG_DEEP_SLEEP_WAKEUP_POR——醒来  * * * * - CFG_DEEP_SLEEP_WAKEUP_GPIO——醒来唤醒控制器  * * * * - CFG_DEEP_SLEEP_WAKEUP_RTC——从RTC计时器(只有在DA14531醒来 ) * * * * - CFG_DEEP_SLEEP_WAKEUP_TIMER1——从Timer1(只有在DA14531醒来 ) * * * * 注意:* *硬件复位或电源周期总是会唤醒系统从深度睡眠。* ****************************************************************************************/ # undef CFG_DEEP_SLEEP_WAKEUP_POR #定义CFG_DEEP_SLEEP_WAKEUP_GPIO  /**************************************************************************************** * 深度睡眠模式配置*****************************************************************************************/ # 定义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假

src / user_app / user_deep_sleep.c

/** **************************************************************************************** * @ 简短的处理深度睡眠时APP_WAKEUP_MSG发送设备出口。按下按钮触发。**************************************************************************************** */ 静态孔隙app_wakeup_cb(空白){/ /如果没有空闲状态,忽略了消息(ke_state_get (TASK_APP) = = APP_CONNECTABLE) {user_app_adv_start ();} } /** **************************************************************************************** * @ 简短的常规系统从睡眠状态恢复。**************************************************************************************** */ 静态孔隙app_resume_system_from_sleep(空白){如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN)) {periph_init ();} if (arch_ble_ext_wakeup_get()) {arch_set_sleep_mode(app_default_sleep_mode);arch_ble_force_wakeup ();arch_ble_ext_wakeup_off ();app_easy_wakeup ();} } /** **************************************************************************************** * @ 短暂的按钮按下回调函数。 Registered in WKUPCT driver. **************************************************************************************** */ static void app_button_press_cb(void) { app_resume_system_from_sleep(); } void app_button_enable(void) { app_easy_wakeup_set(app_wakeup_cb); wkupct_register_callback(app_button_press_cb); wkupct_enable_irq(WKUPCT_PIN_SELECT(GPIO_INPUT_PORT, GPIO_INPUT_PIN), // select pin WKUPCT_PIN_POLARITY(GPIO_INPUT_PORT, GPIO_INPUT_PIN, WKUPCT_PIN_POLARITY_LOW), // polarity low 1, // 1 event 0x3F); // debouncing time = 63ms } #if defined (CFG_APP_GOTO_DEEP_SLEEP) /** **************************************************************************************** * @brief Put the system into deep sleep mode. It demonstrates the deep sleep mode usage * and how the system can wake up from it. Once the system enters deep sleep state * it retains NO RAM blocks. The exit from the deep sleep state causes a system * reboot. * @note The system can wake up from deep sleep by: * - external wake up interrupt, caused e.g. by button press (properly configured GPIO pin) * - power on reset, caused e.g. by button press (properly configured GPIO pin) * - H/W reset button press or power cycle (at any time) * When the system exits deep sleep state, the boot process is triggered. * The application code has to be programmed in an external memory resource or * in the OTP memory, in order for the system to reboot properly. **************************************************************************************** */ void put_system_into_deep_sleep(void) { // Configure button for wake-up interrupt app_button_enable(); // Set deep sleep - external interrupt wake up arch_set_deep_sleep(true); } #endif //(CFG_APP_GOTO_DEEP_SLEEP)

src / user_platform / user_periph_setup.h

/****************************************************************************************/ /* GPIO配置  */ /****************************************************************************************/ # 定义GPIO_INPUT_PORT GPIO_PORT_1 # define GPIO_INPUT_PIN GPIO_PIN_2

src / user_platform / user_periph_setup.c

void set_pad_functions(void){//配置GPIO引脚GPIO_ConfigurePin(GPIO_INPUT_PORT, GPIO_INPUT_PIN, INPUT_PULLUP, PID_GPIO, false);}

src / user_app / user_name_of_my_project.c

struct gapm_start_advertise_cmd *cmd = app_easy_gap_non_connectable_advertise_get_active(); //如果通告被取消,则更改间隔并重新开始通告;switch(curr_state) {case ST_ADV2: //更改发布cmd的间隔->intv_min = MS_TO_BLESLOTS(ADV_INTV_1000MS);// 1s cmd->intv_max = MS_TO_BLESLOTS(ADV_INTV_1000MS);/ / 1 s打破;case ST_ADV1: //更改发布cmd的间隔->intv_min = MS_TO_BLESLOTS(ADV_INTV_100MS);// 0.1s cmd->intv_max = MS_TO_BLESLOTS(ADV_INTV_100MS);/ / 0.1 s打破;案例ST_STOP: arch_ble_ext_wakeup_on ();//将系统放入深度睡眠put_system_into_deep_sleep();返回; default: break; } app_easy_gap_non_connectable_advertise_start(); } }

src / user_config / user_modules_config.h

/***************************************************************************************/ /* 排除一个模块在用户的应用程序代码。*/ /* */ /*(0) -包含模块。模块的消息由SDK处理。*/ /* */ /*(1) -模块被排除。用户必须处理模块的消息。*/ /* */ /*注意:*/ /*这个设置没有作用,如果各自的模块是一个BLE Profile */ /*没有被包含在用户的应用程序中。*/ /***************************************************************************************/ # 定义EXCLUDE_DLG_GAP (0) # define EXCLUDE_DLG_TIMER # define EXCLUDE_DLG_MSG (0) (0) # define EXCLUDE_DLG_SEC # define EXCLUDE_DLG_DISS (0) (0) # define EXCLUDE_DLG_PROXR (0) # define EXCLUDE_DLG_BASS # define EXCLUDE_DLG_FINDL(0)(0) #定义EXCLUDE_DLG_FINDT(0) #define EXCLUDE_DLG_SUOTAR (0) #define EXCLUDE_DLG_CUSTS1 (0) #define EXCLUDE_DLG_CUSTS2 (0)

src / user_config / da1458x_config_advanced.h

/****************************************************************************************/ /* 低功率时钟选择。* / / * -LP_CLK_XTAL32外部XTAL32K振荡器* / / * -LP_CLK_RCX20内部时钟RCX * / / * -LP_CLK_FROM_OTP使用OTP头的选择相应的字段  */ /* */ /* 注意:禁用CFG_XTAL16M_ADAPTIVE_SETTLING国旗当RCX选为LP时钟* / / * OTP的头或SDK。*/ /****************************************************************************************/ # 定义CFG_LP_CLK LP_CLK_RCX20  /****************************************************************************************/ /* 输出Hardfault串行/ UART接口的参数。*/ /****************************************************************************************/ # 定义CFG_PRODUCTION_DEBUG_OUTPUT  /****************************************************************************************/ /* 代码位置选择。*/ /* - CFG_CODE_LOCATION_EXT: Code is loaded from SPI flash / I2C EEPROM / UART */ /* - CFG_CODE_LOCATION_OTP: Code is burned in the OTP */ /*以上选项互斥,必须启用其中一个。*/ /****************************************************************************************/ # undef CFG_CODE_LOCATION_EXT #定义CFG_CODE_LOCATION_OTP  /*****************************************************************************************/ /* 使权力使用XTAL16M自适应解决算法的优化。*/ /*注:XTAL16M自适应稳定算法仅适用于XTAL32K,而不适用于RCX,作为LP时钟。*/ /*****************************************************************************************/ # undef CFG_XTAL16M_ADAPTIVE_SETTLING

src / user_config / da1458x_config_basic.h

/****************************************************************************************************************/ /* 支持开发/调试模式。对于生产模式构建,必须禁用它。*/ /*当启用以下调试特性时,将启用*/ /* -允许模拟OTP镜像到系统RAM。没有对RAM进行实际的写操作,但是花费的时间与发生镜像的时间完全相同。这是为了模仿*/ /*行为,就好像系统代码已经在OTP中,并且镜像在唤醒后发生,*/ /*但(开发)代码仍然驻留在外部源代码中。*/ /* - GPIO保留的验证。*/ /* -在Hardfault和NMI (Watchdog)处理程序中启用调试模块并设置代码在断点中执行。* / / *它允许开发人员热附加调试器调试信息  */ /****************************************************************************************************************/ # undef CFG_DEVELOPMENT_DEBUG  /****************************************************************************************************************/ /* UART控制台打印。如果定义了CFG_PRINTF,将启用串行接口日志记录机制。 */ /* If CFG_PRINTF_UART2 is defined, then serial interface logging mechanism is implented using UART2, else UART1 */ /* will be used. */ /****************************************************************************************************************/ #undef CFG_PRINTF

2个月前

PM_Dialog

嗨分别Michihiro挂川,

感谢您的在线问题和分享代码片段。

您提到设备是从OTP启动的。我看到CFG_DEVELOPMENT_DEBUG未定义,那么如何调试呢?你的设计中有SPI闪光灯吗?您可以编程SPI flash和检查DA14585唤醒。我也会在我这边测试一下,然后告诉你。

谢谢,PM_Dialog

2个月前

分别Michihiro挂川 115点

你好

谢谢您的回复。

是的,在将固件编程到OTP之后,它正在从OTP启动。

之后,我用Keil uVision通过我的项目的J-Link运行调试(对配置标志做了一些更改)。

我已经设置了OTP报头字段如下所示,我没有更改SWD启用标志字段(值是JTAG启用,与默认值相同),我认为这使我能够运行调试。

的名字 价值
应用程序标记1 是的
应用程序标记2 是的
OTP DMA长度 166 c

(OTP DMA Length字段的值设置为应用程序图像的大小除以4(十六进制格式)。)

我复制了原来的项目文件夹,并将其命名为[my_project_name]_for_test(这样我就可以保留原来的项目),并在复制的项目中更改了如下的配置标志以进行调试。

在src / user_config / da1458x_config_advanced.h

#定义CFG_DEVELOPMENT_DEBUG

在src / user_config / da1458x_config_basic.h

#undef CFG_PRODUCTION_DEBUG_OUTPUT #define CFG_CODE_LOCATION_EXT

然后我开始调试会话。

我已经将J-Link连接到我的自定义板上,使用SWD接口进行调试。

抱歉,我的设计中没有SPI闪光灯。

在查看我的程序时,我想知道在将系统置于深度睡眠模式之前调用app_easy_gap_non_connectable_advertise_get_active()函数是否会导致某种问题。

void user_app_adv_nonconn_complete(uint8_t status) {if (status == GAP_ERR_CANCELED) {struct gapm_start_advertise_cmd *cmd = app_easy_gap_non_connec_table_advertise_get_active ();

2个月前

分别Michihiro挂川 115点

你好,

而peripher_init()的代码片段

src / user_platform / user_periph_setup.c

Void peripher_init (Void) {....//设置pad功能set_pad_functions();//初始化I2C模块i2c_init(&i2c_cfg);....}

在深度睡眠之前添加void i2c_release(void)函数的函数调用会有区别吗?

wkupct_enable_irq()函数的恢复时间设置为0x3F (63ms)。

LP_CLK_RCX20设置为低功耗时钟。

这会在peripher_init()中(或之后)引起一些问题吗?

2个月前

PM_Dialog

嗨分别Michihiro挂川,

所以,实际的问题是设备不能从深度睡眠中唤醒使用唤醒控制器。另外,您使用P1_2作为叫醒针。

由于OTP是编程的,我建议编程一个干净的板(空OTP),并通过Keil IDE在调试模式下运行您的代码。当设备从System-RAM引导时,您是否能够复制此行为?例如,在唤醒回调中添加一个断点,断点是否命中?

如果定义了CFG_DEVELOPMENT_DEBUG宏,则可以模拟到System RAM的OTP镜像。

也许代码会堆栈到断言等等。

另外,当您试图通过P1_2唤醒设备时,DA14585是否重置或什么都不做?你能提供一个电源跟踪器吗?

谢谢,PM_Dialog

2个月前

分别Michihiro挂川 115点

你好PM_Dialog

感谢您的回复和关于如何调试的建议。

是的,我的问题是设备不能从深度睡眠中唤醒使用唤醒控制器。

是的,我用P1_2作为叫醒针。

我的项目文件的基础是empty_peripheral_template在projects/target_apps/template,

为了让系统进入深度睡眠模式,我在ble_app_sleepmode和prox_reporter中引用了projects/target_apps/ble_example中的过程。

我可能误解了你上面的评论“既然OTP是编程的,我建议编程一个干净的板(空的OTP)”。

您的意思是将固件编程到定义了“define CFG_DEVELOPMENT_DEBUG”(然后通过Keil IDE在调试模式下运行)的OTP中吗?

我有两个自定义板“此刻”,这两个已经被OTP编程。

除了这两个自定义板,我有一个干净的板(空的OTP) DA14585上,但这不是完全相同的自定义板。

对于这个板(它有空的OTP),我尝试通过Keil IDE运行调试,定义了CFG_DEVELOPMENT_DEBUG。

当我试图通过P1_2唤醒设备时,调用了app_easy_wakeup()函数,

static void app_resume_system_from_sleep(void) {if (GetBits16(SYS_STAT_REG, PER_IS_DOWN)) {pher_init ();} if (arch_ble_ext_wakeup_get()) {arch_set_sleep_mode(app_default_sleep_mode);arch_ble_force_wakeup ();arch_ble_ext_wakeup_off ();app_easy_wakeup ();}}

但并没有触及唤醒回调的断点。它在main()函数中循环,没有断言。(代码不会陷入断言中。)

配置标志如下

#define CFG_DEVELOPMENT_DEBUG #undef CFG_CODE_LOCATION_EXT #define CFG_CODE_LOCATION_OTP

通过功率跟踪,我将其理解为The power measurement of The SmartSnippets Tools > power Profiler,或通过某种测量工具来测量电流。

我恐怕不能提供功率跟踪,因为我既没有DKs也没有测量低电流的测量工具。

1个月前

分别Michihiro挂川 115点

你好

当固件被编程到OTP时,什么可能是不开始从深度睡眠醒来的原因?

我可以在哪里查看?

1个月前

PM_Dialog

嗨分别Michihiro挂川,

我为耽搁道歉。可能是唤醒控制器配置不当。

我将在这个论坛线程私下联系你。

谢谢,PM_Dialog