Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

IDE/ATA Interface Driver (ata.c)
[Drivers (for external hardware)]


Detailed Description

 #include "ata.h" 
Overview
This library provides an interface from AVR processors to IDE/ATA devices. Such devices can include hard disks, CF memory cards, and PCMCIA disks and memory devices.  The library supports automatic drive identification and sector-level reading and writing.  Some minimal address decoding hardware is required to use this interface. For an example of interface hardware, see the Procyon MP3 Player docs here: http://www.procyonengineering.com/embedded/procyonmp3/index.html. Future revisions if this library may include a direct hardware-less interface option.
Note:
This code is quite old and in some level of disrepair. Nonetheless, it works quite well.


Data Structures

struct  typeDriveInfo

Defines

#define DRIVE0   0
#define STANDBY   0
#define SLEEP   1
#define IDLE   2
#define ATA_SR_BSY   0x80
#define ATA_SR_DRDY   0x40
#define ATA_SR_DF   0x20
#define ATA_SR_DSC   0x10
#define ATA_SR_DRQ   0x08
#define ATA_SR_CORR   0x04
#define ATA_SR_IDX   0x02
#define ATA_SR_ERR   0x01
#define ATA_ER_UNC   0x40
#define ATA_ER_MC   0x20
#define ATA_ER_IDNF   0x10
#define ATA_ER_MCR   0x08
#define ATA_ER_ABRT   0x04
#define ATA_ER_TK0NF   0x02
#define ATA_ER_AMNF   0x01
#define ATA_HEAD_USE_LBA   0x40
#define ATA_CMD_READ   0x20
#define ATA_CMD_READNR   0x21
#define ATA_CMD_WRITE   0x30
#define ATA_CMD_WRITENR   0x31
#define ATA_CMD_IDENTIFY   0xEC
#define ATA_CMD_RECALIBRATE   0x10
#define ATA_CMD_SPINDOWN   0xE0
#define ATA_CMD_SPINUP   0xE1
#define ATA_CMD_STANDBY_5SU   0xE2
#define ATA_CMD_IDLE_5SU   0xE3
#define ATA_CMD_SLEEP   0xE6
#define ATA_CMD_STANDBY_01SU   0xF2
#define ATA_CMD_IDLE_01SU   0xF3
#define ATA_DISKPARM_CLYS   0x03A6
#define ATA_DISKPARM_HEADS   0x10
#define ATA_DISKPARM_SECTORS   0x11
#define ATA_IDENT_DEVICETYPE   0
#define ATA_IDENT_CYLINDERS   1
#define ATA_IDENT_HEADS   3
#define ATA_IDENT_SECTORS   6
#define ATA_IDENT_SERIAL   10
#define ATA_IDENT_MODEL   27
#define ATA_IDENT_FIELDVALID   53
#define ATA_IDENT_LBASECTORS   60
#define ATA_DISKMODE_SPINDOWN   0
#define ATA_DISKMODE_SPINUP   1
#define ATA_DISKMODE_SETTIMEOUT   2
#define ATA_DISKMODE_SLEEP   3

Functions

void ataInit (void)
void ataDriveInit (void)
void ataDriveSelect (u08 DriveNo)
void ataSetDrivePowerMode (u08 DriveNo, u08 mode, u08 timeout)
u08 ataReadByte (u08 reg)
void ataWriteByte (u08 reg, u08 data)
void ataShowRegisters (unsigned char DriveNo)
u08 ataSWReset (void)
void ataDiskErr (void)
void ataPrintSector (u08 *Buffer)
void ataReadDataBuffer (u08 *Buffer, u16 numBytes)
void ataWriteDataBuffer (u08 *Buffer, u16 numBytes)
u08 ataStatusWait (u08 mask, u08 waitStatus)
unsigned char ataReadSectorsCHS (unsigned char Drive, unsigned char Head, unsigned int Track, unsigned char Sector, unsigned int numsectors, unsigned char *Buffer)
unsigned char ataWriteSectorsCHS (unsigned char Drive, unsigned char Head, unsigned int Track, unsigned char Sector, unsigned int numsectors, unsigned char *Buffer)
unsigned char ataReadSectorsLBA (unsigned char Drive, unsigned long lba, unsigned int numsectors, unsigned char *Buffer)
unsigned char ataWriteSectorsLBA (unsigned char Drive, unsigned long lba, unsigned int numsectors, unsigned char *Buffer)
unsigned char ataReadSectors (unsigned char Drive, unsigned long lba, unsigned int numsectors, unsigned char *Buffer)
unsigned char ataWriteSectors (unsigned char Drive, unsigned long lba, unsigned int numsectors, unsigned char *Buffer)


Generated on Sun Oct 29 03:41:09 2006 for Procyon AVRlib by  doxygen 1.4.2