Hello, I am currently working on a nr52840 s140 Sdk 15.0 card and I want to recover data from a component running on the i²c bus. (I have not yet installed the component on the card).
The problem is that I get a fatal errror from uart_config(void).
Here is my code:
#include <stdio.h> #include "boards.h" #include "app_util_platform.h" #include "app_uart.h" #include "app_error.h" #include "nrf_drv_twi.h" #include "nrf_delay.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h" /*UART buffer size. */ #define UART_TX_BUF_SIZE 256 #define UART_RX_BUF_SIZE 1 #warning "!**** ARE YOU ABSOLUTELY SURE YOU HAVE CHOSEN THE CORRECT SCL AND SDA PINS? ****!" #define DEVICE_SCL_PIN 3 #define DEVICE_SDA_PIN 4 nrf_drv_twi_t twi_instance = NRF_DRV_TWI_INSTANCE(0); uint8_t device_address = 0; // Address used to temporarily store the current address being checked bool device_found = false; /** * @brief UART events handler. */ static void uart_events_handler(app_uart_evt_t * p_event) { switch (p_event->evt_type) { case APP_UART_COMMUNICATION_ERROR: APP_ERROR_HANDLER(p_event->data.error_communication); break; case APP_UART_FIFO_ERROR: APP_ERROR_HANDLER(p_event->data.error_code); break; default: break; } } /** * @brief UART initialization. */ static void uart_config(void) { uint32_t err_code; const app_uart_comm_params_t comm_params = { RX_PIN_NUMBER, TX_PIN_NUMBER, RTS_PIN_NUMBER, CTS_PIN_NUMBER, APP_UART_FLOW_CONTROL_DISABLED, false, UART_BAUDRATE_BAUDRATE_Baud115200 }; APP_UART_FIFO_INIT(&comm_params,UART_RX_BUF_SIZE,UART_TX_BUF_SIZE,uart_events_handler,APP_IRQ_PRIORITY_LOW,err_code); APP_ERROR_CHECK(err_code); } /** * @brief TWI events handler. */ void twi_handler(nrf_drv_twi_evt_t const * p_event, void * p_context) { switch(p_event->type) { case NRF_DRV_TWI_EVT_DONE: // If EVT_DONE (event done) is received a device is found and responding on that particular address printf("\r\n!****************************!\r\nDevice found at 7-bit address: %#x!\r\n!****************************!\r\n\r\n", device_address); device_found = true; break; case NRF_DRV_TWI_EVT_ADDRESS_NACK: printf("No address ACK on address: %#x!\r\n", device_address); break; case NRF_DRV_TWI_EVT_DATA_NACK: printf("No data ACK on address: %#x!\r\n", device_address); break; default: break; } } /** * @brief UART initialization. */ void twi_init (void) { ret_code_t err_code; const nrf_drv_twi_config_t twi_config = { .scl = DEVICE_SCL_PIN, .sda = DEVICE_SDA_PIN, .frequency = NRF_TWI_FREQ_100K, .interrupt_priority = APP_IRQ_PRIORITY_HIGH }; err_code = nrf_drv_twi_init(&twi_instance, &twi_config, twi_handler, NULL); APP_ERROR_CHECK(err_code); nrf_drv_twi_enable(&twi_instance); } /**@brief Function for initializing the nrf log module. */ static void log_init(void) { ret_code_t err_code = NRF_LOG_INIT(NULL); APP_ERROR_CHECK(err_code); NRF_LOG_DEFAULT_BACKENDS_INIT(); } /** * @brief Function for main application entry. */ int main(void) { log_init(); NRF_LOG_INFO(" 1"); nrf_gpio_cfg_output(LED_1); NRF_LOG_INFO(" 2"); nrf_gpio_pin_set(LED_1); NRF_LOG_INFO("3"); twi_init(); NRF_LOG_INFO("4"); uart_config(); NRF_LOG_INFO("\033[2J\033[;H\r\n* Example to find TWI devices connected to \r\n* the TWI bus and their addresses\r\n\r\n"); uint8_t dummy_data = 0x55; // Itterate through all possible 7-bit TWI addresses for(uint8_t i = 0; i <= 0x7F; i++) { device_address = i; // Send dummy data. If a device is present on this particular address a TWI EVT_DONE event is // received in the twi event handler and a message is printed to UART nrf_drv_twi_tx(&twi_instance, i, &dummy_data, 1, false); // Delay 10 ms to allow TWI transfer to complete and UART to print messages before starting new transfer nrf_delay_ms(10); } if(device_found) { // Blinke LED_1 rapidly if device is found while(true) { nrf_gpio_pin_toggle(LED_1); nrf_delay_ms(100); } } else { // Disable LED_1 if device is NOT found nrf_gpio_cfg_default(LED_1); printf("*****************\n\rNO DEVICES FOUND!\r\n*****************\n\r"); while(true) { ; } } }
thank's