我有一个类似的问题,使用SmartSnippet将.hex文件下载到SPI Flash,基本板上。 The following is stated in the html Help chapter, but I am not clear what the meaning is for "Special firmware is downloaded". I get the similar Timeout message.
----------从用户指南“SPI Flash Programmer”:
The user can select a .hex or binary image file in order to burn it to the SPI Flash Memory. The following actions are available:
Connect: Special firmware is downloaded to the chip to allow the user interact with the SPI Flash memory. This is a mandatory step before enabling the other actions. Please note that this firmware is different from the firmware downloaded when pressing the ‘Connect’ button on the OTP Image tab. If a ‘CRC does not match’ shows up, please press the ‘Connect’ button again and then the hardware reset button on the board to restart the download process.
On my PCB I am using P0-0 and P0_1 to connect to the FTDI chip, I make those the selections in SmartSnippets, along with P0_7 to control VPP (I have also jumpered VPP from the Motherboard to my PCB).
将范围放在RST引脚(也跳到我的PCB)上,我可以看到PIN基于原理图,只要应该像它一样进入3V。
我也尝试using the P0_4 & P0_5 motherboard pins and run them to my P0_0 & P0_1 pins, just to see if that made a difference. I have tried opening SmartSnippets using just UART and in UART/SPI mode, I even tried JTAG mode.
Something else, I tried disconnecting my PCB completely, then running SmartSnippets. The error is exactly the same, even though no BLE board is connected. This leads me to believe that I don't have something on my PCB connected properly, but if so, why can I run my PCB in debug mode without any issues? Don't they use the same connections for both Debug and OTP programming? (with the addition of the VPP jumper for burning OTP).
Complete list of connections (10) that I currently have: Motherboard <-> My PCB (pins on DA14580) -------------------------------------------- P0_4 (TX) <-> P0.0 (ALT_UART_TX) P0_5 (RX) <-> P0_1 (ALT_UART_RX) P0_2(CTS)< - > P0_2(CTS) P0_3(RTS) <-> P0_3(RTS) vcc_ext < - > vbat GND < - > GND VPP <-> VPP SWDIO <-> SWDIO SWCLK < - > SWCLK RST <-> RST
你看到我错过了吗?
Complete Log Message: [INFO @15-09-23 12:46:00] Header records have been removed from hex file sps_device.hex. [INFO @15-09-23 12:46:00] Read 14212 bytes from file sps_device.hex. [INFO @15-09-23 12:46:10] Firmware File C:\Users\Klim\SmartSnippets\resources\programmer_ES5.bin has been selected for downloading. [INFO @15-09-23 12:46:10] Connection to COM31 port has successfully opened. [info @ 15-09-23 12:46:10]开始下载程序... [动作@ 15-09-23 12:46:11]请按电路板上的硬件重置按钮开始下载过程。 [ERROR @15-09-23 12:46:26] Timeout: Reset signal not detected for more than 16000 msecs. [INFO @15-09-23 12:46:26] Successfully disconnected from port COM31. [INFO @15-09-23 12:46:26] Failed downloading firmware file to the board.
感谢您的任何输入,--- klim *NOTE-- for some reason, the forum post replaces the string "P0_underscore_0" with the string "****". So I had to edit it to "P0-0" so it would display. Interesting.
A Dialog representative in your region has contacted you offline for troubleshooting. There are no obvious steps that you have missed as far as I can see from your description.
Thanks for your reply, I realized that I could test things a little easier from SmartSnippets by reverting my code to debug (from OTP) then just using the file download feature in the Booter utility.
I am getting the same results, my PCB will not allow the download, removing my PCB from the motherboard gives the same error message.
But one step closer to getting it figured out, if I now connect the BLE daughter card to the motherboard (my PCB still disconnected) then I am able to successfully download the hex file to the daughter card.
I will post here when I find a solution, thanks for your help, --klim
First off, thanks to Dialog for the great support! Mikael at Dialog called me and helped me debug my setup, this was extremely helpful. In particular, having a chance to ask a few key questions about the development environment really helped me to understand what *should* be happening. The nature of the Dialog app notes is that they assume everything will proceed according to instructions. So when things go awry, I am often left scratching my head. But maybe that's just me. Anyway, here is a brief description of what I had previously done, combined with what I learned during the phone call, hopefully I get it right in the retell:
2. It's possible (and easiest) to program the OTP using just the JTAG connection through SmartSnippets. This means that a bunch pf the connections that I had jumpered were not necessary, specifically the UART lines P0_4 (TX), P0_5 (RX), P0_2(CTS), and P0_3(RTS). So I disconnected those. Now when you start up SmartSnippets, you should be presented with an 'Open Project/Create Project' screen. If you have not previously tried to use SmartSnippets with your project, then you will need to click "New" and give the project a name, don't worry much about the name you give the project here, all we really care about is that you select the "JTAG" radio button, at which point you should see your JLINK's serial number in the center box. Place a check mark in the JLINK serial number box, select you chip type (mine is the DA14580-01) then hit "Open".
3. Select the OTP icon in the left panel (mouse over them to see what they are) then once there, select teh OTP Image tab and browse to your .hex file (should be in a folder named 'out' in your project). Click the "Connect" button, then, if you are really feeling brave, click "Burn". You should see in the log window that the file gets downloaded, and burning begins (sadly, my project still has problems, which I will describe below).
4. On the OTP Header Tab (if the Tab is not showing, click again on the "OTP Programmer" button in the left panel) first click on "Connect" then click on "Read from Memory". This will read from your chip some values (like XTAL calibration trim) that were already set at the factory. At the top of the window there are two Application Flag parameters, they need to be changed to "Yes". There are a bunch of other values, I was told that I didn't need to change any of them, so I didn't. Part of this is because my DA14580 chip is actually already 'repackaged' by Murata (as I described in an earlier post above) and they have done the work of including an external 16MHz xtal among other things. So my situation might not apply to you, please realize this. So now all you need to do is click "Burn" and you should be done.
Here is the log that was generated when I hit 'Connect' then 'Burn'.
[信息@ 15-09-25 12:17:17]无法衡量总IR LEN。TDO是恒定的。 [信息@ 15-09-25 12:17:17]无法衡量总IR LEN。TDO是恒定的。 (信息@15-09-25 12:17:17] Found SWD-DP with ID 0x0BB11477 (信息@15-09-25 12:17:17] Found Cortex-M0 r0p0, Little endian. (信息@15-09-25 12:17:17] FPUnit: 4 code (BP) slots and 0 literal slots (信息@15-09-25 12:17:17] BTLE device selected. (信息@15-09-25 12:17:30] Header records have been removed from hex file sps_device.hex. (信息@15-09-25 12:17:30] Read 14276 bytes from file sps_device.hex. [info @ 15-09-25 12:18:05]固件文件c:\ users \ klim \ smartsnippets \资源\ jtag_programmer.bin已被选中以下载。 (信息@15-09-25 12:18:05] Cortex-M: Debugger tries to set PC to odd value. Corrected register value from 0x000800B5 to 0x000800B4 (信息@15-09-25 12:18:05] Successfully downloaded firmware file to the board. (信息@15-09-25 12:19:18] Started burning memory with 14276 bytes of data at address 0x40000. [ERROR @15-09-25 12:19:18] Adddittional error info at address 0x81FEC (MSB first): FF FF FF FE [ERROR @15-09-25 12:19:19] Memory burning failed.
Any suggestions that you have for how to test the system further would be greatly appreciated.
The most possible reason for this error is probably the OTP programming supply. Can you please check the supply on the VPP and make sure that a 6.8 volts are applied.
在SmartSnippet中,“板设置”选项卡具有选择“GPIO引脚,可控制晶体管启用高电压......”默认为P0_7。显然,如果没有正确设置,那么我们将无法获得刻录OTP所需的6.8V。---但---- I /我们已经知道这一点,我已经在Murata PCB原理图中验证,P0_7确实控制了6.8V晶体管。
The fatal mistake that I made was then assuming that the P0_7 on the Murata Motherboard was being controlled by SmartSnippets. I was viewing the control flow as starting at SmartSnippets, passing to the FTDI chip on Murata Motherboard, then carrying to the DA14580 on my PCB. Not the case where the OTP burn is concerned.
Turns out, during OTP burn, the P0_7 pin on the Murata motherboard is actually controlled by the P0_7 pin *FROM THE DA14580 ON MY PCB*. So the solution was quite simple, I ran a jumper from the P0_7 pin on my PCB to the P0_7 pin on the Murata Motherboard, and, boom-- I was able to flash the OTP and successfully boot from it.
So my device now functions standalone, and does what its supposed to do. A very exciting milestone, I hope my notes on my struggles will help some other developers get to this point too.
Hello JJW, Which development board are you using : is it the motherboard/daugtherboard or the new BASIC development all in one kit ?
BR JE_Dialog
Hello,
我有一个类似的问题,使用SmartSnippet将.hex文件下载到SPI Flash,基本板上。
The following is stated in the html Help chapter, but I am not clear what the meaning is for "Special firmware is downloaded".
I get the similar Timeout message.
----------从用户指南“SPI Flash Programmer”:
The user can select a .hex or binary image file in order to burn it to the SPI Flash Memory. The following actions are available:
Connect: Special firmware is downloaded to the chip to allow the user interact with the SPI Flash memory. This is a mandatory step before enabling the other actions. Please note that this firmware is different from the firmware downloaded when pressing the ‘Connect’ button on the OTP Image tab. If a ‘CRC does not match’ shows up, please press the ‘Connect’ button again and then the hardware reset button on the board to restart the download process.
Tap.
Hi JE_Dialog/JJW,
I am trying to burn the OTP on my custom PCB so that I can test it as a standalone device.
当我尝试从SmartSnippet刻录OTP时
我正在使用Murata P2ML3078主板(带我的自定义PCB)。
我的自定义PCB仔细阅读主板上的PIN标题,我认为我基于我可以从Keil IDE连接和下载/运行调试模式下载/运行我的固件的事实,我认为我所有所需的连接。
On my PCB I am using P0-0 and P0_1 to connect to the FTDI chip, I make those the selections in SmartSnippets, along with P0_7 to control VPP (I have also jumpered VPP from the Motherboard to my PCB).
将范围放在RST引脚(也跳到我的PCB)上,我可以看到PIN基于原理图,只要应该像它一样进入3V。
我也尝试using the P0_4 & P0_5 motherboard pins and run them to my P0_0 & P0_1 pins, just to see if that made a difference. I have tried opening SmartSnippets using just UART and in UART/SPI mode, I even tried JTAG mode.
Something else, I tried disconnecting my PCB completely, then running SmartSnippets. The error is exactly the same, even though no BLE board is connected. This leads me to believe that I don't have something on my PCB connected properly, but if so, why can I run my PCB in debug mode without any issues? Don't they use the same connections for both Debug and OTP programming? (with the addition of the VPP jumper for burning OTP).
Complete list of connections (10) that I currently have:
Motherboard <-> My PCB (pins on DA14580)
--------------------------------------------
P0_4 (TX) <-> P0.0 (ALT_UART_TX)
P0_5 (RX) <-> P0_1 (ALT_UART_RX)
P0_2(CTS)< - > P0_2(CTS)
P0_3(RTS) <-> P0_3(RTS)
vcc_ext < - > vbat
GND < - > GND
VPP <-> VPP
SWDIO <-> SWDIO
SWCLK < - > SWCLK
RST <-> RST
你看到我错过了吗?
Complete Log Message:
[INFO @15-09-23 12:46:00] Header records have been removed from hex file sps_device.hex.
[INFO @15-09-23 12:46:00] Read 14212 bytes from file sps_device.hex.
[INFO @15-09-23 12:46:10] Firmware File C:\Users\Klim\SmartSnippets\resources\programmer_ES5.bin has been selected for downloading.
[INFO @15-09-23 12:46:10] Connection to COM31 port has successfully opened.
[info @ 15-09-23 12:46:10]开始下载程序...
[动作@ 15-09-23 12:46:11]请按电路板上的硬件重置按钮开始下载过程。
[ERROR @15-09-23 12:46:26] Timeout: Reset signal not detected for more than 16000 msecs.
[INFO @15-09-23 12:46:26] Successfully disconnected from port COM31.
[INFO @15-09-23 12:46:26] Failed downloading firmware file to the board.
感谢您的任何输入,--- klim
*NOTE-- for some reason, the forum post replaces the string "P0_underscore_0" with the string "****". So I had to edit it to "P0-0" so it would display. Interesting.
Hi,
A Dialog representative in your region has contacted you offline for troubleshooting. There are no obvious steps that you have missed as far as I can see from your description.
嗨mhv_dialog,
Thanks for your reply, I realized that I could test things a little easier from SmartSnippets by reverting my code to debug (from OTP) then just using the file download feature in the Booter utility.
I am getting the same results, my PCB will not allow the download, removing my PCB from the motherboard gives the same error message.
But one step closer to getting it figured out, if I now connect the BLE daughter card to the motherboard (my PCB still disconnected) then I am able to successfully download the hex file to the daughter card.
I will post here when I find a solution, thanks for your help, --klim
嗨mhv_dialog,
First off, thanks to Dialog for the great support! Mikael at Dialog called me and helped me debug my setup, this was extremely helpful. In particular, having a chance to ask a few key questions about the development environment really helped me to understand what *should* be happening. The nature of the Dialog app notes is that they assume everything will proceed according to instructions. So when things go awry, I am often left scratching my head. But maybe that's just me. Anyway, here is a brief description of what I had previously done, combined with what I learned during the phone call, hopefully I get it right in the retell:
1.以前,您应该使用Keil IDE为项目构建.hex文件。我们在SmartSnippets的所有人都将指向.hex文件并将其加载到我们的BLE芯片中。但是,您应该知道,在您可以将您的.hex文件刻录到OTP之前,您需要在项目目录的根目录中更改DA14580_CONFIG文件中的某些设置。有几个定义指令,名称表明您想要更改它,但事实证明,至少需要更改的唯一需要更改的是需要的行“#define development_debug 1”更改为0.其他可以留下的其他部分:“#undef app_boot_from_otp”和“#undef read_nvds_struct_from_otp”。在进行这些更改后,请务必清理/重建项目。
2. It's possible (and easiest) to program the OTP using just the JTAG connection through SmartSnippets. This means that a bunch pf the connections that I had jumpered were not necessary, specifically the UART lines P0_4 (TX), P0_5 (RX), P0_2(CTS), and P0_3(RTS). So I disconnected those. Now when you start up SmartSnippets, you should be presented with an 'Open Project/Create Project' screen. If you have not previously tried to use SmartSnippets with your project, then you will need to click "New" and give the project a name, don't worry much about the name you give the project here, all we really care about is that you select the "JTAG" radio button, at which point you should see your JLINK's serial number in the center box. Place a check mark in the JLINK serial number box, select you chip type (mine is the DA14580-01) then hit "Open".
3. Select the OTP icon in the left panel (mouse over them to see what they are) then once there, select teh OTP Image tab and browse to your .hex file (should be in a folder named 'out' in your project). Click the "Connect" button, then, if you are really feeling brave, click "Burn". You should see in the log window that the file gets downloaded, and burning begins (sadly, my project still has problems, which I will describe below).
4. On the OTP Header Tab (if the Tab is not showing, click again on the "OTP Programmer" button in the left panel) first click on "Connect" then click on "Read from Memory". This will read from your chip some values (like XTAL calibration trim) that were already set at the factory. At the top of the window there are two Application Flag parameters, they need to be changed to "Yes". There are a bunch of other values, I was told that I didn't need to change any of them, so I didn't. Part of this is because my DA14580 chip is actually already 'repackaged' by Murata (as I described in an earlier post above) and they have done the work of including an external 16MHz xtal among other things. So my situation might not apply to you, please realize this. So now all you need to do is click "Burn" and you should be done.
现在让我继续我悲伤的故事,因为在跟随上述内容之后,我仍然无法编程我的芯片。唐。
不幸的是,某些东西没有正确,但不是一种灾难性的方式。对于主要的十六进制文件的OTP刻录变得准备好了,然后它宣布了一个错误(其中一些非常糟糕的拼写),只是停止。幸运的是,我在VPP线上有一个探针,看看它是否提升了电压,即从未发生过电压,所以我仍然能够在调试模式下使用芯片,因为我在此之前完成。不确定这是问题,我们没有将6.8V获得6.8V到我的PCB,或者如果刻录失败,则在该部分之前失败。
Here is the log that was generated when I hit 'Connect' then 'Burn'.
[信息@ 15-09-25 12:17:17]无法衡量总IR LEN。TDO是恒定的。
[信息@ 15-09-25 12:17:17]无法衡量总IR LEN。TDO是恒定的。
(信息@15-09-25 12:17:17] Found SWD-DP with ID 0x0BB11477
(信息@15-09-25 12:17:17] Found Cortex-M0 r0p0, Little endian.
(信息@15-09-25 12:17:17] FPUnit: 4 code (BP) slots and 0 literal slots
(信息@15-09-25 12:17:17] BTLE device selected.
(信息@15-09-25 12:17:30] Header records have been removed from hex file sps_device.hex.
(信息@15-09-25 12:17:30] Read 14276 bytes from file sps_device.hex.
[info @ 15-09-25 12:18:05]固件文件c:\ users \ klim \ smartsnippets \资源\ jtag_programmer.bin已被选中以下载。
(信息@15-09-25 12:18:05] Cortex-M: Debugger tries to set PC to odd value. Corrected register value from 0x000800B5 to 0x000800B4
(信息@15-09-25 12:18:05] Successfully downloaded firmware file to the board.
(信息@15-09-25 12:19:18] Started burning memory with 14276 bytes of data at address 0x40000.
[ERROR @15-09-25 12:19:18] Adddittional error info at address 0x81FEC (MSB first): FF FF FF FE
[ERROR @15-09-25 12:19:19] Memory burning failed.
Any suggestions that you have for how to test the system further would be greatly appreciated.
谢谢,克林
Hi klim,
The most possible reason for this error is probably the OTP programming supply. Can you please check the supply on the VPP and make sure that a 6.8 volts are applied.
Thanks MT_dialog
嗨mt_dialog,
好的,我有解决问题的解决方案上面描述的问题,可能这是罪魁祸首一直与原始的“重置按钮不工作”。在对话中再次感谢Mikael,以帮助我弄清楚问题。
在SmartSnippet中,“板设置”选项卡具有选择“GPIO引脚,可控制晶体管启用高电压......”默认为P0_7。显然,如果没有正确设置,那么我们将无法获得刻录OTP所需的6.8V。---但---- I /我们已经知道这一点,我已经在Murata PCB原理图中验证,P0_7确实控制了6.8V晶体管。
The fatal mistake that I made was then assuming that the P0_7 on the Murata Motherboard was being controlled by SmartSnippets. I was viewing the control flow as starting at SmartSnippets, passing to the FTDI chip on Murata Motherboard, then carrying to the DA14580 on my PCB. Not the case where the OTP burn is concerned.
Turns out, during OTP burn, the P0_7 pin on the Murata motherboard is actually controlled by the P0_7 pin *FROM THE DA14580 ON MY PCB*. So the solution was quite simple, I ran a jumper from the P0_7 pin on my PCB to the P0_7 pin on the Murata Motherboard, and, boom-- I was able to flash the OTP and successfully boot from it.
So my device now functions standalone, and does what its supposed to do. A very exciting milestone, I hope my notes on my struggles will help some other developers get to this point too.
干杯,klim