亲爱的对话支持:,
我有一个带有Murara ZY模块(DA14580)的定制板,附带一个SPI闪存Winbond W25X20。
我直接编程DA14580,或通过UART通过智能代码段v4.8.3.1804编程flash。我使用物联网工具包编程器板[编辑:CIB]。
两个板都通过J4处的15 cm扁平带状电缆连接。
当通过UART连接时,我可以成功连接、读取、擦除、刻录,固件将在启动时加载,我可以使用设备。
通过JTAG(SWD)连接时,连接似乎已成功建立:
[INFO General@18-08-12 21:01:50]无法测量总IR透镜。时差是恒定的高。
[INFO General@18-08-12 21:01:50]无法测量总IR透镜。时差是恒定的高。
[信息概述@18-08-12 21:01:50]发现ID为0x0BB11477的SWD-DP
[INFO General@18-08-12 21:01:50]FPUnit:4个代码(BP)插槽和0个文字插槽
[信息概述@18-08-12 21:01:50]发现了Cortex-M0 r0p0,Little endian。
[信息概述@18-08-12 21:01:50]已选择BTLE设备。
加载SPI闪存固件也可以正常工作:
[信息SPI Flash@18-08-12 21:04:25]发现ID为0x0BB11477的SWD-DP
[信息SPI Flash@18-08-12 21:04:25]FPUnit:4个代码(BP)插槽和0个文字插槽
[信息SPI Flash@18-08-12 21:04:25]发现Cortex-M0 r0p0,Little endian。
[信息SPI Flash@18-08-12 21:04:25]已选择下载固件文件C:\Program Files(x86)\Dialog\SmartSnippetsStudio\Toolbox\common_resources\jtag_programmer.bin。
[信息SPI Flash@18-08-12 21:04:25]已成功将固件文件下载到主板。
[信息SPI闪存@18-08-12 21:04:25]已成功配置SPI闪存端口和引脚。
阅读不起作用(flash/erase也不起作用)
[INFO-SPI Flash@18-08-14 22:22:06]开始从内存中读取32768字节。
[ERROR SPI Flash@18-08-14 22:22:06]读取地址81FE8处的内存失败。
[ERROR SPI Flash @18-08-14 22:22:06]读取内存失败。
两种情况下的配置相同(SPI闪存引脚配置、SPI闪存选项、SPI闪存大小(十六进制,以字节为单位),请参阅随附的pdf。
你知道会出什么问题吗?
顺致敬意,
约翰尼斯
嗨,格梅·约翰内斯,
我无法理解你想做什么。您想通过JTAG并使用SmartSnippets工具对自定义电路板或murata模块进行编程吗?“物联网工具包程序员板”是什么意思?你是说通讯接口板(CIB)?请在连接图后面提供更多的具体信息,以便给您正确的答案。
谢谢,下午好
我已经购买了CIB附带的物联网传感器开发工具包,是的。
使用这个CIB,我尝试用Murata ZY和附带的Winbond W25X20编程一个定制板。
通过UART,它工作->内存可以编程,Murata ZY将从闪存加载固件。
在社会福利署,这是行不通的。
让我困惑的是,社会福利署似乎确实在工作,它确实建立了与模块的连接,但闪存编程失败。
在上面看到的日志。
您还需要哪些其他信息?
flash_programmer.bin(用于UART)是否可能支持W25X20,而jtag_programmer.bin不支持?
我应该修改并重建这个固件吗?
编辑:我已经调查了DA1458x_SDK\5.0.4\utilities\flash_程序员,对于我(作为外行)来说,W25X20支持似乎没有区分UART/JTAG。
此外,GPIO似乎被拉起,这是好的,因为我有其他传感器共享SPI总线(无论如何,它与UART一起工作正常,所以我没想到这会是罪魁祸首)。
我还看到了与此线程的可能关系:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl...
你有上面提到的文件吗?这会有帮助吗?
PS:我意识到我应该在“工具”论坛上发布这个?也许你可以移动它。
我现在注意到,只要W25X20是空的,通过SWD读取和编程闪存就可以正常工作。
1.闪存已编程,设备从闪存引导,工作正常
2.使用SWD->打开SS工具箱,其行为如初始帖子中所述
3.使用UART打开SS工具箱->删除闪存
4.使用SWD打开SS工具箱->可以成功读取闪存(全部为空=FF)[参见下面的第一个日志]
5.尝试写入闪存->成功,但立即(自动)回读失败[参见下面的第二个日志]
6.确认闪存编程成功,因为设备再次从闪存启动并正常工作
第一个日志
[INFO General@18-08-19 11:01:22]无法测量总IR透镜。时差是恒定的高。
[INFO General@18-08-19 11:01:22]无法测量总IR透镜。时差是恒定的高。
[信息概述@18-08-19 11:01:22]找到ID为0x0BB11477的SWD-DP
[INFO General@18-08-19 11:01:22]FPUnit:4个代码(BP)插槽和0个文字插槽
[信息概述@18-08-19 11:01:22]发现了Cortex-M0 r0p0,Little endian。
[信息概述@18-08-19 11:01:22]已选择BTLE设备。
[INFO SPI Flash@18-08-19 11:03:16]头记录已从十六进制文件wrbl_sfl_580.hex中删除。
[信息SPI Flash@18-08-19 11:03:16]从文件wrbl_sfl_580.hex读取30776字节。
[信息SPI Flash@18-08-19 11:03:18]找到ID为0x0BB11477的SWD-DP
[信息SPI Flash@18-08-19 11:03:18]FPUnit:4个代码(BP)插槽和0个文字插槽
[信息SPI Flash@18-08-19 11:03:18]发现Cortex-M0 r0p0,Little endian。
[信息SPI Flash@18-08-19 11:03:19]固件文件C:\Program Files(x86)\Dialog\SmartSnippetsStudio\Toolbox\common_resources\jtag_programmer.bin已选择下载。
[信息SPI Flash@18-08-19 11:03:19]已成功将固件文件下载到主板。
[信息SPI闪存@18-08-19 11:03:19]已成功配置SPI闪存端口和引脚。
[INFO-SPI Flash@18-08-19 11:03:33]开始从内存中读取32768字节。
[信息SPI Flash@18-08-19 11:03:34]读取已完成。读取32768字节。
第二日志
[INFO SPI Flash @18-08-19 11:05:01]在0x00000地址开始燃烧内存31096字节的数据。
[信息SPI Flash@18-08-19 11:05:01]内存刻录已成功完成。
[信息SPI Flash@18-08-19 11:05:01]读取内存以刷新内存内容。。。。
[ERROR SPI Flash@18-08-19 11:05:01]读取地址81FE8处的内存失败。
[ERROR SPI Flash @18-08-19 11:05:01]读取内存失败。
嗨,格梅·约翰内斯,
如果要在SPI闪存为空时连接并读取,最可能的原因是您的固件禁用了调试器。那么,您能检查一下您的固件是否禁用了调试器吗?另外,当闪存不为空时,请按下重置按钮,然后尝试连接并读取SPI闪存?
谢谢,下午好
你好,下午对话,
如日志所示
[信息SPI Flash@18-08-12 21:04:25]已选择下载固件文件C:\Program Files(x86)\Dialog\SmartSnippetsStudio\Toolbox\common_resources\jtag_programmer.bin。
[信息SPI Flash@18-08-12 21:04:25]已成功将固件文件下载到主板。
[信息SPI闪存@18-08-12 21:04:25]已成功配置SPI闪存端口和引脚。
jtag_programmer.bin固件已成功加载到设备。因此,在这一点上,我的固件不再运行。。。(我也可以通过LED的行为来判断)。
是否在加载jtag_programmer.bin(?)的过程中设备没有完全复位,并且DA14580中的一些寄存器仍然像我的固件(例如禁用的调试器)那样编程?
此外,在我成功编程一次后,读取闪存怎么会立即失败?
毕竟,新固件不会立即从闪存加载,因为设备不会重置。
嗨,格梅·约翰内斯,
在加载jtag_programmer.bin的过程中,设备不可能没有完全复位。您是否检查了固件是否禁用了调试器?我试图重现您的问题,但我能够在SPI闪存不为空时成功连接/读取。
谢谢,下午好
你好,下午对话,
我不理解你的论点,因为你自己说过:一旦jtag_programmer.bin成功加载(根据日志),设备就被完全重置了——因此设备中不应该存在剩余的固件,无论我的固件做什么都不重要。
不过,让我回答你的问题:
固件不会禁用调试器,尽管我确实为连接到相关端口的两个LED实现了此选项。
我已经确保没有禁用调试器,也没有使用相关的GPIO端口。我已经验证了它,因为我可以很容易地从指示灯是否工作来判断。
#ifdef使用JTAG作为GPIO
SetBits16(系统控制寄存器,调试器启用,0);
#否则
SetBits16(SYS\u CTRL\u REG,DEBUGGER\u ENABLE,1);
#恩迪夫
#ifdef使用JTAG作为GPIO
#定义LEDG_端口GPIO_端口1
#定义LEDG_引脚GPIO_引脚5
#定义LEDB_PORT GPIO_PORT_1
#定义LEDB_引脚GPIO_引脚4
#恩迪夫
我仍然无法读取闪存编程时。
嗨,格梅·约翰内斯,
请尝试通过JTAG对SPI闪存进行编程,并在程序完成后从CIB按下复位按钮,然后尝试连接和读取SPI闪存。你能告诉我这是否有效吗?正如我在上一篇文章中看到的,调试器没有禁用,但事实上,这是一个自定义板,我无法复制您的问题。
谢谢,下午好