This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF9160 Modem Hardware API Documentation

Is there any public documentation on the LTE Modem hardware API for the nRF9160?

I'm interested in porting an embedded operating system written in Rust to the nRF9160 and am trying to determine how the AT command writes to the sockets are translated into IPC and MMIO accesses. I found the socket library code here: https://github.com/NordicPlayground/nrfxlib/tree/master/bsdlib, but the compiled archive files don't explain how the underlying code actually works. The nRF9160 Objective Product Specification says "Note: For details regarding the modem API, please refer to nRF Connect SDK document and nRF91 AT Commands, Command Reference Guide document." but I can't find any explanation of the hardware API in those locations.

I understand that the firmware running within the modem itself needs to be unmodifiable by end users, or else it may not be in compliance with various regulations, but the interface to the modem seems like it could be made available to users without harm.

  • Hi,

     

    The API documentation is not yet finalized, unfortunately, but the header file nrf_socket.h has some information about return codes and similar.

    The interface to the modem is provided by the bsdlib, which exposes a berkey socket API, which is widely used in many programming languages, and you should be able to find generic information about the different functions in for instance linux by writing "man getaddrinfo" or any other function you would like to know how works.

     

    Kind regards,

    Håkon

  • Thanks so much for the quick reply! Does that mean that eventually the hardware API for the modem will be released publicly?

    I agree that building on top of the provided archive file and using the socket API could be a workable solution for non-C languages.

  • Hi,

    Branden Ghena said:
    Does that mean that eventually the hardware API for the modem will be released publicly?

    The BSDlib will be the API to use to communicate with the modem on an AT and IP level. I have not heard anything about opening up for doing this directly, unfortunately.

    Is there a reason why you do not want to use bsdlib in your application?

    Kind regards,

    Håkon

  • (I don't speak for Branden, but we collaborate on the same project together, so I'm chiming in too)

    > Is there a reason why you do not want to use bsdlib in your application?

    We're interested in portin Tock OS to the nRF91 (the nRF52 series is already one of the two main platforms for the OS). Supporting modems through an abstraction layer has historically been a problem.

    Typically these layers take over hardware features that the OS needs to control, or their runtime behavior has either not been compatible with the OS, or has not been documented enough to be able to work around. So far, the BLE and 802.15.4 radios have been documented well enough at the hardware level to implement our own drivers.

    (Anecdotally, I know both Branden and I have used the nRF SDKs independently and they are very nice to use, so we're not complaining!)

  • Hi,

    Amit said:
    Typically these layers take over hardware features that the OS needs to control, or their runtime behavior has either not been compatible with the OS, or has not been documented enough to be able to work around. So far, the BLE and 802.15.4 radios have been documented well enough at the hardware level to implement our own drivers.

    The bsdlib is a "thin layer" between the application and the modem, especially when comparing it to our softdevices. Documentation for the bsdlib will follow. in terms of requirements, it uses flash, RAM, and two interrupts (see here: https://github.com/NordicPlayground/fw-nrfconnect-nrf/blob/master/lib/bsdlib/bsd_os.c). More info on the requirements will follow once we reach a non-alpha state on our NCS software solution. 

     

    Kind regards,

    Håkon

Related