你好所有的,
我用ble_peripheral SDK 5.0.4的例子具有DA14583子板上建立我的应用程序,
我用它连接方法为基础,
我得到一些数据(即。,128 bytes) in connection based method and the same data I want to write/read to/from Flash.
我写数据时flash设备断开与中央,和同样毕竟initilisation periph_init函数中读取数据。
我所需的变化相同,单独的头文件和源文件来处理Flash读/写操作,我附上这篇文章。
我面临的问题是,当我读/写数据到flash设备停止广告重新提供动力。
我试着调试相同但在设备调试效果好。然而当我把代码在Flash的读/写周期Flash如果我重新提供动力设备停止广告。这种情况尤其在写周期执行。
我的代码内存扩展到地址0 x7dc8闪存,所以我已经开始adddress与读/写0 x 7 e00大小为256字节,而读/写操作。
我已经尝试改变开始adddress 0 x7e10 0 x7ef0 0 x7f00,和读/写规模到255年,100年,128年,照顾flash的最后地址(0 x7fff)不超过。
请帮我最早也要在这种情况下。
我不理解的原因我用相同的方法和相同的来源和头文件在另一个项目也基于连接的,我能读/写数据从/到flash中没有任何问题。我的起始地址是0 x7000和大小是150字节。
根据我的测试的更多信息
我有一些观测结果也可能是错的,但只是通知你如果它帮助
我已经观察到的参数从“SECTOR_ERASE spi_flash。“h”用于api spi_flash_block_erase (USER_FLASH_RW_ADDRESS SECTOR_ERASE);“虽然flash写入操作会影响广告的停止的设备,
当我改变这个参数设置为0时x10 0 x05或当我通过255/256的api,而不是直接传递参数“SECTOR_ERASE”。
广告的问题得到解决,但数据没有写在flash或数据的写操作
我已经检查这个工具还在调试和智能片段。
感谢和问候
Utkarsh
嗨Utkarash,
你提到在调试模式下运行时代码工作正常,但问题是当读/写数据到flash,我的理解是正确的吗?如果在调试模式下运行您的代码,你能请注明与flash交互时发生了什么?
不建议与periph_init的SPI Flash()函数。这个函数将被触发时系统靴子和设备醒来的时候。你添加断点的读/写功能实现了吗?同时,请让我知道如果你有启用或禁用监督?你的问题最可能的原因是,你的固件可能会被困在某个地方。
如果设备停止广告固件是执行好,应该触发.app_on_adv_undirect_complete回调。你能在这个回调函数中添加断点?
“我不理解的原因我用相同的方法和相同的来源和头文件在另一个项目也基于连接的,我能读/写数据从/到flash中没有任何问题。我的起始地址是0 x7000和大小是150字节。”
你能请注明项目的SDK代码是按预期工作吗?你使用任何的睡眠模式矿设备主动模式操作?
谢谢,PM_Dialog
谢谢你的回应
你提到在调试模式下运行时代码工作正常,但问题是当读/写数据到flash,我的理解是正确的吗?是的正确当我闪光的代码并执行SPI flash读/写然后停止广告。
如果在调试模式下运行您的代码,你能请注明与flash交互时发生了什么?在调试一切正常工作没有问题是观察到的代码流是适当的。读fxn写的代码正确后,回到正常的代码流。
你添加断点的读/写功能实现了吗?是的,我试着通过保持断点但没有面临任何问题我也试着改变调用的位置从periph init读取闪存。现在我叫读flash在定时器处理程序fxn 5/10秒后初始化。但问题是相同的。
同时,请让我知道如果你有启用或禁用监督?不,我没有启用或禁用监督。如果我的代码是陷入我怎么能找到其困和解决方案吗?
你能在这个回调函数中添加断点?请接受我诚挚的歉意。实际上我昨天忘了通知我已经做了一些修改ble_perihpheral代码我想操作设备在观察者和Pheripheral模式现在我不该有“app_on_adv_undirect_complete回调”,但我的设备工作正常。这是创造的问题吗?
你能请注明项目的SDK代码是按预期工作吗?项目基于同一ble外围但只连接和SDK也相同(5.0.4)
你使用任何的睡眠模式矿设备主动模式操作?不。
请注意我下面提到的精确流程理解当设备停止广告当我闪光的代码
更改过
我评论的api”spi_flash_block_erase (USER_FLASH_RW_ADDRESS SECTOR_ERASE)”,倾倒在flash中相同的代码。
重点提到了以上的步骤之后,正常工作。
我可能是错的,但只有一个查询所以想和你确认的是这个api导致问题因为块擦除后我有更少的内存起始地址(即。512字节(7 e00 7 fff)) ?
如果是这样我们可以使用任何替代函数,而不是“spi_flash_block_erase”,我可以抹去定制的字节数(256或512字节也会帮助消除)?。或者还有其他问题吗?
请帮我拿这个最早。
感谢和问候
Utkarsh
你好所有的,
有任何更新关于昨天的帖子吗?
还有一个观察,我想与大家分享,什么“spi_flash_block_erase”api是耳朵包含从0 x7000 flash地址从而导致在flash中抹去我的一些代码部分。
我已经检查了在智能倾倒后的代码总代码片段x7d40延伸到内存地址0。
请帮助最早来避免这个问题。
感谢和问候
Utkarsh
嗨Utkarash,
你是什么意思?监管机构可能醚禁用或启用。如果在da1458x_config_basic CFG_WDOG宏。定义h,启用了监管机构。默认监督周期是WATCHDOG_DEFAULT_PERIOD arch_wdg.h宏定义。获得有关监督部门的更多信息请参考数据表。
老实说,我不确定如何实现此功能。你有实现角色转换?如果你把flash读/写,是正常工作吗?
在“正常模式”是什么意思?
最可能的原因可能是,你的代码可能被困在某个地方。我建议您运行您的代码在调试模式下,跨过代码并试图找到卡住。例如,当读/写,是程序完成了吗?你检查什么代码吗?请阅读教程8:调试方法。
谢谢,PM_Dialog
谢谢你的回应
1)老实说,我不确定如何实现此功能。你有实现角色转换?如果你把flash读/写,是正常工作吗?
答:是的,我已经实现了角色转换。它工作正常,flash读/写。还请注意,我发现,如果我删除flash编写函数,只保留flash读函数是完全好,没有问题。
2)在“正常模式”是什么意思?
答:正常模式意味着代码按预期运行。,In Debug when i run the code, as i said earlier it does proper Role Switching in observer and pheripheral mode, i can connect to the device, and i can exchange data. This data is stored in flash properly. and if try to read flash i can also read it properly, and No where the code gets stucks.
根据我的观察,我早点共享,“spi_flash_block_erase”api是闪光的一部分写功能的耳朵从0 x7000 flash内容地址进而导致消除一些我在flash中代码的一部分。我已经检查了在智能倾倒后的代码总代码片段x7d40延伸到内存地址0。
我可能是错的,但是,我认为在调试模式下的代码在内存和执行写flash操作时不影响代码,但当代码倾倒在flash(使用智能片段工具箱)和执行闪存写操作部分编写的代码从adddress 0 0 x7d40 x7000是抹去(检查Read30KB选项在智能片段工具箱)。
3)请检查spi_flash外围的例子的SDK spi_flash_block_erase使用的是()。
答:感谢你的回应。根据你的建议我已经通过了“spi_flash外围榜样”,
然而正如我提到“spi_flash_block_erase ()”在我的代码也能正常工作。但它是什么,它earse一些我的代码的一部分,它将导致停止广告,所以我请求你,有没有方法/ api avliable我可以earse一页(即。,内存大小256字节)?请帮助最早。
因为在“spi_flash外围榜样”我只发现功能“spi_flash_block_erase ()”,”spi_flash_chip_erase”和”spi_flash_chip_erase_forced”这又会导致耳朵我的代码在flash内存部分
4)例如,当阅读/写作,是程序完成了吗?你检查什么代码吗?
答:谢谢你的链接我将通过它。是的我读写falsh操作后检查什么代码,它不停止任何地方
请检查我下面提到的调试步骤
请帮助最早。
感谢和问候
Utkarash
你好所有的,
在这种情况下有没有更新呢
请帮忙,
感谢和问候
嗨Utkarash,
谢谢,PM_Dialog
谢谢你的回应
1)请注明如果da1458x_config_basic CFG_WDOG宏。h的定义。
答:是的,这是定义默认情况下我没有做任何更改。
2)USER_FLASH_RW_ADDRESS您正在使用值是什么?
答:0 x7e00
我将努力实现这个内存保护代码并尝试运行代码送还给你,到那时请检查并告诉如果监管机构或“USER_FLASH_RW_ADDRESS”解决造成任何问题。
也可以你请帮我使用的内存保护api,因为它只有一个参数,选择通过poarameters“W25x10_MEM_PROT_NONE”,“W25x10_MEM_PROT_UPPER_HALF”、“W25x10_MEM_PROT_LOWER_HALF”,“W25x10_MEM_PROT_ALL”,因为我想保护0 0 x7df0 x7000。
感谢和问候
Utkarsh
嗨Utkarash,
请实现内存保护和让我知道。
谢谢,PM_Dialog
你好所有的,
我实现了内存保护,但我所面临的问题是我不能转储/程序/燃烧代码在我的设备使用工具箱即聪明的片段。,我不能够earse闪光。
1)也正如我之前已经通知,在智能代码片段和总闪电被从0 0 x07d48 x00000,在当我块擦除使用api“spi_flash_block_erase (0 x07e00 SECTOR_ERASE)”代码部分从0 x07000到0 x07d48 0 x07e00一样我给起始地址。
考虑点1的情况下如果我使用内存保护api在这种情况下,我无法重写数据上的flash内存地址(即相同。0 x07e00],
我尝试过内存保护api与所有这些参数作为下面,
一)spi_flash_configure_memory_protection (W25x20_MEM_PROT_UPPER_QUARTER);
b) spi_flash_configure_memory_protection (W25x20_MEM_PROT_UPPER_HALF);
c) spi_flash_configure_memory_protection (W25x20_MEM_PROT_LOWER_QUARTER);
d) spi_flash_configure_memory_protection (W25x20_MEM_PROT_LOWER_HALF);
e) spi_flash_configure_memory_protection (W25x20_MEM_PROT_ALL);
我已经试了所有上述论点但我不能重写数据flash或代码部分是耳朵。这个问题仍然是相同的
我请求你请帮助
感谢和问候
Utkarsh
你好所有的,
在上述问题上有任何更新?
感谢和独立
Utkarash
嗨Utkarash,
只要我能理解你所描述的,可能您正在运行的固件损坏。你能请注明如果你从Sys-RAM或SPI Flash引导吗?你烧的SPI Flash你的固件吗?如果是的,请下列程序以确保二进制图像数据写入flash时损坏。
谢谢,PM_Dialog
你好所有的,
谢谢你的回应,
你能请注明如果你从Sys-RAM或SPI Flash引导吗?答:SPI闪光。
你烧的SPI Flash你的固件吗?答:是的
比较两个图像和显示如果他们是相同的。使用diff工具来进行比较。答:我也跟着你推荐的步骤,而这两个文件在WinMerger工具但图像出现不同
SPI闪存的数据你写,在写地址吗?答:获得确切的flash写入操作之前和之后发生了什么我加载文件智能片段在SPI flash程序员使用浏览选项选项卡。同样的我附上了一个图像称为比较请检查
我还附加导出的二进制文件的flash闪存数据写入操作之前和之后都写操作的数据。
”之后,导出二进制图像,因为它是燃烧的SPI闪电。”、文件命名为数据写入flash.bin之前下面的链接
https://drive.google.com/file/d/10tSntB6UZ1bX7yvFYnb5SMey4PEW0sw-/view?u..。
“只要写的数据,再次出口的二进制映像SPI Flash。”,文件命名为数据wrirtten flash.bin之后下面的链接
https://drive.google.com/file/d/10tSntB6UZ1bX7yvFYnb5SMey4PEW0sw-/view?u..。
请帮我如果有任何替代api,而不是“spi_flash_block_earse”,我只能earse页面而不是块内存。
感谢和问候
Utkarash
嗨Utkarash,
你能压缩和附加两个二进制图像为了检查他们吗?
之后,如果你不叫spi_flash_block_earse写数据到SPI闪光灯,你能够引导吗?我试图理解你的问题可能的原因。
谢谢,PM_Dialog
嗨Utkarash,
你能压缩和附加两个二进制图像为了检查他们吗?
之后,如果你不叫spi_flash_block_earse写数据到SPI闪光灯,你能够引导吗?我试图理解你的问题可能的原因。
谢谢,PM_Dialog
你好所有的,
谢谢你的回应。
你能压缩和附加两个二进制图像为了检查他们吗?对不起inconvinenc我与这个消息附加. zip文件。
之后,如果你不叫spi_flash_block_earse写数据到SPI闪光灯,你能够引导吗?我试图理解你的问题可能的原因。你的理解是正确的,如果我不叫“spi_flash_block_earse”我能够引导但如果flash不是耳朵我的数据也不是写在闪光。
请帮助最早的设备即将进入生产阶段,只有这个问题是瑞玛我迫切需要解决。
我请求你与任何其他api,如果可能的话请帮我只能删除页面的闪光
感谢和独立
Utkarsh
你好所有的,
在这个问题上有任何更新吗?
我请求你请帮最早的设备即将进入生产阶段,只有这个问题瑞玛我迫切需要解决它。
感谢和问候
Utkarash
嗨Utkarash,
根据之前的二进制数据被写入SPI Flash,执行代码存储从0 x0000 (Sector_0) 0 x7bd7 (Sector_7)。每个部门都是0 x1000字节。在你的固件,数据将被写入/擦除从USER_FLASH_RW_ADDRESS (0 x07e00),位于Sector_7好。当执行spi_flash_block_erase (USER_FLASH_RW_ADDRESS SECTOR_ERASE),洞口Sector_7将被删除,这既包含你的固件和存储数据。这意味着二进制图像损坏,因此你将无法启动。请检查后的二进制数据被写入SPI Flash和你会发现的Flash擦除0 x7000地址。如果你想删除该行业在写数据到flash之前,你应该在接下来的行业之一。例如,在Sector_8,所以你应该做以下修改:
#定义x08000 USER_FLASH_RW_ADDRESS 0
spi_flash_block_erase (USER_FLASH_RW_ADDRESS SECTOR_ERASE);
所以,当执行spi_flash_block_erase (), Sector_8将抹去,不包含执行代码。
谢谢,PM_Dialog
你好先生,
谢谢你的回应
我有检查虚拟数据和广告的问题是解决了但是现在我将测试通过书写正确的数据,并让你知道
只有一个问题,你说我是使用部门7 (0 x07000)和读/写数据在flash中,我应该使用部门地址0 x08000 8,
所以考虑这个,直到有多少部门可供用户保存数据。并将这对固件有任何影响。
谢谢你再一次
感谢和问候
Utkarash
嗨Utkarash,
DA14583嵌入式1 mbit SPI flash对应1024 x 1024 = 1048576位或131072字节。你可以检查ble_app_secutity的SDK5.0.4 SPI的例子使用flash存储键数据。在user_periph_setup。USER_CFG_APP_BOND_DB_USE_SPI_FLASH宏观下h头文件,你会发现下面的定义:
#定义SPI_FLASH_DEFAULT_SIZE 131072 / / SPI Flash内存大小的字节
#定义SPI_FLASH_DEFAULT_PAGE 256
#定义SPI_SECTOR_SIZE 4096
每个部门都是4096 (= 0 x1000)字节对齐,每个部门有131072字节/ 4096字节= 32 (= 0 x20)可用部门对应0 x00000 - 0 x1ffff地址空间。你可以澄清的flash程序员SmartSnippets工具箱。
根据你之前二进制存储数据到flash,固件位于从0 x0000 (Sector_0) 0 x7bd7 (Sector_7)。要做到这一点,您可以使用0 x08000 (Sector_8) - 0 x1ffff (Sector_32)如果你想执行部门擦除。
请检查附件图片,你将我以前我在文章中提到过关于损坏的固件。
谢谢,PM_Dialog