当DA14580作为spi从机接收或发送时,是否应禁用系统睡眠?

⚠️
您好,谢谢您来到论坛。令人兴奋的消息!我们正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量-请在//www.xmece.com/support.我们将在未来几天内修复bug/优化搜索和标记。
9个员额/ 0个新员额
最后一篇文章
cgha
离线
最后看到:10个月3天前
加入:2016-03-23 13:05
当DA14580作为spi从机接收或发送时,是否应禁用系统睡眠?

我想将da14580实现为spi从机,并使用额外的2个引脚进行传输流控制,1个引脚用于主-从数据irq(M2S_irq_引脚),1个引脚用于从-主irq(S2M_同步_引脚)。主设备或从设备可以随时启动spi传输。当主从irq断言时,它应该等待从S2M_sync_引脚断言以指示从机已准备好接收数据。

1.当我将da14580 spi初始化为从并等待spi主机启动spi传输时,我是否应该调用arch_disable_sleep(),当传输完成时调用arch_set_extended_sleep()?

2.wkupct_enable_irq是否随时工作?分配给唤醒的引脚是否可以在任何时候(当系统处于睡眠、空闲、活动模式时)生成中断?因为spi主机希望将数据传输到da14580(断言M2S_irq),它不知道da14580处于活动模式还是睡眠模式,但当spi主机断言m2s_irq_引脚时,从机应随时准备spi数据传输。

3.由于M2S_irq_引脚将唤醒DA14580,我是否应该启用外部_唤醒预处理器?

设备:
PM_Dialog
离线
最后看到:5天22小时前
工作人员
加入:2018-02-08 11:03
你好,cgha,

你好,cgha,

感谢您的在线查询。老实说,我不完全确定您想要完成什么。据我所知,您想将DA14580配置为SPI从设备,并通过M2S_irq_引脚将其唤醒?请注意,当设备处于睡眠模式时,所有外围设备模块都断电,因此芯片应在活动模式下运行e、 如果您使用唤醒控制器来捕捉M2S_irq,这将在任何时候都起作用。但是,为您所做的工作提供更多的输入将非常有帮助。

谢谢,PM_Dialog

cgha
离线
最后看到:10个月3天前
加入:2016-03-23 13:05
是的,我想用M2S

是的,当spi主机希望通过spi发送数据时(无论DA14580处于睡眠模式还是活动模式),我想使用M2S_irq_引脚唤醒DA14580,当DA14580准备接收数据时,它在S2M_irq_引脚活动的情况下确认外部mcu,然后外部mcu发送数据。过程如下:

DA14580正在播发或已断开连接,但未播发或已连接,应用程序在启用深度睡眠或ext睡眠的情况下运行:

1.SPI_主机(外部mcu)要发送数据,请将M2S_irq_引脚置于高位。

2.SPI_SLAVE(DA14580)通过M2S_irq_pin获得引脚中断

3.SPI_从机将其自身初始化为SPI_从机,并确认S2M_irq_引脚为高电平。

4.SPI_MASTER检查S2M_irq_pin,检测S2M_irq_pin上的高电平,然后发送spi数据给DA14580。

5.当数据传输完成时,SPI_MASTER将M2S_irq_pin设置为低电平。

6.把S2M_irq_pin放低。

cgha
离线
最后看到:10个月3天前
加入:2016-03-23 13:05
现在我只能得到第一个

现在我只能得到第一个引脚中断和第一个数据包的数据,当spi主人想要发送第二个数据包,da14580似乎不能再得到引脚中断。

PM_Dialog
离线
最后看到:5天22小时前
工作人员
加入:2018-02-08 11:03
你好,cgha,

你好,cgha,

既然你发送了第二个中断,你能不能在唤醒控制器回调函数中添加一个断点,以检查是否命中?关于配置唤醒pin,请查看SDK>的ble_app_sleepmode示例。你使用相同的代码架构吗?

谢谢,PM_Dialog

cgha
离线
最后看到:10个月3天前
加入:2016-03-23 13:05
不,它进不去

现在它可以进入回调了。我应该在大头针再次变高之后调用int_enable函数。但有时spi丢失一些字节后,我发送几十个包。SPI_Handler似乎不能足够快地获得字节。主速度大约是250K bps。

(void){若(packetLen==13&&spiIsInited){全球范围内的互联网禁用();而(packetLen){而(packetLen){当(0xFF和获取比特16(SPI(SPI)和比特16(SPI(SPI)和比特16(若)若(若)若(若)若(若)若(若)若(若(packetLen)是)处理处理处理者)处理处理者)处理者(void)(void)(void)(void)(void)(void)(void)(void)处理者)(void)(void)(void)处理处理者)(void)(void)(void)(void)(void)处理处理处理处理处理者)(void)(void)(void)(void)(void)(void)(void)(void)(void)(void)(void)(void)(void)(void)(poid)(poid)(poid)(poid)(poid)若)清除整流罩,0x01);如果(packetLen){packetLen--if(packetLen==0){SPI_Transfer_IRQ_Off();newpacketlen=1;rcvedCnt++;}}}}}//GLOBAL_INT_RESTORE();}

PM_Dialog
离线
最后看到:5天22小时前
工作人员
加入:2018-02-08 11:03
你好,cgha,

你好,cgha,

老实说,我无法理解您希望如何在M2S_irq_引脚中断检测时唤醒设备。您是否配置了唤醒控制器?只有唤醒控制器才能唤醒芯片。

谢谢,PM_Dialog

cgha
离线
最后看到:10个月3天前
加入:2016-03-23 13:05
现在它起作用了,我也需要

现在唤醒工作了,那么我需要在spi传输时调用arch_disable_sleep(),还是在spi传输时保持ble打开?

PM_Dialog
离线
最后看到:5天22小时前
工作人员
加入:2018-02-08 11:03
你好,cgha,

你好,cgha,

arch_disable_sleep()禁用所有睡眠模式,因此系统仅在活动/空闲模式下运行。DA14580有两种可用的睡眠模式:

延长睡眠模式:只有SystemRAM 42kB和RetentionRAM保持打开状态。

深度睡眠模式:只有RetentionRAM保持打开状态。必须烧掉OTP才能测量深度睡眠电流。

在这两种睡眠模式中,包括SPI块和RF块在内的所有外围块都已断电,因此我建议在与SPI块交互时将设备保持在活动模式。

谢谢,PM_Dialog