CLEON  Version 1
Cloud-Offloaded GPS Receiver
diskio.h File Reference
#include "integer.h"
Include dependency graph for diskio.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define _USE_WRITE   1 /* 1: Enable disk_write function */
 
#define _USE_IOCTL   1 /* 1: Enable disk_ioctl fucntion */
 
#define STA_NOINIT   0x01 /* Drive not initialized */
 
#define STA_NODISK   0x02 /* No medium in the drive */
 
#define STA_PROTECT   0x04 /* Write protected */
 
#define CTRL_SYNC   0 /* Flush disk cache (for write functions) */
 
#define GET_SECTOR_COUNT   1 /* Get media size (for only f_mkfs()) */
 
#define GET_SECTOR_SIZE   2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */
 
#define GET_BLOCK_SIZE   3 /* Get erase block size (for only f_mkfs()) */
 
#define CTRL_ERASE_SECTOR   4 /* Force erased a block of sectors (for only _USE_ERASE) */
 
#define CTRL_POWER   5 /* Get/Set power status */
 
#define CTRL_LOCK   6 /* Lock/Unlock media removal */
 
#define CTRL_EJECT   7 /* Eject media */
 
#define CTRL_FORMAT   8 /* Create physical format on the media */
 
#define MMC_GET_TYPE   10 /* Get card type */
 
#define MMC_GET_CSD   11 /* Get CSD */
 
#define MMC_GET_CID   12 /* Get CID */
 
#define MMC_GET_OCR   13 /* Get OCR */
 
#define MMC_GET_SDSTAT   14 /* Get SD status */
 
#define ATA_GET_REV   20 /* Get F/W revision */
 
#define ATA_GET_MODEL   21 /* Get model name */
 
#define ATA_GET_SN   22 /* Get serial number */
 
#define CT_MMC   0x01 /* MMC ver 3 */
 
#define CT_SD1   0x02 /* SD ver 1 */
 
#define CT_SD2   0x04 /* SD ver 2 */
 
#define CT_SDC   (CT_SD1|CT_SD2) /* SD */
 
#define CT_BLOCK   0x08 /* Block addressing */
 

Typedefs

typedef BYTE DSTATUS
 

Enumerations

enum  DRESULT {
  RES_OK = 0, RES_ERROR, RES_WRPRT, RES_NOTRDY,
  RES_PARERR
}
 

Functions

DSTATUS disk_initialize (BYTE)
 
DSTATUS disk_status (BYTE)
 
DRESULT disk_read (BYTE, BYTE *, DWORD, BYTE)
 
DRESULT disk_write (BYTE, const BYTE *, DWORD, BYTE)
 
DRESULT disk_ioctl (BYTE, BYTE, DWORD *)
 

Macro Definition Documentation

#define _USE_IOCTL   1 /* 1: Enable disk_ioctl fucntion */

Definition at line 13 of file diskio.h.

#define _USE_WRITE   1 /* 1: Enable disk_write function */

Definition at line 12 of file diskio.h.

#define ATA_GET_MODEL   21 /* Get model name */

Definition at line 72 of file diskio.h.

#define ATA_GET_REV   20 /* Get F/W revision */

Definition at line 71 of file diskio.h.

#define ATA_GET_SN   22 /* Get serial number */

Definition at line 73 of file diskio.h.

#define CT_BLOCK   0x08 /* Block addressing */

Definition at line 81 of file diskio.h.

#define CT_MMC   0x01 /* MMC ver 3 */

Definition at line 77 of file diskio.h.

#define CT_SD1   0x02 /* SD ver 1 */

Definition at line 78 of file diskio.h.

#define CT_SD2   0x04 /* SD ver 2 */

Definition at line 79 of file diskio.h.

#define CT_SDC   (CT_SD1|CT_SD2) /* SD */

Definition at line 80 of file diskio.h.

#define CTRL_EJECT   7 /* Eject media */

Definition at line 60 of file diskio.h.

#define CTRL_ERASE_SECTOR   4 /* Force erased a block of sectors (for only _USE_ERASE) */

Definition at line 55 of file diskio.h.

#define CTRL_FORMAT   8 /* Create physical format on the media */

Definition at line 61 of file diskio.h.

#define CTRL_LOCK   6 /* Lock/Unlock media removal */

Definition at line 59 of file diskio.h.

#define CTRL_POWER   5 /* Get/Set power status */

Definition at line 58 of file diskio.h.

#define CTRL_SYNC   0 /* Flush disk cache (for write functions) */

Definition at line 51 of file diskio.h.

#define GET_BLOCK_SIZE   3 /* Get erase block size (for only f_mkfs()) */

Definition at line 54 of file diskio.h.

#define GET_SECTOR_COUNT   1 /* Get media size (for only f_mkfs()) */

Definition at line 52 of file diskio.h.

#define GET_SECTOR_SIZE   2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */

Definition at line 53 of file diskio.h.

#define MMC_GET_CID   12 /* Get CID */

Definition at line 66 of file diskio.h.

#define MMC_GET_CSD   11 /* Get CSD */

Definition at line 65 of file diskio.h.

#define MMC_GET_OCR   13 /* Get OCR */

Definition at line 67 of file diskio.h.

#define MMC_GET_SDSTAT   14 /* Get SD status */

Definition at line 68 of file diskio.h.

#define MMC_GET_TYPE   10 /* Get card type */

Definition at line 64 of file diskio.h.

#define STA_NODISK   0x02 /* No medium in the drive */

Definition at line 44 of file diskio.h.

#define STA_NOINIT   0x01 /* Drive not initialized */

Definition at line 43 of file diskio.h.

#define STA_PROTECT   0x04 /* Write protected */

Definition at line 45 of file diskio.h.

Typedef Documentation

typedef BYTE DSTATUS

Definition at line 19 of file diskio.h.

Enumeration Type Documentation

enum DRESULT
Enumerator:
RES_OK 
RES_ERROR 
RES_WRPRT 
RES_NOTRDY 
RES_PARERR 

Definition at line 22 of file diskio.h.

{
RES_OK = 0, /* 0: Successful */
RES_ERROR, /* 1: R/W Error */
RES_WRPRT, /* 2: Write Protected */
RES_NOTRDY, /* 3: Not Ready */
RES_PARERR /* 4: Invalid Parameter */

Function Documentation

DSTATUS disk_initialize ( BYTE  )

Definition at line 386 of file diskio.c.

{
#pragma diag_suppress=Pe550
BYTE n, ty, cmd, buf[4];
UINT tmr;
INIT_PORT(); /* Initialize control port */
s = disk_status(drv); /* Check if card is in the socket */
if (s & STA_NODISK){
return ( s) ;
}
CS_H();
for (n = 10; n; n--){rcvr_mmc(buf, 1); /* 80 dummy clocks */
}
ty = 0;
if (send_cmd(CMD0, 0) == 1){ /* Enter Idle state */
if (send_cmd(CMD8, 0x1AA) == 1){ /* SDv2? */
rcvr_mmc(buf, 4); /* Get trailing return value of R7 resp */
if (buf[2] == 0x01 && buf[3] == 0xAA){ /* The card can work at vdd range of 2.7-3.6V */
for (tmr = 1000; tmr; tmr--)
{ /* Wait for leaving idle state (ACMD41 with HCS bit) */
if (send_cmd(ACMD41, 1UL << 30) == 0){
break;
}
DLY_US(1000);
}
if (tmr && send_cmd(CMD58, 0) == 0){ /* Check CCS bit in the OCR */
rcvr_mmc(buf, 4);
ty = (buf[0] & 0x40) ? CT_SD2 | CT_BLOCK : CT_SD2; /* SDv2 */
}
}
} else { /* SDv1 or MMCv3 */
if (send_cmd(ACMD41, 0) <= 1){
ty = CT_SD1; cmd = ACMD41; /* SDv1 */
} else {
ty = CT_MMC; cmd = CMD1; /* MMCv3 */
}
for (tmr = 1000; tmr; tmr--)
{ /* Wait for leaving idle state */
if (send_cmd(ACMD41, 0) == 0){
break;
}
DLY_US(1000);
}
if (!tmr || send_cmd(CMD16, 512) != 0){ /* Set R/W block length to 512 */
ty = 0;
}
}
}
CardType = ty;
deselect();
if (ty){ /* Initialization succeded */
s &= ~STA_NOINIT;
} else { /* Initialization failed */
s |= STA_NOINIT;
}
Stat = s;
return (s);
}

Here is the call graph for this function:

Here is the caller graph for this function:

DRESULT disk_ioctl ( BYTE  ,
BYTE  ,
DWORD  
)
DRESULT disk_read ( BYTE  ,
BYTE ,
DWORD  ,
BYTE   
)

Definition at line 461 of file diskio.c.

{
DSTATUS s;
s = disk_status(drv);
if (s & STA_NOINIT){
return ( RES_NOTRDY) ;
}
if (!count){
return ( RES_PARERR) ;
}
if (!(CardType & CT_BLOCK)){
sector *= 512; /* Convert LBA to byte address if needed */
}
if (count == 1){ /* Single block read */
if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */
&& rcvr_datablock(buff, 512)){
count = 0;
}
} else { /* Multiple block read */
if (send_cmd(CMD18, sector) == 0){ /* READ_MULTIPLE_BLOCK */
do {
if (!rcvr_datablock(buff, 512)){
break;
}
buff += 512;
} while (--count);
send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
}
}
deselect();
return (count ? RES_ERROR : RES_OK);
}

Here is the call graph for this function:

Here is the caller graph for this function:

DSTATUS disk_status ( BYTE  )

Definition at line 301 of file diskio.c.

{
DSTATUS s = Stat;
if (drv || !INS){
} else {
s &= ~STA_NODISK;
if (WP){
} else {
s &= ~STA_PROTECT;
}
}
Stat = s;
return (s);
}

Here is the caller graph for this function:

DRESULT disk_write ( BYTE  ,
const BYTE ,
DWORD  ,
BYTE   
)

Here is the caller graph for this function: