FLASH读/写问题

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
12个职位/ 0个新职位
最后发表
Rajapurerohit
离线
最后看到:10个月3天前
加入:2017-04-20 09:17
FLASH读/写问题

你好,

我使用来自上述SDK的BLE外设示例代码,其中设备是基于连接的信标,使用特征交换数据,也以广告数据的形式。

我收到大约200字节的数据在连接基于模式下,根据我在本地存储的特征,

现在我想在Flash上存储这些数据,以便我可以重新恢复(恢复)这些数据后,重新上电(即,关机设备,然后再次上电设备)设备

我已经实现了这个Flash读写,当我检入调试所有的事情都工作良好,我已经测试如下所示的步骤
( 1.我得到数据的特点,这是本地存储,然后我存储在Flash上。
2.然后,我关闭了设备和Flash写入部分是从我的代码注释。
3.然后我再次运行代码,其中在外围_init函数本身,我读Flash)

在调试读/写Flash操作工作完美

然而,当我闪现相同的代码(即。,在这个代码中,我写flash从BLE的请求和我读flash在边缘的init函数)在自定义板(DA14583 MCU)以及在DA14583开发套件,设备停止广告,可能它正在进入一些处理程序

所以请帮助我尽快解决这个问题,我已经从代码中共享了下面所需要的文件

感谢和问候
罗希特

附件:
设备:
Qinjiny_Dialog
离线
最后看到:2周5天前
工作人员
加入:2016-11-01 05:47
嗨Rajapirerohit,

嗨Rajapirerohit,

正如您所说的,程序在RAM调试阶段按照您的预期运行。

在下面哪个步骤,它停止工作为您在flash编程后?

1.启动和广告(flash编程后第一次)

2.通过BLE接收数据并写入闪存

读取并验证数据是否在flash上

4.关机/ HW重置

5.启动和宣传

6.确认数据还在闪存里

Rajapurerohit
离线
最后看到:10个月3天前
加入:2017-04-20 09:17
嗨Qinjiny_Dialog,

嗨Qinjiny_Dialog,

我面临的问题是,
2.通过BLE接收数据并写入flash。

但是现在我面临不同的问题,我注意到DA14583有内部闪存,它们已经被保留了,但如果我按照定义使用它们,我得到的GPIO引脚没有被保留。

我也改变了目标80到83,在开发工具包上运行代码,设备广告在一段时间后停止。

并且我已经使用了DA14580 MCU代码ble_peripheral,并做了必要的改变来读写flash。你能帮我做错什么吗?

感谢和问候
罗希特

Qinjiny_Dialog
离线
最后看到:2周5天前
工作人员
加入:2016-11-01 05:47
嗨Rajapurerohit,

嗨Rajapurerohit,

正如我在另一篇文章中说的,请确保你构建的项目为DA14583目标,不要手动为flash保留GPIO。

BR,

Qinjin杨

Rajapurerohit
离线
最后看到:10个月3天前
加入:2017-04-20 09:17
嗨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.设备停止广告,无法看到自定义板后。

感谢和问候
罗希特

Qinjiny_Dialog
离线
最后看到:2周5天前
工作人员
加入:2016-11-01 05:47
嗨Rajapurerohit,

嗨Rajapurerohit,

感谢您提供以上的详细信息。所以我才问你到底哪里出了问题。该程序在RAM上运行良好,并从flash启动第一次没有问题,但停止工作后,您的flash写入操作。

您可能必须检查所写入的flash地址是否在代码大小之内,因为所写入的数据似乎以某种方式破坏了存储在flash上的代码,使其无法再次启动。

BR, Qinjin

Rajapurerohit
离线
最后看到:10个月3天前
加入:2017-04-20 09:17
嗨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);

感谢和问候
罗希特

Qinjiny_Dialog
离线
最后看到:2周5天前
工作人员
加入:2016-11-01 05:47
嗨Rajapurerohit,

嗨Rajapurerohit,

请尝试使用其他地址,如0x7000,看看问题是否仍然存在。

Rajapurerohit
离线
最后看到:10个月3天前
加入:2017-04-20 09:17
嗨Qinjiny,

嗨Qinjiny,

感谢您的回复,

我会试试这个地址,然后告诉你结果。

我还注意到一件事,如果我注释掉storeflashdata()和readflashdata()。将。hex文件刻录到83个开发套件中,然后设备停止广告,一旦它关闭并启动设备。

感谢和问候
罗希特

PM_Dialog
离线
最后看到:1天19小时前
工作人员
加入:2018-02-08 11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

好的,请告诉我们,谢谢你的指示。如果您认为以上答案中有任何一个有用,请将其中一个标记为已接受。

谢谢,PM_Dialog

Rajapurerohit
离线
最后看到:10个月3天前
加入:2017-04-20 09:17
嗨Qinjiny

嗨Qinjiny

我已经改变了地址,现在我可以存储和读取我的自定义数据。

我将再次测试,并更新相同的你。

非常感谢你一直以来的帮助,它真的帮助我度过了难关。

再次感谢您的帮助。

感谢和问候
罗希特

PM_Dialog
离线
最后看到:1天19小时前
工作人员
加入:2018-02-08 11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

很高兴你解决了自己的问题。如果您认为以上答案中有任何一个有用,请将其中一个标记为已接受。

谢谢,PM_Dialog