实现了avr下对sd卡的读写,支持文件存取,删除的功能

源代码在线查看: mmc.h

软件大小: 106 K
上传用户: wenyishizhu
关键词: avr 读写 存取 删除
下载地址: 免注册下载 普通下载 VIP

相关代码

				//*****************************************************************************
				//
				// File Name	: 'mmc.h'
				// Title		: MultiMedia and SD Flash Card Interface
				// Author		: Pascal Stang - Copyright (C) 2004
				// Created		: 2004.09.22
				// Revised		: 2004.09.22
				// Version		: 0.1
				// Target MCU	: Atmel AVR Series
				// Editor Tabs	: 4
				//
				//	\ingroup driver_hw
				// \defgroup mmc MultiMedia and SD Flash Card Interface (mmc.c)
				// \code #include "mmc.h" \endcode
				// \par Description
				//		This library offers some simple functions which can be used
				//		to read and write data on a MultiMedia or SecureDigital (SD) Flash
				//		Card.  Although MM and SD Cards are designed to operate with their own
				//		special bus wiring and protocols, both types of cards also provide a
				//		simple SPI-like interface mode which is exceptionally useful when 
				//		attempting to use the cards in embedded systems.
				//
				// \par Wiring
				//		To work with this library, the card must be wired to the SPI port of
				//		the Atmel microcontroller as described below.  Typical cards can
				//		operate at up to 25MHz maximum SPI clock rate (thus faster than most
				//		AVR's maximum SPI clock rate).
				// 
				//	      _________________
				//	     /  1 2 3 4 5 6 78 |					//	    / 9                |	Pins 8 and 9 are present only on SD cards
				//	    |    MMC/SD Card   |
				//	    |                  |
				//	    X X X X X X X X X X 
				//	    1 - CS   (chip select)          - wire to any available I/O pin(*)
				//	    2 - DIN  (data in, card				//	    3 - VSS  (ground)               - wire to ground
				//	    4 - VDD  (power, 3.3V only?)    - wire to power (MIGHT BE 3.3V ONLY!)
				//	    5 - SCLK (data clock)           - wire to SPI SCK pin
				//	    6 - VSS  (ground)               - wire to ground
				//	    7 - DOUT (data out, card->host) - wire to SPI MISO pin
				//
				//	    (*) you must define this chip select I/O pin in mmcconf.h
				// 
				// \note This code is currently below version 1.0, and therefore is considered
				// to be lacking in some functionality or documentation, or may not be fully
				// tested.  Nonetheless, you can expect most functions to work.
				//
				// This code is distributed under the GNU Public License
				//		which can be found at http://www.gnu.org/licenses/gpl.txt
				//
				//*****************************************************************************
				//-------------------------------------------------------------------------
				// constants/macros/typdefs
				// MMC commands (taken from sandisk MMC reference)
				#define MMC_GO_IDLE_STATE			0		//initialize card to SPI-type access
				#define MMC_SEND_OP_COND				1		//set card operational mode
				#define MMC_SEND_CSD					9		//get card's CSD
				#define MMC_SEND_CID					10		//get card's CID
				#define MMC_SEND_STATUS				13
				#define MMC_SET_BLOCKLEN				16		//Set num of bytes to transfer per block
				#define MMC_READ_SINGLE_BLOCK		17		//read a block
				#define MMC_WRITE_BLOCK				24		//write a block
				#define MMC_PROGRAM_CSD				27
				#define MMC_SET_WRITE_PROT			28
				#define MMC_CLR_WRITE_PROT			29
				#define MMC_SEND_WRITE_PROT			30
				#define MMC_TAG_SECTOR_START			32
				#define MMC_TAG_SECTOR_END			33
				#define MMC_UNTAG_SECTOR				34
				#define MMC_TAG_ERASE_GROUP_START 	35		//Sets begin of erase group (mass erase)
				#define MMC_TAG_ERARE_GROUP_END		36		//Sets end of erase group (mass erase)
				#define MMC_UNTAG_ERASE_GROUP		37		//Untag (unset) erase group (mass erase)
				#define MMC_ERASE						38		//Perform block/mass erase
				#define MMC_CRC_ON_OFF				59		//Turns CRC check on/off
				//-------------------------------------------------------------------------
				// R1 Response bit-defines
				#define MMC_R1_BUSY					0x80	//R1: bit indicates card is busy
				#define MMC_R1_PARAMETER				0x40
				#define MMC_R1_ADDRESS				0x20
				#define MMC_R1_ERASE_SEQ				0x10
				#define MMC_R1_COM_CRC				0x08
				#define MMC_R1_ILLEGAL_COM			0x04
				#define MMC_R1_ERASE_RESET			0x02
				#define MMC_R1_IDLE_STATE			0x01
				//-------------------------------------------------------------------------
				// Data Start tokens
				#define MMC_STARTBLOCK_READ			0xFE	//when received from card, indicates 
																//that a block of data will follow
				#define MMC_STARTBLOCK_WRITE			0xFE	//when sent to card, indicates that a
																//block of data will follow
				#define MMC_STARTBLOCK_MWRITE		0xFC
				//-------------------------------------------------------------------------
				// Data Stop tokens
				#define MMC_STOPTRAN_WRITE			0xFD
				//-------------------------------------------------------------------------
				// Data Error Token values
				#define MMC_DE_MASK					0x1F
				#define MMC_DE_ERROR					0x01
				#define MMC_DE_CC_ERROR				0x02
				#define MMC_DE_ECC_FAIL				0x04
				#define MMC_DE_OUT_OF_RANGE			0x04
				#define MMC_DE_CARD_LOCKED			0x04
				//-------------------------------------------------------------------------
				// Data Response Token values
				#define MMC_DR_MASK					0x1F
				#define MMC_DR_ACCEPT					0x05
				#define MMC_DR_REJECT_CRC			0x0B
				#define MMC_DR_REJECT_WRITE_ERROR	0x0D
				//-------------------------------------------------------------------------
				struct MMC_VOLUME_INFO{				//MMC/SD Card info
				  uint32_t  size_MB;
				  uint8_t   sector_multiply;
				  uint32_t  sector_count;
				  uint8_t   name[6];
				};
				//-------------------------------------------------------------------------
				// functions
				//-------------------------------------------------------------------------
				//! Initialize AVRMMC hardware interface.Prepares hardware for MMC access.
				void mmcInit(void);
				//-------------------------------------------------------------------------
				//! Initialize the card and prepare it for use. Returns zero if successful.
				uint8_t mmcReset(void);
				//-------------------------------------------------------------------------
				//! Send card an MMC command. Returns R1 result code.
				uint8_t mmcSendCommand(uint8_t cmd, uint32_t arg);
				//-------------------------------------------------------------------------
				//! Read 512-byte sector from card to buffer Returns zero if successful.
				uint8_t mmcRead(uint32_t sector, uint8_t* buffer);
				//-------------------------------------------------------------------------
				//! Write 512-byte sector from buffer to card Returns zero if successful.
				uint8_t mmcWrite(uint32_t sector, uint8_t* buffer);
				//-------------------------------------------------------------------------
				//! Internal command function.Issues a generic MMC command.
				uint8_t mmcCommand(uint8_t cmd, uint32_t arg);
				//-------------------------------------------------------------------------
				void MMC_get_volume_info(void);
				//-------------------------------------------------------------------------
							

相关资源