Cannot program PCB - The write access failed, but no cause could be determined.

Hi there,

I am currently trying to program a custom PCB equipped with the BMD-380 that has the nrf52480 inside. Sadly, I am now stuck for days with the same issue: It simply will not write anything to memory.

For creating my board definition files I mostly relied on the existing files for the BMD-380. As we will only use some specific parts the .dts is only a reduced version of the one from from the BMD-380:

/dts-v1/;
#include <nordic/nrf52840_qiaa.dtsi>
#include <nordic/nrf52840_partition.dtsi>
#include "sensor_station_nrf52840-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
    model = "Custom u-blox BMD-380";
    compatible = "u-blox,sensor_station_nrf52840";

    chosen {
        zephyr,console = &uart0;
        zephyr,shell-uart = &uart0;
        zephyr,uart-mcumgr = &uart0;
        zephyr,sram = &sram0;
        zephyr,flash = &flash0;
    };

    leds {
        compatible = "gpio-leds";

        led_r: red_led {
            gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
            label = "LED_R";
        };
    };

    buttons {
        compatible = "gpio-keys";

        sw0: sw_0 {
            gpios = <&gpio1 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
            label = "SW0";
            zephyr,code = <INPUT_KEY_0>;
        };
        // 3 more buttons
    };

    pwmleds {
        compatible = "pwm-leds";

        pwm_ec: ec_pwm {
            pwms = <&pwm0 0 PWM_USEC(100) PWM_POLARITY_NORMAL>;
            label = "EC_PROBE_PWM_OUT";
        };
    };

    adc_channels {
        compatible = "adc-io-channels";

        vbat_channel: vbat_ch {
            io-channels = <&adc 0>;                // AIN0 = P0.02
            label = "VBAT_MEAS";
        };
        // 3 more channels
    };

    aliases {
        led0 = &led_r;
        pwm-led0 = &pwm_ec;
        sw0 = &sw0;
        watchdog0 = &wdt0;
        adc-vbat = &vbat_channel;
        // additional labels
    };
};

&reg1 {
	regulator-initial-mode = <NRF5X_REG_MODE_DCDC>;
};

&adc {
    status = "okay";
};

&gpio0 {
    status = "okay";
};

&gpio1 {
    status = "okay";
};

&gpiote {
	status = "okay";
};

&uicr {
    gpio-as-nreset;
};

&uart0 {
    compatible = "nordic,nrf-uarte";
    status = "okay";
    current-speed = <115200>;
    pinctrl-0 = <&uart0_default>;
    pinctrl-1 = <&uart0_sleep>;
    pinctrl-names = "default", "sleep";
};

&pwm0 {
    status = "okay";
    pinctrl-0 = <&pwm0_default>;
    pinctrl-1 = <&pwm0_sleep>;
    pinctrl-names = "default", "sleep";
};

&clock {
	status = "okay";
};

The other files are pretty much kept as they are apart from changing the pins in the pinctrl.dtsi

The next step was to have a simple blinky (or even empty) application and try to flash it to the chip with a J-Tag connection. The VSCode extension detects the debugger and the chip. Nevertheless running
$ nrfjprog --program /home/thomas/Documents/vac/test/blinky/build/merged.hex --recover --verify -f NRF52 --snr 801045345
will return the following:

[ #################### ]   0.646s | Erase file - Done erasing                                                          
[error] [ Client] - Encountered error -102: Command program_file executed for 422 milliseconds with result -102        
[error] [  nRF52] - The write access failed, but no cause could be determined.
[error] [  nRF52] - It may be due to an unaligned access, accessing a nonexistent memory, or a communication issue.
[error] [  nRF52] - Failed while performing 'Write' operation on target address 0x00000000.
-102: An unknown error.
[error] [  nRF52] - Failed while reading device information.
[error] [ Worker] - An unknown error.
ERROR: JLinkARM DLL reported an error. Try again. If error condition
ERROR: persists, run the same command again with argument --log, contact Nordic
ERROR: Semiconductor and provide the generated log.log file to them.
NOTE: For additional output, try running again with logging enabled (--log).
NOTE: Any generated log error messages will be displayed.

I also made the sure APPROTECT is not active by running $ nrfjprog --recover --family NRF52.
I also read the status with $ nrfjprog --readregs --snr 801045345 which returns 0xFFFFFFFF.
Here is the logfile after trying to program:
721252.log.log

Sadly, I am out of ideas what to try or where the error might be. Does someone had a similar issue and might want to share the experience with it?

Thank you very much in advance.

Best Regards
Thomas

Parents
  • Hello,

    I get the impression the programming or recovering might have worked one time. 

    I am suspecting that the reset pin might be pulled low (internally or externally), this cause the chip to be in reset state. Can you try to force the pin high (e.g. connect it to VDD)?

    If that is not the case, try to run: "nrfjprog --version" just so I can take a look. Also, which pins have you connected between the nRF52840 and the SEGGER j-link in this case? How is the nRF52840 powered here? What SEGGER j-link do you have? 

    Kenneth

  • Thank you Kenneth for you reply. You were right! The reset pin was indeed active due to a faulty circuit. Thank you for you time!

Reply Children
No Data
Related