Failed to configure GNSS

Hello,

I have a custom board with an nRF9160 and is running mfw_nrf9160_1.3.5.  The design is ready for production so I thought I will build 10 boards first as a pilot run.  Out of the 10 boards, one is giving me the following error.

W: nrf_modem_gnss_agps_expiry_get() failed, err -13
E: Failed to configure GNSS
I: Location retrieval failed using 'GNSS', trying with 'Cellular' next
%NCELLMEAS: 0,"08452E01","302610","D6DD",80,2325,135,40,15,606912,2325,481,34,2,0,900,310,44,16,24,5255,482,51,18,32

All 9 others work fine.  I tried re-flashing the board a few times, but no luck.  This same error keeps happening.  Does anyone have an idea what is wrong?

Thank you.

  • How about this?

    *** Booting Zephyr OS build v3.2.99-ncs2 ***
    I: AT filter enabled with 2 entries.
    I: UART check failed: 12. Dropping buffer and retrying.
    FOTA version: v1.0.8
    mfw_nrf9160_1.3.5
    OK

    I: 2 Sectors of 4096 bytes
    I: alloc wra: 0, fe8
    I: data wra: 0, 0
    %XSIM: 1
    Connecting to LTE...
    +CEREG: 2,"D6DD","086F8A0C",7
    LTE cell changed: Cell ID: 141527564, Tracking area: 55005
    +CSCON: 1
    Stop timer
    OK
    %XTIME: ,"42013000344569","01"
    +CEREG: 5,"D6DD","086F8A0C",7,,,"11100000","11100000"
    Network registration status: Connected - roaming
    Connected to LTE
    PSM parameter update: TAU: 3600, Active time: -1
    %XTIME: ,"42013000347569","01"
    W: nrf_modem_gnss_agps_expiry_get() failed, err -13
    Next connection retry in 30 seconds
    AWS_IOT_EVT_CONNECTING
    E: Failed to configure GNSS
    I: Location retrieval failed using 'GNSS', trying with 'Cellular' next
    %NCELLMEAS: 0,"086F8A0C","302220","D6DD",528,5145,54,45,10,2691,8627
    AWS_IOT_EVT_CONNECTED
    AWS_IOT_EVT_READY
    AWS_IOT_EVT_PUBACK, ID: 50196
    AWS_IOT_EVT_PUBACK, ID: 21871
    AWS_IOT_EVT_PUBACK, ID: 40499
    +CSCON: 0
    *** Booting Zephyr OS build v3.2.99-ncs2 ***
    I: AT filter enabled with 2 entries.
    I: UART check failed: 12. Dropping buffer and retrying.
    FOTA version: v1.0.8
    mfw_nrf9160_1.3.5
    OK

    I: 2 Sectors of 4096 bytes
    I: alloc wra: 0, fe8
    I: data wra: 0, 0
    %XSIM: 1
    Connecting to LTE...
    +CEREG: 2,"D6DD","086F8A0C",7
    LTE cell changed: Cell ID: 141527564, Tracking area: 55005
    +CSCON: 1
    %XTIME: ,"42013000548469","01"
    +CEREG: 5,"D6DD","086F8A0C",7,,,"11100000","11100000"
    Network registration status: Connected - roaming
    Connected to LTE
    PSM parameter update: TAU: 3600, Active time: -1
    %XTIME: ,"42013000540569","01"
    W: nrf_modem_gnss_agps_expiry_get() failed, err -13
    Next connection retry in 30 seconds
    AWS_IOT_EVT_CONNECTING
    E: Failed to configure GNSS
    I: Location retrieval failed using 'GNSS', trying with 'Cellular' next
    %NCELLMEAS: 0,"086F8A0C","302220","D6DD",528,5145,54,38,4,6666,6654
    AWS_IOT_EVT_CONNECTED
    AWS_IOT_EVT_READY
    AWS_IOT_EVT_PUBACK, ID: 37682
    AWS_IOT_EVT_PUBACK, ID: 51606
    AWS_IOT_EVT_PUBACK, ID: 54204

    I booted the device twice.  You can see both times the error is the same.

  • Here is the prj.conf.

    # General config

    CONFIG_NCS_SAMPLES_DEFAULTS=y
    CONFIG_REBOOT=y
    CONFIG_FPU=y
    CONFIG_ASSERT=y
    CONFIG_STDOUT_CONSOLE=y
    CONFIG_I2C=y
    CONFIG_GPIO=y
    CONFIG_PWM=y
    CONFIG_MAIN_THREAD_PRIORITY=7
    #CONFIG_PWM_LOG_LEVEL_DBG=y
    CONFIG_ENTROPY_GENERATOR=y

    # Enable custom AT commands
    CONFIG_AT_CUSTOM_CMD=y

    # LSM6DSL
    CONFIG_SPI=y
    CONFIG_SENSOR=y

    # NEWLIB C
    CONFIG_NEWLIB_LIBC=y
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
    CONFIG_NEWLIB_LIBC_MIN_REQUIRED_HEAP_SIZE=2048

    # Network
    CONFIG_NETWORKING=y
    CONFIG_NET_NATIVE=n
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_OFFLOAD=y

    # LTE link control
    CONFIG_MODEM_KEY_MGMT=y
    CONFIG_LTE_LINK_CONTROL=y
    #CONFIG_LTE_LINK_CONTROL_LOG_LEVEL_DBG=y

    CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT_GPS=y
    CONFIG_LTE_NETWORK_DEFAULT=y

    CONFIG_LTE_MODE_PREFERENCE_AUTO=y

    CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
    CONFIG_LTE_EDRX_REQ=y

    CONFIG_LTE_PSM_REQ_RAT="11100000"

    # Modem library
    CONFIG_NRF_MODEM_LIB=y

    # CONFIG for China Telecom
    CONFIG_ZZHC=y
    CONFIG_TRUSTED_EXECUTION_NONSECURE=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_FLASH_MAP=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    CONFIG_NVS=y
    CONFIG_SETTINGS_NVS_SECTOR_COUNT=6
    CONFIG_ZZHC_STACK_SIZE=2048
    CONFIG_ZZHC_THREAD_PRIO=10

    # AT Host
    CONFIG_UART_INTERRUPT_DRIVEN=y
    CONFIG_AT_HOST_LIBRARY=y

    # AWS IoT library
    CONFIG_AWS_IOT=y
    CONFIG_AWS_IOT_CLIENT_ID_APP=y
    CONFIG_AWS_IOT_BROKER_HOST_NAME_APP=y

    CONFIG_AWS_IOT_SEC_TAG=13579
    CONFIG_AWS_IOT_APP_SUBSCRIPTION_LIST_COUNT=5
    CONFIG_AWS_IOT_CLIENT_ID_MAX_LEN=40
    CONFIG_AWS_IOT_TOPIC_UPDATE_DELTA_SUBSCRIBE=y
    CONFIG_AWS_IOT_LAST_WILL=y
    CONFIG_AWS_IOT_TOPIC_GET_ACCEPTED_SUBSCRIBE=y
    CONFIG_AWS_IOT_TOPIC_GET_REJECTED_SUBSCRIBE=y
    CONFIG_AWS_IOT_AUTO_DEVICE_SHADOW_REQUEST=n
    CONFIG_AWS_IOT_PROVISION_CERTIFICATES=y

    CONFIG_MQTT_KEEPALIVE=1200
    CONFIG_MQTT_CLEAN_SESSION=y

    # Date Time library
    CONFIG_DATE_TIME=y

    # Heap and stacks
    CONFIG_MAIN_STACK_SIZE=8192
    # Extended memory heap size needed for encoding REST messages to JSON
    CONFIG_HEAP_MEM_POOL_SIZE=49152
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192
    # Increase AT monitor heap because %NCELLMEAS notifications can be large
    CONFIG_AT_MONITOR_HEAP_SIZE=2048

    # MCUBOOT
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_MCUBOOT_IMG_MANAGER=y

    # DFU Target
    CONFIG_DFU_TARGET=y

    # Image manager
    CONFIG_FLASH=y
    CONFIG_IMG_MANAGER=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y

    # AWS FOTA
    CONFIG_AWS_FOTA=y
    CONFIG_FOTA_DOWNLOAD=y
    CONFIG_FOTA_DOWNLOAD_PROGRESS_EVT=y
    CONFIG_DFU_TARGET=y

    # CJSON
    CONFIG_CJSON_LIB=y

    # Download client (needed by AWS FOTA)
    CONFIG_DOWNLOAD_CLIENT=y
    CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y
    CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
    CONFIG_DOWNLOAD_CLIENT_LOG_LEVEL_INF=y
    CONFIG_DOWNLOAD_CLIENT_BUF_SIZE=2300

    # Location library
    CONFIG_LOCATION=y

    # Logging
    #CONFIG_LOG=y
    #CONFIG_LOG_PRINTK=y
    CONFIG_LOG_MODE_IMMEDIATE=n

    # nRF Cloud (for A-GPS and cell location)
    CONFIG_NRF_CLOUD_REST=y
    CONFIG_NRF_CLOUD_AGPS=y
    CONFIG_MODEM_INFO=y
    CONFIG_MODEM_INFO_ADD_NETWORK=y

    # Modem JWT
    CONFIG_MODEM_JWT=y

    # Multicell location service selection
    CONFIG_MULTICELL_LOCATION_SERVICE_NRF_CLOUD=y

    CONFIG_MODEM_ANTENNA_GNSS_ONBOARD=y
    CONFIG_MODEM_ANTENNA_GNSS_EXTERNAL=n
    #CONFIG_MODEM_ANTENNA_AT_MAGPIO="AT%XMAGPIO=1,0,0,3,1,1565,1586,0,1710,2200,0,698,746"
    CONFIG_MODEM_ANTENNA_AT_COEX0="AT%XCOEX0=1,1,1565,1586"
    CONFIG_TFM_KEY_FILE_S="C:/ncs/v2.3.0/modules/tee/tf-m/trusted-firmware-m/bl2/ext/mcuboot/root-RSA-3072.pem"
    CONFIG_TFM_KEY_FILE_NS="C:/ncs/v2.3.0/modules/tee/tf-m/trusted-firmware-m/bl2/ext/mcuboot/root-RSA-3072_1.pem"
    CONFIG_NRF_CLOUD_CLIENT_ID_PREFIX="abc-"

  • Now confirmed 2 out of the 10 pre-production boards are showing the same nrf_modem_gnss_agps_expiry_get() failure issue.  The second one was running fine for days before.  Can you tell me exactly what causes the function to fail?  Where can I find this function?  

  • Hi,

    Return value -13 from nrf_modem_gnss_agps_expiry_get() is -NRF_EACCES which according to nrf_modem_gnss.h means "GNSS is not enabled in system or functional mode".

    It looks like you might be having problems due to misconfiguration. In your project configuration, you have selected both CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT_GPS=y and
    CONFIG_LTE_NETWORK_DEFAULT=y but these options are mutually exclusive. Only one of them should be selected. Based on the device's behavior the latter one (CONFIG_LTE_NETWORK_DEFAULT=y) gets applied and the system mode stored in modem's NVM is used. You could try to remove CONFIG_LTE_NETWORK_DEFAULT=y from your project configuration so that you only have CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT_GPS=y which is probably the option which you want to use.

    Best regards,
    Dejan

  • What I found out last night was that the 2 failed boards have %xsystemmode=1,0,0,0, whereas all good working boards have %xsystemmode=1,1,1,0.  I then manually entered at%xsystemmode=1,1,1,0 on the 2 failed boards and then they both worked now.  My question is why is this happening when all boards are running the same code and same modem firmware?  Do I have to set xsystemmode=1,1,1,0 manually at the beginning of the code? 

Related