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

How can to use the 32K ram for NRF51822QFAC.

Please tell me the way If who knows,thanks. ps: s110,softdevice s6.00, sdk is v5.20

  • Hi Mike

    Unfortunately, that is not possible. The 32K RAM is first supported by S110 7.1.0, see the S110 release notes

    Update 21.9.2015 Softdevice S110 v7.0.0 was the first softdevice to be tested with third revision nRF51. For first and second revision nRF51, all nRF51 chip variants had 16kB RAM. There was however a bug in S110 7.0.0 that it only supported 16kB RAM and therefore the remaining 16kB of the RAM in the nRF51822/nRF51422 QFAC variant could not be utilized. This was fixed for S110 v7.1.0 which is reported in the release notes for S110 v7.1.0 in the "Bug fixes" section:

    • Fixed an issue, effecting nRF51 chips with more than 16 kB of RAM, that could cause an assert at sd_ble_enable() or cause SVC calls to return NRF_ERROR_INVALID_ADDRESS when a pointer to RAM above 16 kB was supplied
  • We looked at doing this on an nRF51422 running S310 version 1. We never did it but we did get confirmation it was theoretically possible with some tricky linker work.

    The issue is the soft device checks the return address of the code that calls into the soft device for reasonableness. If you are calling into the soft device from a region of RAM beyond the 16K boundary, the soft device will assume error and lock up.

    So if you can structure your code and your linker such that no call into the soft device ever originates from beyond the 16K boundary, then in theory it should work. Or so we were told with the s310 version 1. Not sure if this works for your situation.

    David

  • I can't find any information to say to support the 32k ram using s110 v7.1.0, Can you tell me?

  • You need to have an SDK that also supports that soft device. You should look in the linker scripts in your soft device that specify where RAM starts and ends.

    Alternatively, you should be able to use your existing SDK and manually change the linker scripts as long as the SDK supports your hardware revision. I think the file you want is *.ld in sdk\components\toolchain\gcc (or whatever toolchain you use)

Related