NUC970 Technical Reference Manual
Publication Release Date: Dec. 15, 2015
- 838 -
Revision V1.30
NUC97
0
T
E
CHNIC
A
L
RE
F
E
RE
N
CE
MA
NUA
L
1.
Set DMACEN (FMI_DMACTL[0]) to enable DMAC and SG_EN (FMI_DMACTL[3]) to enable
Scatter-Gather function.
2.
Fill corresponding starting address of Physical Address Descriptor (PAD) table in
FMI_DMASA for FMI.
3.
When bit-0 of FMI_DMASA
is 1, the PAD will fetch in out of order, otherwise, it’s fetched in
order from PAD. The first time of writing bit-0 with 1 or not is not available for this function.
The bits will be available in PAD table.
4.
Enable IP to start DMA transfer.
5.
Wait IP finished, DMAC doesn
’t need to be took care by software.
5.25.5 Functional Description
DMA Controller
5.25.5.1
The DMA Controller provides a DMA (Direct Memory Access) function for FMI controller to exchange
data between system memory (ex. SDRAM) and shared buffer (128 bytes). Arbitration of DMA request
between FMI is done by DMAC’s bus master. User only simply fills in the starting address and enables
DMAC, and then you can let DMAC to handle the data transfer automatically.
There is a 128 bytes shared buffer inside DMAC, separate into two 64 bytes ping-pong FIFO (total 128
bytes). It can provide multi-block transfers using ping-pong mechanism for FMI. When FMI is not busy,
these shared buffers can be accessed directly by software.
Flash Memory Interface Controller (FMI)
5.25.5.2
The Flash Memory Interface supports eMMC and NAND-type flash. FMI is cooperated with DMAC to
provide a fast data transfer between system memory and cards. There is a single 128 bytes buffer
embedded in DMAC for temporary data storage (separate into two 64 bytes ping-pong FIFO). Due to
DMAC only has single channel, that means only one interface can be active at one time.
eMMC
5.25.5.3
FMI provides an interface for eMMC flash device access. This eMMC controller supports 1-bit/4-bit
data bus mode for eMMC device.
eMMC controller uses an independent clock source named eMMC_CLK as engine clock. eMMC_CLK
can be completely asynchronous with system clock HCLK. In addition, eMMC clock can be changed
arbitrarily by software. Note that HCLK should be faster than eMMC_CLK.
This eMMC controller can generate all types of 48-bit command to eMMC device and retrieve all types
of response from eMMC device. After response in, the content of response will be stored at
FMI_EMMCRESP0 and FMI_EMMCRESP1. eMMC controller will calculate CRC-7 and check its
correctness for response. If CRC-7 is error, CRC_IF (FMI_EMMCINTSTS[1]) will be set and CRC7
(FMI_EMMCINTSTS[2])
will be ‘0’. For response R1b, user should note that after response in, eMMC
device will put busy signal on data line DAT0; user has to check this status with clock polling until it
became high. For response R3, CRC-7 is invalid; but eMMC controller will still calculate CRC-7 and
get an error result, this error has to be ignored by software and clear CRC_IF (FMI_EMMCINTSTS[1])
flag.