自定义DSP应用程序未接收所有字节

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
离线
最后一次露面:1个月3周前
加入:2016-06-02 20:58
自定义DSP应用程序未接收所有字节

嗨对话框,

我目前正在使用DSPS应用程序在自定义板上使用DS14580芯片开发固件。在此项目中,我正在使用GPIO引脚,打开和关闭外部微控制器,以便在微控制器不使用时节省电力。当我需要使用微控制器时,我使用手机向DA14580发送短命令,DA14850然后用GPIO引脚唤醒外部微控制器,设置UART,发送短命令,然后等待接收数据发送到手机。

如果没有打开/关闭外部微控制器,我就可以成功地在微控制器和手机之间来回发送数据。但是,我认为当我在运行时重新配置引脚时,它会在接收时导致数据丢失,并且有时导致DA14580在某处挂断。(如果启用了看门狗,则会出现看门狗重置,并且手机与蓝牙断开连接,如果禁用看门狗,则设备不再宣传)

在启动时,在“set_pads_function”中,引脚将设置为GPIO输出低,以防止外部微控制器引脚上的任何电压。

当我从电话连接到设备时,我禁用睡眠模式。

在函数“user_sps_server_data_rx_ind_handler”中,我开始一个我用来处理我的应用程序进程的计时器。

发生定时器回调时,我将引脚配置为打开外部微控制器并设置我的UART引脚。TX,RX,CTS和RTS。(我已经定义了HW流量控制)

几秒钟后,为了测试目的,我禁用计时器,以防发生任何问题。然后,我将外向命令发送到外部微控制器。我可以看到外部微控制器已接收并正确处理该命令。

然后,外部微控制器在240字节块中向DA14580发送3000多个字节。

此时,我可以看到所有字节都已在范围上发送过UART。DA14580将响应两种方式之一:
1.设备与DSP移动应用程序断开连接,并粘在某些状态。
2.如果设备不会被卡住。我可以查看从DSPS移动应用程序收到的字节数,最后一个接收文件中会有〜1940字节。

如果我最初将引脚设置为UART并具有微控制器“开”,则DA14580能够在没有启用HW流量控制的情况下处理240字节块。DA14580还能够处理具有流量控制的240字节块,而无需在传输期间设置RTS引脚。

我怀疑有几件事可能会导致问题:
在运行时将从GPIO重新配置到UART时,我需要做什么?
当我重新配置可能导致我无法处理所有3000多个字节的引脚时,我需要使用SPS调度程序吗?

任何有帮助的东西,谢谢你的时间

关键词:
设备:
PM_DIALOG.
离线
最后一次露面:1周前1周前
职员
加入:2018-02-08 11:03
嗨敖,

嗨敖,

让我检查你的问题,我会尽快回复你。

谢谢,PM_DIALOG.

PM_DIALOG.
离线
最后一次露面:1周前1周前
职员
加入:2018-02-08 11:03
嗨敖,

嗨敖,

如您所提到的,根据您的应用程序需要修改了DSP参考应用程序代码,因此重复了您的问题。你能告诉我代码卡在哪里吗?

  • “如果启用了看门狗,则会出现看门狗重置,并且手机与蓝牙断开连接,如果禁用看台,则设备不再宣传”

您能否请启用WDOG,运行固件,使用热连接调试器?这是WDOG到期的原因?

  • “我认为当我在运行时重新配置引脚时,在接收时导致数据丢失,有时导致DA14580在某处挂断。”

如何在运行时重新配置引脚?你打电话给periph_init()吗?

  • 如果您有一个带有DA14580芯片的定制板,可以让我知道使用默认的DSPS应用程序是否完全奏效?

  • “在我重新配置可能导致我无法处理所有3000多个字节的引脚时,我是否需要处理SPS调度程序?”

我不太确定你用这个问题的意思,所以你可以尝试解释一下吗?

谢谢,PM_DIALOG.

离线
最后一次露面:1个月3周前
加入:2016-06-02 20:58
我没有努力

最近我没有在这个特定的问题上工作,但很快就会回到它。让我快速回应我现在可以的东西:

1.如何看到WDOG到期的原因?

2.重新配置针脚的最佳方式是什么?我正在调用一个函数,改变下面所示的引脚。此外,标志“SAM_ON”用于PERIPH_INIT()以决定是否将引脚设置为GPIO或UART。我认为每次设备从睡眠中唤醒时都会调用periph_init(),这是真的吗?

void turn_off_sam(void)
{
gpio_setpinfunction(gpio_uart1_tx_port,gpio_uart1_tx_pin,输入,pid_gpio);
gpio_setpinfunction(gpio_uart1_rx_port,gpio_uart1_rx_pin,输入,pid_gpio);
#if(uart_hw_flow_enabled)
gpio_setpinfunction(gpio_uart1_rts_port,gpio_uart1_rts_pin,输入,pid_gpio);
gpio_setpinfunction(gpio_uart1_cts_port,gpio_uart1_cts_pin,输入,pid_gpio);
#endif // uart_hw_flow_enabled.

GPIO_CONFIGUREPIN(GPIO_PORT_1,GPIO_PIN_0,输出,PID_GPIO,TRUE);

sam_on = false;
}

3.只要我未接通/关闭外部微控制器,DSP就会完全正常。

4.我注意到SPS调度程序在睡眠之前和之后都会改变。是否可以完全剥离SPS调度程序,然后在需要时初始化SPS?理想情况下,我希望能够在不需要时对引脚/ SP进行减少,然后在需要时重新初始化所有内容。当设备未连接时,不需要SPS,因此此时将被执行。在连接期间,我将从移动设备发送到DA14580的命令,然后DA14580需要初始化SPS并打开外部微控制器并进行通信,然后关闭微控制器并使SPS减去SPS。

PM_DIALOG.
离线
最后一次露面:1周前1周前
职员
加入:2018-02-08 11:03
Ho Ao,

Ho Ao,

1.当看门狗超时时,触发NMI_HandlerC。请从我们的支持门户中查看以下教程,以了解如何调试固件。您应该遵循的过程与教程中描述的相同:https://www.dialog-seminile.com/sites/default/files/training_08_deb ...请注意,最大WDOG超时为2.6秒,我们在SDK中使用此值。

2.您是正确的,每次芯片唤醒时都会执行Periph_Init。哪个是您使用的睡眠模式配置?您能否请确保正确触发Periph_Init,并且正确发生重新配置?我的建议是将引脚重新配置到user_periph_setup.c文件中

关于你的最后一个问题,我并不完全确定你的意思。你能澄清一下吗?你的意思是“当设备未连接时不需要SPS,因此它将在此时间进行减少。”还是我的建议是尝试使用Debugger Hat附加的调试模式运行固件,并尝试找到固件所卡住的位置。

谢谢,PM_DIALOG.