main.c
资源名称:SD卡读写模块.rar [点击查看]
上传用户:pudewen666
上传日期:2007-06-08
资源大小:75k
文件大小:4k
源码类别:
微处理器开发
开发平台:
Windows_Unix
- /****************************************Copyright (c)**************************************************
- ** Guangzou ZLG-MCU Development Co.,LTD.
- ** graduate school
- ** http://www.zlgmcu.com
- **
- **--------------File Info-------------------------------------------------------------------------------
- ** File name: main.c
- ** Last modified Date: 2004-09-16
- ** Last Version: 1.0
- ** Descriptions: The main() function example template
- **
- **------------------------------------------------------------------------------------------------------
- ** Created by: Chenmingji
- ** Created date: 2004-09-16
- ** Version: 1.0
- ** Descriptions: The original version
- **
- **------------------------------------------------------------------------------------------------------
- ** Modified by:
- ** Modified date:
- ** Version:
- ** Descriptions:
- **
- ********************************************************************************************************/
- #include "config.h"
- #include "string.h"
- #include "uart.h" /* 串口操作相关函数 */
- #include "sdconfig.h"
- #include "sddriver.h" /* SD卡操作的相关函数 */
- #define CMD_SD_INIT 0x00 /* SD卡初始化卡命令 */
- #define CMD_SD_READ 0x01 /* SD卡读命令 */
- #define CMD_SD_WRITE 0x02 /* SD卡写命令 */
- #define CMD_SD_ERASE 0x03 /* SD卡擦除命令 */
- #define CMD_DATA_TRANS 0x04 /* 将sd_buf中的数据发送到PC机 */
- #define CMD_DATA_RECV 0x05 /* 接收来自串口的数据,并放入sd_buf中 */
- /* SD卡读写缓冲区,比SD卡一个块大8字节 */
- uint8 sd_buf[520];
- int main (void)
- {
- uint32 bufaddr;
- uint32 blockaddr;
- uint32 blocknum;
- Uart_Initialize(115200); /* 初始化串口 */
- while(1) /* 等待串口中断 */
- {
- if(rcv_new == 1) /* 如果串口收到数据 */
- {
- switch(rcv_buf[0])
- {
- case CMD_SD_INIT: rcv_buf[1] = SD_Initialize(); /* 初始化SD卡 */
- break;
- case CMD_SD_READ:
- blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) + /* 计算块地址 */
- (rcv_buf[3] << 8) + rcv_buf[4];
- rcv_buf[1] = SD_ReadBlock(blockaddr, sd_buf); /* SD卡单块读 */
- break;
- case CMD_SD_WRITE:
- blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) +
- (rcv_buf[3] << 8) + rcv_buf[4];
- rcv_buf[1] = SD_WriteBlock(blockaddr, sd_buf); /* SD 卡单块写 */
- break;
- case CMD_SD_ERASE:
- blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) +
- (rcv_buf[3] << 8) + rcv_buf[4];
- blocknum = (rcv_buf[5] << 16) + (rcv_buf[6] << 8) +
- (rcv_buf[7]);
- rcv_buf[1] = SD_EraseBlock(blockaddr, blocknum); /* SD 卡擦除 */
- break;
- case CMD_DATA_RECV:
- bufaddr = (rcv_buf[1] << 8) + rcv_buf[2]; /* 计算缓冲区地址 */
- memcpy(sd_buf + bufaddr, &rcv_buf[3], 5); /* 收到数据放入sd_buf */
- break;
- case CMD_DATA_TRANS:
- bufaddr = (rcv_buf[1] << 8) + rcv_buf[2]; /* 计算缓冲区地址 */
- memcpy(&rcv_buf[1], sd_buf + bufaddr, 7); /* sd_buf数据放入rcv_buf */
- break;
- default: break;
- }
- UART0_SendBuf(); /* 发送 rcv_buf */
- rcv_new = 0; /* 接收标志清0 */
- }
- }
- return 0;
- }
- /*********************************************************************************************************
- ** End Of File
- ********************************************************************************************************/