nrf-hal icon indicating copy to clipboard operation
nrf-hal copied to clipboard

I2C not working on P0_09 and P0_10

Open arnobert opened this issue 2 years ago • 1 comments

Found that using those two pins for I2C lead to an infinite loop in twim / fn wait(). Both pins do not toggle and stay high, on nRF52840 dongle.

Is this related to their secondary function (NFC antenna)? Or have I overlooked something? Thanks!

arnobert avatar Feb 15 '23 16:02 arnobert

Yep, you have to "unlock" the pins for normal IO functionality. You may try the code below :)

/// "Unprotect" NFC pins and enable as GPIO pins (stored in FLASH, needs reset after change)
/// Returns `true` if setting was changed

pub fn nfc_pins_as_gpio(periphs: &pac::Peripherals) -> bool {
    if periphs.UICR.nfcpins.read().protect().bit_is_set() {
        let nvmc = &periphs.NVMC;
        assert!(!nvmc.config.read().wen().is_een()); // write + erase is forbidden!

        nvmc.config.write(|w| w.wen().wen());
        unsafe { periphs.UICR.nfcpins.write(|w| w.bits(0)) };
        nvmc.config.reset();

        true
    } else {
        false
    }
}

eflukx avatar Jul 21 '23 14:07 eflukx