Hello,
I found some some threads on similar questions but none answered mine, so here it is:
I try to use UART between nrf52840 and another chip. When the other chip resets the RX line goes low and I get a drive error callback. I have two questions:
1. Is it possible to configure the RX pin as pullup in order to avoid going low when second chip resets
2. How do I recover from this error. None worked so far.
I attached the relevant code (SDK 15.3)
NRF_SERIAL_DRV_UART_CONFIG_DEF(m_uarte0_drv_config, NRF_GPIO_PIN_MAP(0, 24), NRF_GPIO_PIN_MAP(0, 22), RTS_PIN_NUMBER, CTS_PIN_NUMBER, NRF_UART_HWFC_DISABLED, NRF_UART_PARITY_EXCLUDED, NRF_UART_BAUDRATE_38400, UART_DEFAULT_CONFIG_IRQ_PRIORITY); #define SERIAL_FIFO_TX_SIZE 1024 #define SERIAL_FIFO_RX_SIZE 1024 NRF_SERIAL_QUEUES_DEF(serial0_queues, SERIAL_FIFO_TX_SIZE, SERIAL_FIFO_RX_SIZE); #define SERIAL_BUFF_TX_SIZE 1 #define SERIAL_BUFF_RX_SIZE 1 NRF_SERIAL_BUFFERS_DEF(serial0_buffs, SERIAL_BUFF_TX_SIZE, SERIAL_BUFF_RX_SIZE); void My_cdc_acm_user_ev_handler(app_usbd_class_inst_t const *p_inst, nrfx_uarte_event_t event); NRF_SERIAL_CONFIG_DEF(serial0_config, NRF_SERIAL_MODE_DMA, &serial0_queues, &serial0_buffs, My_cdc_acm_user_ev_handler_E10, sleep_handler); NRF_SERIAL_UART_DEF(serial0_uarte, 0); void My_cdc_acm_user_ev_handler(app_usbd_class_inst_t const *p_inst, nrfx_uarte_event_t event) { uint32_t error; ret_code_t ret; switch (event.type) { case NRF_SERIAL_EVENT_DRV_ERR: NRF_LOG_INFO("DRIVE ERROR E10!!!"); if(NRF_UART0->EVENTS_ERROR !=0) { error = NRF_UART0->ERRORSRC; NRF_LOG_INFO("Serial driver err: %d", error); NRF_UART0->EVENTS_ERROR = 0; } nrf_serial_uninit(&serial0_uarte); ret = nrf_serial_init(&serial0_uarte, &m_uarte0_drv_config, &serial0_config); break; } } //somewhere while init: ret = nrf_serial_init(&serial0_uarte, &m_uarte0_drv_config, &serial0_config);