SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
The ADMA is a DMA controller embedded in each eMMC controller. It can be seen as a small sequencer that fetches a descriptor line and executes the corresponding action. The base address of the descriptor table is stored in the MMCHS_ADMASAL register.
Software must write the base address of the descriptor table in the MMCHS_ADMASAL register before the first use of the ADMA engine.
The ADMA program is executed according to descriptor attributes (see Section 25.4.5.1.1, Descriptor Table Description) and an FSM, as shown in Figure 25-17.
Table 25-15 describes each state of the ADMA FSM.
State Name | Operation |
---|---|
ST_FDS (fetch descriptor) | ADMA2 fetches a descriptor line and sets parameters in internal registers. It then goes to ST_CADR state. |
ST_CADR (change address) | Link operation loads another descriptor address to the ADMA system address register (MMCHS_ADMASAL). In other operations, the ADMA system address register is incremented to point to the next descriptor line. If End = 0, go to ST_FDS state. NOTE: ADMA2 does not stop at this state if some errors occur. |
ST_TFR (transfer data) | Data transfer of one descriptor line is executed between system memory and the SD card:
|
ST_STOP (stop DMA) | ADMA2 stays in this state in the following cases:
|
Table 25-16 gives the description of each symbol used in the ADMA FSM (see Figure 25-17).
Symbol | Definition |
---|---|
SYS_ADR | ADMA system address register |
SYS_ADR++ | Point to next descriptor line |
DAT_ADR | Data address register (internal) |
DAT_LEN | Data length register (internal) |
TFC | Transfer complete flag (internal) |
STOP | Stop-at-block-gap request |