You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: softperipheral/doc/sEMMC/semmc_nrf54L_series_porting_v0_1_0.rst
+75-75Lines changed: 75 additions & 75 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,12 +40,13 @@ This structure shows the relevant files and directories in the `sdk-nrfxlib`_ re
40
40
└── nrf_semmc.c
41
41
42
42
.. note::
43
-
The main interface for sEMMC is the :file:`nrf_semmc.h` file. It contains a list of supported and tested EMMC commands.
43
+
The main interface for sEMMC is the :file:`nrf_semmc.h` file.
44
+
It contains a list of supported and tested EMMC commands.
44
45
45
46
Header files
46
47
============
47
48
48
-
For an sEMMC application to function correctly, it requires specific header files used by the driver code (internal paths) and specific header files for nrfx (external dependencies).
49
+
sEMMC application requires specific header files used by the driver code (internal paths) and specific header files for nrfx (external dependencies).
49
50
You must include paths to these files in the build environment's list of include paths.
50
51
The following list is a detailed breakdown of the necessary paths:
51
52
@@ -64,7 +65,6 @@ The following list is a detailed breakdown of the necessary paths:
64
65
For example, the :file:`nrfx_glue.h`, :file:`nrfx_log.h`, or a configuration header file.
65
66
See an example configuration for the :file:`nrfx_config.h` file (valid for all nRF54L Series devices):
66
67
67
-
68
68
.. code-block:: c
69
69
70
70
#ifndef NRFX_CONFIG_H__
@@ -79,17 +79,15 @@ The following list is a detailed breakdown of the necessary paths:
79
79
80
80
#endif // NRFX_CONFIG_H__
81
81
82
-
83
82
Compiling source files
84
83
======================
85
84
86
-
For an sEMMC application to function properly, you must compile the driver implementation from the source file, i.e., include:file:`nrf_semmc.c` at the top of your application.
85
+
For an sEMMC application to function properly, you must compile the driver implementation from the source file by including:file:`nrf_semmc.c` at the top of your application.
87
86
88
87
Application core and FLPR configuration
89
88
***************************************
90
89
91
90
You must adjust the settings for the nRF54L Series SoC to run at highest base clock frequency.
92
-
93
91
To work with any of the following settings, ensure you have completed the following:
94
92
95
93
* You have allocated memory for the data pointers used by the sEMMC driver.
@@ -196,29 +194,29 @@ This code snippet shows how you can set up these pins in your application:
196
194
High speed transfers
197
195
====================
198
196
199
-
To enable communcation at 32MHz on an nRF54L Series device you need to set the bias of the GPIOHSPADCTRL module. The following code snippet shows how you can set the value in your application:
197
+
To enable communcation at 32MHz on an nRF54L Series device, you need to set the bias of the GPIOHSPADCTRL module.
198
+
The following code snippet shows how you can set the value in your application:
200
199
201
200
.. code-block:: c
202
201
203
-
gpiohs_bias_val = 0x2;
202
+
gpiohs_bias_val = 0x2;
204
203
NRF_GPIOHSPADCTRL->BIAS = gpiohs_bias_val;
205
204
206
-
207
205
Memory retention configuration
208
206
******************************
209
207
210
208
The sEMMC soft peripheral requires RAM retention in order to go into the lowest power consumption mode, which can be called through the :c:func:`nrf_semmc_disable` function.
211
209
212
210
Assuming there is an access to the peripheral ``MEMCONF``, the following code snippet illustrates how to enable FLPR RAM retention, followed by disabling and re-enabling, and finally how to disable RAM retention:
Ensure that ``SP_FIRMWARE_ADDR`` is set so that it does not overlap with the context saving address.
300
-
For nRF54L Series devices the firmware is usually placed before the context saving address. This means that
301
-
``SP_FIRMWARE_ADDR`` plus the component sizes in the table above must be a lower value than the context saving address.
294
+
For nRF54L Series devices, the firmware is placed before the context saving address.
295
+
This means, that ``SP_FIRMWARE_ADDR`` plus the component sizes listed in the table must be of a lower value than the context saving address.
302
296
303
297
The values in the table below have been tested and are considered production-ready for ``SP_FIRMWARE_ADDR``:
304
298
@@ -319,10 +313,16 @@ The values in the table below have been tested and are considered production-rea
319
313
Read responses
320
314
**************
321
315
322
-
sEMMC is not able to process read data and response at the same time, as mentioned in :ref:`semmc_limitations`. There are a couple of things that can be done to mitigate this.
323
316
324
-
The preferred way to do reads is to first do the read as normal and process the response with :c:var:`nrf_semmc_config_t.process_response` set to `NRF_EMMC_RESPONSE_PROC_PROCESS`.
325
-
The response is returned in :c:var:`nrf_semmc_cmd_desc_t.err`. If the response is `NRF_SEMMC_SUCCESS` the read was successful. If any other response is returned, you would
326
-
need to do a second read and ignore the response with :c:var:`nrf_semmc_config_t.process_response` set to `NRF_EMMC_RESPONSE_PROC_IGNORE`.
317
+
Read responses
318
+
**************
319
+
320
+
sEMMC cannot process read data and response at the same time (see the :ref:`semmc_limitations`).
321
+
However, you can mitigate it in the following ways:
322
+
323
+
* The recommended way is to perform the read operation with the :c:var:`nrf_semmc_config_t.process_response` variable set to ``NRF_EMMC_RESPONSE_PROC_PROCESS``.
324
+
The response is available in the :c:var:`nrf_semmc_cmd_desc_t.err` variable.
325
+
If the response is ``NRF_SEMMC_SUCCESS``, the read was successful.
326
+
If you receive a different response, retry the read operation, this time with the :c:var:`nrf_semmc_config_t.process_response` variable set to ``NRF_EMMC_RESPONSE_PROC_IGNORE``.
327
327
328
-
The other is doing the wanted read command first with :c:var:`nrf_semmc_config_t.process_response` set to `NRF_EMMC_RESPONSE_PROC_IGNORE` followed by a CMD13 to ensure the status is correct.
328
+
* Alternatively, you can perform the read operation with the :c:var:`nrf_semmc_config_t.process_response` variable set to ``NRF_EMMC_RESPONSE_PROC_IGNORE``, and then follow it with a CMD13 command to verify if the status is correct.
0 commit comments