nrf-hal
nrf-hal copied to clipboard
I2C not working on P0_09 and P0_10
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!
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
}
}