你好,
我使用来自上述SDK的BLE外设示例代码,其中设备是基于连接的信标,使用特征交换数据,也以广告数据的形式。
我收到大约200字节的数据在连接基于模式下,根据我在本地存储的特征,
现在我想在Flash上存储这些数据,以便我可以重新恢复(恢复)这些数据后,重新上电(即,关机设备,然后再次上电设备)设备
我已经实现了这个Flash读写,当我检入调试所有的事情都工作良好,我已经测试如下所示的步骤
( 1.我得到数据的特点,这是本地存储,然后我存储在Flash上。
2.然后,我关闭了设备和Flash写入部分是从我的代码注释。
3.然后我再次运行代码,其中在外围_init函数本身,我读Flash)
在调试读/写Flash操作工作完美
然而,当我闪现相同的代码(即。,在这个代码中,我写flash从BLE的请求和我读flash在边缘的init函数)在自定义板(DA14583 MCU)以及在DA14583开发套件,设备停止广告,可能它正在进入一些处理程序
所以请帮助我尽快解决这个问题,我已经从代码中共享了下面所需要的文件
感谢和问候
罗希特
设备:
嗨Rajapirerohit,
正如您所说的,程序在RAM调试阶段按照您的预期运行。
在下面哪个步骤,它停止工作为您在flash编程后?
1.启动和广告(flash编程后第一次)
2.通过BLE接收数据并写入闪存
读取并验证数据是否在flash上
4.关机/ HW重置
5.启动和宣传
6.确认数据还在闪存里
嗨Qinjiny_Dialog,
我面临的问题是,
2.通过BLE接收数据并写入flash。
但是现在我面临不同的问题,我注意到DA14583有内部闪存,它们已经被保留了,但如果我按照定义使用它们,我得到的GPIO引脚没有被保留。
我也改变了目标80到83,在开发工具包上运行代码,设备广告在一段时间后停止。
并且我已经使用了DA14580 MCU代码ble_peripheral,并做了必要的改变来读写flash。你能帮我做错什么吗?
感谢和问候
罗希特
嗨Rajapurerohit,
正如我在另一篇文章中说的,请确保你构建的项目为DA14583目标,不要手动为flash保留GPIO。
BR,
Qinjin杨
嗨Qinjin杨,
是的,我看到并将目标改为83,但正如我在你的帖子之前所说,将目标改为83,并在带有83 MCU的开发工具包上运行,设备在一段时间后停止广告。
所以我保持83设备开发套件在调试模式,转储代码,并尝试使用BLE写数据。我注意到,当storeflashdata()[我已经编写来存储数据]函数被调用时,代码进入nmi_handler。
接下来已经配置了保留的闪存引脚和烧录代码在调试模式,这是工作的,我的意思是代码没有进入nmi_handler。但如果我在我的定制板上闪现代码,并使用BLE分配数据,设备挂起意味着它断开和停止广告。请帮我解决这个我急需解决的问题。
请按照我所遵循的步骤读写flash
1.按照你的建议,我已经将目标设备更改为83。
2.没有手动保留引脚
3.在user_外围_setup.c文件中配置已经预留的83的flash引脚。附件是代码片段
/************* SPI flash销配置 ****************************/
GPIO_ConfigurePin(GPIO_PORT_2, GPIO_PIN_3, OUTPUT, PID_SPI_EN, true);
GPIO_ConfigurePin(GPIO_PORT_2, GPIO_PIN_0, OUTPUT, PID_SPI_CLK, false);
GPIO_ConfigurePin(GPIO_PORT_2, GPIO_PIN_9, OUTPUT, PID_SPI_DO, false);
GPIO_ConfigurePin(GPIO_PORT_2, GPIO_PIN_4, INPUT, PID_SPI_DI, false);
4.在调试模式下连接83开发套件并刻录上述配置的代码
5.能够使用BLE将数据分配给设备。
6.断开设备,再次上电并调试代码,并能够看到存储在闪存缓冲区上的数据。
7.调试测试后,烧。hex文件到我的自定义板测试。
8.自定义板开始广告,并已连接使用BLE app (BLE Scanner)
9.我已经使用BLE分配数据到自定义板,我已经调用flashstore函数,每当用户断开从应用程序。
10.然后我关闭设备,并在一分钟内再次启动设备[使用VCC和GND]。
11.设备停止广告,无法看到自定义板后。
感谢和问候
罗希特
嗨Rajapurerohit,
感谢您提供以上的详细信息。所以我才问你到底哪里出了问题。该程序在RAM上运行良好,并从flash启动第一次没有问题,但停止工作后,您的flash写入操作。
您可能必须检查所写入的flash地址是否在代码大小之内,因为所写入的数据似乎以某种方式破坏了存储在flash上的代码,使其无法再次启动。
BR, Qinjin
嗨Qinjin,
我所做的是,使用smartsnippet闪现的基本代码,然后记下一个地址0x06E38,并使用这个地址进一步。
附件是我使用的代码片段。你能检查一下我做的是对的还是错的吗?
我观察到的一件事是代码没有进入spi_flash_block_erase();函数。
**************************************************************************************/
空白StoreintoFlash(空白)
{
spi_flash_init (SPI_FLASH_DEFAULT_SIZE SPI_FLASH_DEFAULT_PAGE);
spi_flash_enable (GPIO_PORT_2 GPIO_PIN_3);
spi_flash_set_write_enable ();
spi_flash_block_erase (0 x06e38 SECTOR_ERASE);
spi_flash_write_data (wrflash_data,0 x06e38 write_size);
}
感谢和问候
罗希特
嗨Rajapurerohit,
请尝试使用其他地址,如0x7000,看看问题是否仍然存在。
嗨Qinjiny,
感谢您的回复,
我会试试这个地址,然后告诉你结果。
我还注意到一件事,如果我注释掉storeflashdata()和readflashdata()。将。hex文件刻录到83个开发套件中,然后设备停止广告,一旦它关闭并启动设备。
感谢和问候
罗希特
嗨Rajapurerohit,
好的,请告诉我们,谢谢你的指示。如果您认为以上答案中有任何一个有用,请将其中一个标记为已接受。
谢谢,PM_Dialog
嗨Qinjiny
我已经改变了地址,现在我可以存储和读取我的自定义数据。
我将再次测试,并更新相同的你。
非常感谢你一直以来的帮助,它真的帮助我度过了难关。
再次感谢您的帮助。
感谢和问候
罗希特
嗨Rajapurerohit,
很高兴你解决了自己的问题。如果您认为以上答案中有任何一个有用,请将其中一个标记为已接受。
谢谢,PM_Dialog