跳过主要内容

dsp大电流消耗(不能)

DA14580

5年前

发布者jackiechau0点 15日回复
0的问题

嗨MT_dialog,

回顾我上一篇文章http://support.dialog-semiconductor.com/dsps-large-current-consumption,我是否可以继续询问如何在DSPS项目中实现低电流消耗?

我现在正在使用官方Da14580evkt-b。我使用HW或SW流量控制测试了电流消耗。如果使用HW流量控制,则电流消耗低于1mA。如果使用SW流量控制,则电流消耗近2.x mA。因为MCU主机的I / O引脚的限制,我无法使用HW流量控制的方法。但目前使用SW流量控制的消耗仍然相当高,如何降低1mA以下的电流消耗?

另外,如果我将UART1_TX、UART1_RX、UART1_RTS和UART1_CTS配置到端口2,会多消耗2mA的电流,请告知。
谢谢。

5年前

MT_dialog -30点

嗨Jackiechau,

使用SW流量控制它更大的功耗,因为您必须更常见的速度,以便发送流量控制信号,等待额外的字节接收等,SW流量控制比HW流量控制更详细,并使580唤醒更多频繁地。您无法降低功耗,从那以来,如果您确实存在丢失数据的叠加。只要它在DSPS应用笔记中提到的睡眠模式下运行时,DSP就会从电源消耗角度进行优化。

您将UART引脚放置在端口2的哪个引脚上?

由于MT_dialog

5年前

jackiechau 0点

嗨MT_dialog,

其实我没有定义h/w和s/w的流量控制,想用外部MCU的GPIO唤醒14580以后进行数据的接收和传输(上升边唤醒14580,下降边让14580休眠)。14580的所有功能已经实现,但当前的消耗大约是1x mA。你介意我把我整个项目的源代码发给你,你帮我看一下吗?谢谢。

5年前

jackiechau 0点

嗨MT_dialog,

在我的项目中,14580定期广播SSID,并通过UART1接收外部MCU的数据。因为它总是在未定义的h/w和s/w流量控制后消耗1ma电流(UART TX和RX FIFO应该是空的),
1.广播SSID后,我可以强制14580睡眠模式吗?怎么做?
2. 14580的GPIO之一被配置为中断引脚,以检测逻辑高或低,如果检测到逻辑高电平,则强制为永久激活。如果检测到逻辑低电平,则强制睡眠14580。有可能这样做吗?我应该使用app_force_active_mode和app_restore_sleep_mode吗?
3.如果h / w流控制必须定义,以便14580可以进入睡眠模式(我认为h / w流控制和14580年是否可以睡不应该相关),据- b - 026,我可以用一个“GPIO 1”的外部单片机提供复位脉冲CTS 14580以14580年醒来,利用外部单片机的“GPIO 2”检测14580 RTS的下边缘以实现数据的收发?

谢谢。

5年前

MT_dialog -30点

嗨Jackiechau,

1)你的意思是在没有广告的情况下让你的设备处于永久睡眠状态,还是仅仅启用睡眠功能?您可以在SSID发送后发出一个停止广告命令,并设置一个计时器或按钮,以使您的设备唤醒(这将使您的设备处于永久休眠,您还必须通过调用)arch_set_extended_sleep()将设备设置为睡眠模式,或者您可以只调用arch_set_extended_sleep()并动态更改睡眠模式(这将设置您的设备在广告之间的睡眠模式)。

2) app_force_active_mode()和app_restore_sleep_mode()让你睡眠模式之间切换不同的任务要求,它使从不同的app_force_active_mode invcations数(),当每个任务调用restore_sleep()它减少了计数,计数为0时设备freelly会睡觉,您可以在UM-B-006文档中找到该功能的文档。arch_set_extended_sleep (SDK5)或app_set_extended_sleep (SDK3)可以强制设备立即设置为睡眠模式。

3)需求方没有设计工作没有流控制由于数据丢失,睡眠和自相关的流控制深感需求方没有实现外部唤醒,当设备落在睡觉它使RTS高为了防止外部单片机发送任何数据。如果在580处于休眠状态时发送数据,则会造成数据丢失。是的,我认为你可以实现一个案例,580将使用流量控制,同时外部MCU将触发580唤醒并等待580准备好,以便开始发送数据。

当地团队将通过您的注册电子邮件地址与您联系。

由于MT_dialog

5年前

jackiechau 0点

嗨MT_DIALOG,

我将在下周联系您的分销商,但我想知道如果定义了硬件流控制并启用了Ext_Sleep,则MED MCU无法唤醒BLE唤醒。当ext_sleep被禁用时,我检查CTS中断可以触发并可以收到正确的数据,似乎不能醒来,请诚挚建议。

5年前

MT_dialog -30点

嗨Jackiechau,

需求方,不实现,通过设计,外部通过控制器醒来,醒来只是醒来regural间隔以保持连接活着,清醒时拉低其RTS为了让对方知道这是清醒,能够接收数据。您将必须启用外部唤醒控制器,并将其设置到适当的引脚,以便通过MCU的RTS信号进行唤醒,还需要进一步修改,以覆盖之前的功能,并通过中断进行唤醒。

由于MT_dialog

5年前

jackiechau 0点

嗨MT_DIALOG,

你提到的

1.我发现“启用唤醒控制器”通过External_WakeUp,但是你的意思是Master MCU的RTS也应该连接到另一个引脚,可以在这个GPIO中断处理程序中禁用BLE睡眠,可以在某处启用BLE睡眠状态吗?
2.进一步修改,请提供该示例。
谢谢。

5年前

jackiechau 0点

嗨MT_dialog,

http://support.dialog-semiconductor.com/dsps-use-gpio-control-its-exten..。,我在App_button_press_cb()函数中遵循智能标签参考设计,将主MCU的连接RTS连接到P1_0,用于外部唤醒中断和保留的P0_2,用于BLE的CTS。但是,它似乎无法醒来,App_cts_logi_high_cb(void)中没有打印任何内容。

在periph_setup.c

空白GPIO_reservations(空白)
{
Reserve_gpio (push_button, gpio_port_1, gpio_pin_0, pid_gpio);
保留_GPIO(UART1_TX,UART1_TX_PORT,UART1_TX_PIN,PID_UART1_TX);
Reserve_gpio (uart1_rx, uart1_rx_port, uart1_rx_pin, pid_uart1_rx);
#如果(UART_HW_FLOW_ENABLED)
保留_GPIO(UART1_RTS,UART1_RTS_PORT,UART1_RTS_PIN,PID_UART1_RTSN);
Reserve_gpio (uart1_cts, uart1_cts_port, uart1_cts_pin, pid_uart1_ctsn);
# endif / * UART_HW_FLOW_ENABLED * /
// UART2调试保留
Reserve_gpio (uart2_tx, uart2_tx_port, uart2_tx_pin, pid_uart2_tx);
Reserve_gpio (uart2_rx, uart2_rx_port, uart2_rx_pin, pid_uart2_rx);

# endif / / DEVELOPMENT_DEBUG

/ **
****************************************************************************************
* @brief地图端口引脚

* Uart、SPI接口引脚和GPIO接口映射
****************************************************************************************
*/
Void set_pad_functions(Void) //设置gpio端口函数模式
{

GPIO_ConfigurePin(GPIO_PORT_1, GPIO_PIN_0, INPUT_PULLDOWN, PID_GPIO, false);
GPIO_ConfigurePin(UART1_TX_PORT, UART1_TX_PIN, OUTPUT, PID_UART1_TX, false);
GPIO_CONFIGUREPIN(UART1_RX_PORT,UART1_RX_PIN,INPUT_PULLUP,PID_UART1_RX,FALSE);
#如果(UART_HW_FLOW_ENABLED)
GPIO_ConfigurePin(UART1_RTS_PORT, UART1_RTS_PIN, OUTPUT, PID_UART1_RTSN, false); / /输出
gpio_configurepin(uart1_cts_port,uart1_cts_pin,input_pullup,pid_uart1_ctsn,false);
# endif / * UART_HW_FLOW_ENABLED * /

/ /初始化垫
GPIO_CONFIGUREPIN(UART2_TX_PORT,UART2_TX_PIN,OUTPUT,PID_UART2_TX,FALSE);
GPIO_ConfigurePin(UART2_RX_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false);
/ *
*配置应用程序端口。
即。
GPIO_ConfigurePin(GPIO_PORT_0, GPIO_PIN_1, OUTPUT, PID_GPIO, false);//将P_01设置为通用输出
*/

app_sps_device_project.c

空白app_cts_logic_high_cb(空白)
{

如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();

printf_string(“\ r \ napp_cts_logic_high_cb \ r \ n”);
/*按钮被按下,启动3秒gurd定时器检测按钮长按
**和恢复按钮GPIO的极性,以检测释放
*/
wkupct_register_callback (app_cts_logic_low_cb);
Wkupct_enable_irq (0x100, 0x100, 1, 0x14);// P1_0,极性低,1事件,去噪时间= 20ms
app_button_status = 1;
if(ke_state_get(TASK_APP) == APP_CONNECTABLE)
{
//只有在广告模式下才会醒来。只有在ADV模式下,用户才能清除绑定数据。
app_ble_force_wakeup ();
app_ble_ext_wakeup_off ();

//发送消息给TASK_APP。当ble醒来时,我们应该设置计时器app_button_press_timer
ke_msg_send_basic (APP_WAKEUP_MSG TASK_APP, NULL);

void app_cts_logic_low_cb(void)
{
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
printf_string(“\ \ napp_cts_logic_low_cb \ r \ n”);
//释放按钮,停止APP_BUTTON_PRESS_TIMER gurd timer
//和恢复按钮GPIO的极性,以检测按钮按下
wkupct_register_callback(app_cts_logic_high_cb);
wkupct_enable_irq(0x100,0x000,1,0x14);// p1_0,极性高,1个事件,脱嘴时间= 20ms

app_button_status = 0;

if(ke_state_get(TASK_APP) == APP_CONNECTABLE)
{
//只有在广告模式下才会醒来。只有在ADV模式下,用户才能清除绑定数据。
app_ble_force_wakeup ();
app_ble_ext_wakeup_off ();
//发送消息给TASK_APP。当BLE处于清醒状态时,我们应该清除计时器APP_BUTTON_PRESS_TIMER
ke_msg_send_basic (APP_WAKEUP_MSG TASK_APP, NULL);

空白app_init_func(空白)
{

app_set_rxirq_threshold (BLE_RX_BUFFER_CNT / 4);

app_sps_init ();
printf_string(“\ n \ rapp_init_func \ r \ n”);
wkupct_register_callback(app_cts_logic_high_cb);
wkupct_enable_irq(0x100,0x000,1,0x14);// p1_0,极性高,1个事件,脱嘴时间= 20ms

Int app_wakeup_handler(ke_msg_id_t const msgid,
void *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
//如果状态不空闲,请忽略消息
if(ke_state_get(dest_id)== app_connectable)
{
/ *检查唤醒的原因是按钮按或释放并设置或清除长按计时器。
**注意,这只会发生在设备正在发布广告且未连接时
*/
if(app_button_status)
{
app_timer_set (APP_BUTTON_PRESS_TIMER TASK_APP 300);


其他的
{
ke_timer_clear (APP_BUTTON_PRESS_TIMER TASK_APP);

/*if(adv_count == 0); / /设置为0
{
restart_adv = 0;
app_adv_start ();
} * /

返回(KE_MSG_CONSUMED);

Int app_button_press_timer_handler(ke_msg_id_t const msgid,
空白const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
/*if(GPIO_GetPinStatus(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN))
{

//从非vlolatile存储器清除绑定数据
app_clear_bond_data();

//播放声音表示绑定数据已被删除
app_proxr_pwm_enable (button_pwm_callback);
systick_usec_units(假);
systick_wait (APP_PWM_DISABLE_DELAY);
app_proxr_pwm_disable ();
} * /

返回(KE_MSG_CONSUMED);

5年前

MT_dialog -30点

嗨Jackiechau,

关于您粘贴的代码的一些注释,唤醒控制器有一个20毫秒的恢复时间,如果您正在切换您的MCU的RTS可能因为恢复时间唤醒中断没有触发。为了确保设备正在接收中断并被唤醒,你可以在唤醒回调中使用arch_set_pxact_gpio()函数,并在智能代码片段中检查中断是否被触发(当函数pxact被调用时,你应该看到一条红色的竖线)。也当bie是睡眠模式不能使用UART后立即醒来,醒来后580年运营以来RC16振荡器,这不会让你使用UART正确,你必须切换到XTAL16之前使用UART和作画者等待晶体来解决。

您可以在外设驱动程序部分中找到有关UM-B-051文档中的唤醒控制器的更多信息。

由于MT_dialog

5年前

jackiechau 0点

嗨MT_dialog,

1.我正在使用基本工具包和通过智能片段将图像烧录到EVB中,如果函数pxact被调用,我还能看到红色的垂线吗?如果是,应该使用哪种智能代码片段的布局,以便我能看到红色的垂直线?如果基本工具包不能显示这条线,我能做什么来证明系统苏醒?
此外,我应该缩短WKUPCT_ENABLE_IRQ()的脱嘴时间参数,并增加MCU的RTS信号的切换时间吗?

2.如果WKUPCT_REGISTER_CALLBACK和WKUPCT_ENABLE_IRQ未调用,并且如果主MCU将其RTS信号切换到其RTS信号,则触发Periph_setup.c的原始API GPIO0_CALLBALLBALLBALLBALLBALLBALLBALLBALLBALLBALLBALLBALLBALLBERS,则该对话框可以接收和将数据传输到MASTER MCU,这非常奇怪。但是,如果每1秒调用app_timer_set(sps_timer,task_app,100),则无法从对话框接收或传输任何内容。它仍然与唤醒问题有关吗?

谢谢。

5年前

MT_dialog -30点

嗨Jackiechau,

annihilate) 1),如果您正在使用的基本工具它不支持分析器,你可以尝试切换LED从睡梦中醒来的时候,这可能有点棘手,因为需求方可能跟踪没有数据发送它会回到睡眠和醒来的时候会关掉LED,所以你必须中断程序中设置一个变量,当醒来检查变量periph_init销是否成立与否,除此之外,你可以设置销并跟踪一个分析器,以确认你的设备醒来。是的,缩短你的脱扣参数,因为你使用的是外部处理器的脉冲,20ms的脱扣时间不会有任何好处,只要设置脱扣时间为0。

2)GPIO0_callback()是一个普通的中断,这个中断只能在系统唤醒时调用,当580处于睡眠模式时,该中断不会唤醒系统。只睡觉时,唤醒定时器的中断可以唤醒580.内核定时器和唤醒定时器之间没有关系。

由于MT_dialog

5年前

jackiechau 0点

嗨MT_dialog,

感谢您的帮助,完成了。但在我的源代码中,我只是想知道为什么我需要在gpio0_callback(),app_cts_logic_high_cb()和app_cts_logic_low_cb()中添加几个ms延迟,以便主MCU可以从14580发送和接收UART数据。

5年前

MT_dialog -30点

嗨Jackiechau,

当中断发生时,需要一些时间来唤醒580,它不是立即唤醒的,它需要一些时间,直到XTAL切换和稳定是适当的。

由于MT_dialog

5年前

jackiechau 0点

嗨MT_dialog,

我想知道如何在app_adv_start和打开收音机之前,如果需要,我可以调用SetBits16(PMU_CTRL_REG, RADIO_SLEEP)直接打开和关闭?谢谢。

布鲁斯,

杰基

5年前

MT_dialog -30点

嗨Jackiechau,

当设备没有发布时,无线电是关闭的,当你调用app_adv_start SDK和BLE堆栈将开关和关闭无线电时,它的接收/发送数据的时间根据你设置的广告间隔,同样适用于你连接。

由于MT_dialog