你好
我想通过J-Link刻录一个辅助引导加载程序到OTP。我想通过UART将应用程序代码从主控制器复制到RAM。我想配置GPIO引脚P1_0为Tx, P1_1为引导加载器的Rx。从哪里我可以下载辅助引导加载程序和我如何配置Tx和Rx引脚?
嗨,维克,
二级引导装载程序位于SDK工具文件夹中,你需要定义SUPPORT_AN_B_001为了启用二级引导装载程序特性,然后通过它通过禁用spi和i2c接口UART_SUPPORTED SPI_FLASH_SUPPORTED EEPROM_FLASH_SUPPORTED和定义。这样做之后,您必须通过更改UART_GPIO_PORT、UART_TX_PIN和UART_RX_PIN的定义,将UART引脚更改为您想要的引脚。以上操作应该没问题,您可以在将fw刻录到OTP之前进行测试,方法是将其直接运行到sysram并下载一个fw到UART。
由于MT_dialog
嗨MT_dialog,
谢谢您的快速回复。我已经按照你上次回复的步骤做了。为了测试,我已经下载了使用Jlink的辅助引导加载程序固件到sysram,我已经通过USB连接到Uart转换器的Uart线到PC。但是我在uart线中看不到任何东西。一旦引导加载程序固件成功加载,我预计BLE模块将连续发送“0x02”。
我已经下载了SDKhttps://support.dialog-semiconductor.com/connectivity/product/da14580?qt..。,并做了以下修改并更改了UART_GPIO_PORT、UART_TX_PIN和UART_RX_PIN宏。请检查它。
将第24行从#undef UART_SUPPORTED改为#define UART_SUPPORTED第27行,从#define SPI_FLASH_SUPPORTED到#undef SPI_FLASH_SUPPORTED第37行,从#undef SUPPORT_AN_B_001到#define SUPPORT_AN_B_001
我已经提到的配置是有效的,如果你不看到0 x02这意味着设备跟踪RX销,你没有设置高的状态,引导装载程序的主要功能在UART支持部分如果有条件(GPIO_GetPinStatus (UART_GPIO_PORT,在执行扫描过程之前检查RX引脚。
我已经检查了Rx引脚的电压,我得到了3.3伏。但我仍然无法看到0x02。
如果我在调试模式下运行代码,它工作正常。我能够在终端中看到0x02,并且能够使用SmartSnippets工具对其他示例项目进行编程。我已经按照Alps开发工具包应用程序说明中解释的步骤在调试模式下运行。
如何使其在发布模式下工作?
在调试模式和发布模式下运行代码到底是什么意思?辅助引导加载器禁用了CFG_DEVELOPMENT_DEBUG定义,在我这边的RAM中运行项目始终输出一个0x02字节,用于从外部UART引导。我不熟悉阿尔卑斯山的文件。
你这边是否尝试通过P1_0作为Tx, P1_1作为Rx引导加载程序?
释放模式意味着我将使用smarsnippet工具下载.hex文件到sysRam。在这个方法中我没有得到0x02。
为了在调试模式下运行,我们在kiel中有一个选项,点击附件中显示的图标。然后我们可以逐步执行或连续运行代码。在这个方法中,我得到0X02。但是对于最终产品,我想使用hex文件。所以我想在刻录到OTP之前通过下载到sysRam来验证它。
如果您需要阿尔卑斯的文件,请发送您的电子邮件id到vivek@technosphere.in或jasim@technosphere.in
我测试了下载过程通过使用JTAG接口的智能片段,事实上我没有看到行动第10页和侯别针(我想这是你所看到的)当下载弗兰克-威廉姆斯,但是我也尝试使用UART接口和探索两个别针和弗兰克-威廉姆斯是正常操作,我可以假设这是相关的下载过程而不是.hex文件了,在这两种情况下,.hex文件是相同的,其反映在sysram但出于某种原因,当从JTAG使用智能下载二进制代码片段弗兰克-威廉姆斯不跑,但是我不认为这与弗兰克-威廉姆斯无关,例如,如果你加载二进制文件到flash,以模拟OTP副本,它应该正常工作,并通过UART下载fw。
我没有选择在我的硬件tap PORT0引脚(这是用于内置uart引导加载程序)。所以我必须使用Jlink加载二级引导加载程序固件。如果我使用JLink将辅助引导程序的十六进制文件flash到OPT,它会正常工作吗?还是会面临同样的问题?
我尝试过使用Jlink将hex文件刻录到OTP中。我遵循了WI_Dialog在文章中的指示https://support.dialog-semiconductor.com/program-da14580-otp-memory和用户手册“UM-B-083”。但我收到了一条错误消息“在JTAG地址0x81FEC(MSB优先):FF FF FE处的AddDictional错误信息”,并在失败之前写入了2个字节,从而破坏了OTP。
请查收附件中的图片。
正如我在上一篇文章中提到的,我怀疑无法使用智能代码段从sysram直接下载并运行secondary_引导加载程序的原因是智能代码段本身,因为我可以使用SEGGER commander下载.bin并下载并运行二进制文件。所以,不,我不认为如果你在OTP中烧掉辅助引导程序会有这个问题,我还使用flash(在flash中绑定辅助引导加载程序)和二进制运行测试了这个问题。
关于检察官办公室的问题。这很可能是由于OTP编程供应引起的问题。所以请检查一下。
谢谢你的建议。我已经成功地将程序烧录到OTP中(问题是OTP供应6.8)。次级引导加载程序现在工作正常。我能够看到0x02,我能够加载应用程序到系统ram使用智能片段工具。
但是,每当我通过主机控制器加载应用程序固件时,它都不工作。我在发送报头(SOH和长度)时得到正确的ACK,并且在固件数据包的末尾得到CRC。由于CRC匹配,我向BLE模块发送ACK。但在那之后,我不断地得到“0x02”。
似乎BLE模块正在重新启动,来自OTP的数据覆盖了我的应用程序代码。
我必须设置一些东西在OTP头来避免这个?或者在辅助引导加载程序固件中有什么遗漏吗?
注意:-根据阿尔卑斯参考手册,我在OTP头部做了以下更改。应用flag1:是的・应用flag2:是的・校准标志:[4]= 1。晶体16兆赫削减值:320・DMA长度:1 fc0
顺序是这样的,设备将从OTP引导,并从OTP加载自定义引导加载程序,设备将运行引导加载程序并开始检查您的自定义端口。一旦设备发现某些内容,它将开始将fw从UART复制到系统RAM,然后当设备成功完成下载序列时,它将分支到新下载的fw。辅助引导加载程序的fw运行到ret ram中,而不是在系统ram中,因此我认为OTP不会重写下载到系统ram中的fw。也许下载的fw会运行,并在某个时候导致设备复位?OTP中没有要刻录的其他配置。
嗨MT_Dialog,
当设备成功完成下载顺序时,它将分支到新下载的fw。>>我认为这种分支没有正常发生。从ble模块获取CRC后,我正在发送ACK(0X06)。我希望引导加载程序代码在从主机控制器获得ACK后,必须处理到新下载固件的分支。
“下载的fw可能会运行,并在某个时候导致设备重置?”> >没有。我已经尝试了我的应用程序代码和SDK中的示例代码(SDK 5.0.4\DA1458x_SDK\5.0.4\projects\host_apps\da1458x\proximity\reporter)。我已经发送了固件包含在“prox_reporter_ext.h”文件在上述项目。在这两种情况下,它都失败了。它要么被重置,要么程序跳到错误的地址,一旦程序计数器达到最大值,就从重置地址开始执行。
“在OTP中不需要燃烧额外的配置。”>>能否验证一下我对OTP头的改动?应用程序(应用程序flag1:是的・flag2:是的・校准标志:[4]= 1。晶体16兆赫削减值:320・DMA长度:1 fc0)
您是否测试过这一点,以检查这是否是在所有情况下都会发生的,而不仅仅是在引导加载程序烧录到OTP时?例如,您是否尝试通过keil下载fw(以便辅助引导加载程序运行),并且在辅助引导程序运行时使用Smart Snippets引导工具下载fw?我已经尝试了上面的方法,我能够通过UART从引脚P10和P11引导,并在成功上传映像时准确地检查辅助引导程序分支的位置。
我看不出您烧入OTP的值有任何错误,为了从OTP启动,两个标志都应该设置为“是”,关于XTAL 16MHz微调值,这取决于您的晶体,DMA长度不是必需的,但我认为这不会给您带来任何问题。
关于分支,辅助引导加载程序在设备成功下载fw后,将转到sw_reset()中的Start_run_user_application()。引导程序将从新下载fw的向量表中向SP寄存器分配堆栈值,然后分支到下载fw的reset_处理程序。
谢谢你的支持。它现在工作得很好。问题是读取固件阵列的方式。我已经从“SDK 5.0.4\DA1458x_SDK\5.0.4\projects\host_apps\da1458x\proximity\reporter\src”中获取了示例代码spi_booter.c,并将其转换为uart接口。在转换过程中,我犯了一个错误,读取了错误的地址。
嗨,维克,
二级引导装载程序位于SDK工具文件夹中,你需要定义SUPPORT_AN_B_001为了启用二级引导装载程序特性,然后通过它通过禁用spi和i2c接口UART_SUPPORTED SPI_FLASH_SUPPORTED EEPROM_FLASH_SUPPORTED和定义。这样做之后,您必须通过更改UART_GPIO_PORT、UART_TX_PIN和UART_RX_PIN的定义,将UART引脚更改为您想要的引脚。以上操作应该没问题,您可以在将fw刻录到OTP之前进行测试,方法是将其直接运行到sysram并下载一个fw到UART。
由于MT_dialog
嗨MT_dialog,
谢谢您的快速回复。我已经按照你上次回复的步骤做了。为了测试,我已经下载了使用Jlink的辅助引导加载程序固件到sysram,我已经通过USB连接到Uart转换器的Uart线到PC。但是我在uart线中看不到任何东西。一旦引导加载程序固件成功加载,我预计BLE模块将连续发送“0x02”。
我已经下载了SDKhttps://support.dialog-semiconductor.com/connectivity/product/da14580?qt..。,并做了以下修改
并更改了UART_GPIO_PORT、UART_TX_PIN和UART_RX_PIN宏。请检查它。
将第24行从#undef UART_SUPPORTED改为#define UART_SUPPORTED
第27行,从#define SPI_FLASH_SUPPORTED到#undef SPI_FLASH_SUPPORTED
第37行,从#undef SUPPORT_AN_B_001到#define SUPPORT_AN_B_001
嗨,维克,
我已经提到的配置是有效的,如果你不看到0 x02这意味着设备跟踪RX销,你没有设置高的状态,引导装载程序的主要功能在UART支持部分如果有条件(GPIO_GetPinStatus (UART_GPIO_PORT,在执行扫描过程之前检查RX引脚。
由于MT_dialog
嗨MT_dialog,
我已经检查了Rx引脚的电压,我得到了3.3伏。但我仍然无法看到0x02。
如果我在调试模式下运行代码,它工作正常。我能够在终端中看到0x02,并且能够使用SmartSnippets工具对其他示例项目进行编程。我已经按照Alps开发工具包应用程序说明中解释的步骤在调试模式下运行。
如何使其在发布模式下工作?
嗨,维克,
在调试模式和发布模式下运行代码到底是什么意思?辅助引导加载器禁用了CFG_DEVELOPMENT_DEBUG定义,在我这边的RAM中运行项目始终输出一个0x02字节,用于从外部UART引导。我不熟悉阿尔卑斯山的文件。
由于MT_dialog
你这边是否尝试通过P1_0作为Tx, P1_1作为Rx引导加载程序?
释放模式意味着我将使用smarsnippet工具下载.hex文件到sysRam。在这个方法中我没有得到0x02。
为了在调试模式下运行,我们在kiel中有一个选项,点击附件中显示的图标。然后我们可以逐步执行或连续运行代码。在这个方法中,我得到0X02。但是对于最终产品,我想使用hex文件。所以我想在刻录到OTP之前通过下载到sysRam来验证它。
如果您需要阿尔卑斯的文件,请发送您的电子邮件id到vivek@technosphere.in或jasim@technosphere.in
嗨,维克,
我测试了下载过程通过使用JTAG接口的智能片段,事实上我没有看到行动第10页和侯别针(我想这是你所看到的)当下载弗兰克-威廉姆斯,但是我也尝试使用UART接口和探索两个别针和弗兰克-威廉姆斯是正常操作,我可以假设这是相关的下载过程而不是.hex文件了,在这两种情况下,.hex文件是相同的,其反映在sysram但出于某种原因,当从JTAG使用智能下载二进制代码片段弗兰克-威廉姆斯不跑,但是我不认为这与弗兰克-威廉姆斯无关,例如,如果你加载二进制文件到flash,以模拟OTP副本,它应该正常工作,并通过UART下载fw。
由于MT_dialog
嗨MT_dialog,
我没有选择在我的硬件tap PORT0引脚(这是用于内置uart引导加载程序)。所以我必须使用Jlink加载二级引导加载程序固件。如果我使用JLink将辅助引导程序的十六进制文件flash到OPT,它会正常工作吗?还是会面临同样的问题?
嗨MT_dialog,
我尝试过使用Jlink将hex文件刻录到OTP中。我遵循了WI_Dialog在文章中的指示https://support.dialog-semiconductor.com/program-da14580-otp-memory和用户手册“UM-B-083”。但我收到了一条错误消息“在JTAG地址0x81FEC(MSB优先):FF FF FE处的AddDictional错误信息”,并在失败之前写入了2个字节,从而破坏了OTP。
请查收附件中的图片。
嗨,维克,
正如我在上一篇文章中提到的,我怀疑无法使用智能代码段从sysram直接下载并运行secondary_引导加载程序的原因是智能代码段本身,因为我可以使用SEGGER commander下载.bin并下载并运行二进制文件。所以,不,我不认为如果你在OTP中烧掉辅助引导程序会有这个问题,我还使用flash(在flash中绑定辅助引导加载程序)和二进制运行测试了这个问题。
关于检察官办公室的问题。这很可能是由于OTP编程供应引起的问题。所以请检查一下。
由于MT_dialog
嗨MT_dialog,
谢谢你的建议。我已经成功地将程序烧录到OTP中(问题是OTP供应6.8)。次级引导加载程序现在工作正常。我能够看到0x02,我能够加载应用程序到系统ram使用智能片段工具。
但是,每当我通过主机控制器加载应用程序固件时,它都不工作。我在发送报头(SOH和长度)时得到正确的ACK,并且在固件数据包的末尾得到CRC。由于CRC匹配,我向BLE模块发送ACK。但在那之后,我不断地得到“0x02”。
似乎BLE模块正在重新启动,来自OTP的数据覆盖了我的应用程序代码。
我必须设置一些东西在OTP头来避免这个?或者在辅助引导加载程序固件中有什么遗漏吗?
注意:-
根据阿尔卑斯参考手册,我在OTP头部做了以下更改。
应用flag1:是的・应用flag2:是的・校准标志:[4]= 1。晶体16兆赫削减值:320・DMA长度:1 fc0
嗨,维克,
顺序是这样的,设备将从OTP引导,并从OTP加载自定义引导加载程序,设备将运行引导加载程序并开始检查您的自定义端口。一旦设备发现某些内容,它将开始将fw从UART复制到系统RAM,然后当设备成功完成下载序列时,它将分支到新下载的fw。辅助引导加载程序的fw运行到ret ram中,而不是在系统ram中,因此我认为OTP不会重写下载到系统ram中的fw。也许下载的fw会运行,并在某个时候导致设备复位?OTP中没有要刻录的其他配置。
由于MT_dialog
嗨MT_Dialog,
当设备成功完成下载顺序时,它将分支到新下载的fw。
>>我认为这种分支没有正常发生。从ble模块获取CRC后,我正在发送ACK(0X06)。我希望引导加载程序代码在从主机控制器获得ACK后,必须处理到新下载固件的分支。
“下载的fw可能会运行,并在某个时候导致设备重置?”
> >没有。我已经尝试了我的应用程序代码和SDK中的示例代码(SDK 5.0.4\DA1458x_SDK\5.0.4\projects\host_apps\da1458x\proximity\reporter)。我已经发送了固件包含在“prox_reporter_ext.h”文件在上述项目。在这两种情况下,它都失败了。它要么被重置,要么程序跳到错误的地址,一旦程序计数器达到最大值,就从重置地址开始执行。
“在OTP中不需要燃烧额外的配置。”
>>能否验证一下我对OTP头的改动?应用程序(应用程序flag1:是的・flag2:是的・校准标志:[4]= 1。晶体16兆赫削减值:320・DMA长度:1 fc0)
嗨,维克,
您是否测试过这一点,以检查这是否是在所有情况下都会发生的,而不仅仅是在引导加载程序烧录到OTP时?例如,您是否尝试通过keil下载fw(以便辅助引导加载程序运行),并且在辅助引导程序运行时使用Smart Snippets引导工具下载fw?我已经尝试了上面的方法,我能够通过UART从引脚P10和P11引导,并在成功上传映像时准确地检查辅助引导程序分支的位置。
我看不出您烧入OTP的值有任何错误,为了从OTP启动,两个标志都应该设置为“是”,关于XTAL 16MHz微调值,这取决于您的晶体,DMA长度不是必需的,但我认为这不会给您带来任何问题。
关于分支,辅助引导加载程序在设备成功下载fw后,将转到sw_reset()中的Start_run_user_application()。引导程序将从新下载fw的向量表中向SP寄存器分配堆栈值,然后分支到下载fw的reset_处理程序。
由于MT_dialog
嗨MT_dialog,
谢谢你的支持。它现在工作得很好。问题是读取固件阵列的方式。我已经从“SDK 5.0.4\DA1458x_SDK\5.0.4\projects\host_apps\da1458x\proximity\reporter\src”中获取了示例代码spi_booter.c,并将其转换为uart接口。在转换过程中,我犯了一个错误,读取了错误的地址。