Hi,
Original UART DFU bootloader SDK example ported from NRF6310 board to PCA10001 board does not work.
What did I do wrong - can anybody please help me ? Thanks in advance.
I copied the original UART DFU bootloader code from C:\Keil_v5\ARM\Device\Nordic\nrf51822\Board\nrf6310\device_firmware_updates\bootloader\arm under C:\Keil_v5\ARM\Device\Nordic\nrf51822\Board\pca10001 and changed it to be suitable for pca10001 - changed pin numbers of Buttons and leds, memory areas etc.
In Keil I changed Target values: IROM1: Start : 0x14000, Size: 0x2B000, IRAM1: Start : 0x20002000, Size: 0x2000.
I used the following UART pins:
tx: pin 9 rx: pin 12 ground: gnd NO cts nor rts pins used !
Then I flashed the bootloader to pca10001 board with Keil and started the Keil debugger.
Then I tried to send blinky_arm.hex file from dos cmd prompt to pca10001 board but there was transmission timeout after about 5 seconds:
C:\Keil_v5\ARM\Device\Nordic\nrf51822\Board\nrf6310\device_firmware_updates\experimental\hci_dfu_send_hex>hci_dfu_send_hex.exe -f blinky_arm.hex -p COM3 Sending file blinky_arm.hex to COM3, flow control = False Progress: 0 Transmission timeout. Ack out of sequence, or no ack returned
In bootloader code bootloader_app_is_valid function the Keil debugger stopped at breakpoint with these values:
DFU_BANK_0_REGION_START: 0x00014000 p_bootloader_settings->bank_0: 0xFF
bool bootloader_app_is_valid(uint32_t app_addr) { const bootloader_settings_t * p_bootloader_settings;
// There exists an application in CODE region 1.
if (DFU_BANK_0_REGION_START == EMPTY_FLASH_MASK)
{
return false;
}
bool success = false;
switch (app_addr)
{
case DFU_BANK_0_REGION_START:
bootloader_util_settings_get(&p_bootloader_settings);
// The application in CODE region 1 is flagged as valid during update.
if (p_bootloader_settings->bank_0 == BANK_VALID_APP)
{
...
There was also BOOTLOADER_TIMEOUT in wait_for_events function:
static void wait_for_events(void) {
for (;;)
{
// Wait in low power state for any events.
uint32_t err_code = sd_app_evt_wait();
APP_ERROR_CHECK(err_code);
// Event received. Process it from the scheduler.
app_sched_execute();
if ((m_update_status == BOOTLOADER_COMPLETE) ||
(m_update_status == BOOTLOADER_TIMEOUT) ||
(m_update_status == BOOTLOADER_RESET))
{
...
Why did not the hci_dfu_send_hex.exe send the blinky_arm.hex file ?
Best Regards, Devtim