Hello,
My previous question is this.
I try to implement sample application with Radio Driver 1.1.0 to SDK15.0.0 ble peripheral uart example.
Symptom
For few micro seconds, nrf_802154_transmit works.
But after this, nrf_802154_transmit always returns failure.
Enviroments
Keil / Windows10 / SDK15.0.0 / Radio Driver 1.1.0 / nRF52840-Preview-DK / s140_nrf52_6.0.0_softdevice.hex
Source Define
preprocessor -
DEBUG_LOG ENABLE_DEBUG_LOG=1 RAAL_SOFTDEVICE=1 NRF52840_AAAA=1 BOARD_PCA10056 CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD NRF52840_XXAA NRF_SD_BLE_API_VERSION=6 S140 SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=8192 __STACK_SIZE=8192
nrf_802154_config.h -
NRF_802154_USE_RAW_API 0
Import Files
I follow this link.
SoftDevice
- nrf_802154_notification_swi.c
- nrf_802154_priority_drop_swi.c
- nrf_802154_request_swi.c
- nrf_802154_swi.c
- nrf_802154_swi.h
- raal/softdevice/nrf_raal_softdevice.c
- raal/softdevice/nrf_raal_softdevice.h
Clock
- platform/clock/nrf_802154_clock_nodrv.c - uses the CLOCK peripheral directly <- using
Temperature
- platform/temperature/nrf_802154_temperature_none.c - reports dummy temperature 20° C, does not allow to use temperature RSSI correction by the driver <- using
Timer
- platform/timer/nrf_802154_timer_nodrv.c - uses an RTC peripheral as clock source for the timer module <- using
Source
int main(void) { bool erase_bonds; // Initialize. uart_init(); log_init(); timers_init(); buttons_leds_init(&erase_bonds); power_management_init(); ble_stack_init(); gap_params_init(); gatt_init(); services_init(); advertising_init(); conn_params_init(); advertising_start(); printf("\r\advertising_start.\r\n"); NRF_LOG_INFO("Debug logging for UART over RTT started."); uint8_t message[MAX_MESSAGE_SIZE + 1]; memset(message, 0, sizeof(message)); for (uint32_t i = 0; i < sizeof(message) / sizeof(message[0]); i++) { message[i] = i; } message[0] = 0x41; // Set MAC header: short addresses, no ACK message[1] = 0x98; // Set MAC header message[5] = 0xff; message[6] = 0xff; m_tx_in_progress = false; m_tx_done = false; nrf_802154_init(); uint8_t short_addr[] = {0x12, 0x34}; nrf_802154_short_address_set(short_addr); uint8_t pan_id[] = {0x11, 0x22}; nrf_802154_pan_id_set(pan_id); nrf_802154_channel_set(CHANNEL); nrf_802154_receive(); printf("\r\n802154 init.\r\n"); m_tx_start = true; while (1) { if (m_tx_done) { m_tx_in_progress = false; m_tx_done = false; printf("TX DONE !! \r\n"); } if (!m_tx_in_progress) { m_tx_in_progress = nrf_802154_transmit(message, MAX_MESSAGE_SIZE, false); } } } void nrf_802154_transmitted(const uint8_t * p_frame, uint8_t * p_ack, uint8_t length, int8_t power, uint8_t lqi) { (void) power; (void) lqi; test = 0; m_tx_done = true; if (p_ack != NULL) { printf("ack len : %d \r\n", length); //printf("p_ack is not null, length : %d \r\n", length); nrf_802154_buffer_free(p_ack); } if (p_frame != NULL) { printf("p_frame is not null \r\n"); } //init_802154 = false; } void nrf_802154_transmit_failed(const uint8_t * p_frame, nrf_802154_tx_error_t error) { (void)p_frame; (void)error; test = 0; m_tx_done = true; printf("FAIL \r\n"); }