123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #ifdef USE_SDIO_SD
- /*
- #include "sys.h"
- #include "usart.h"
- #include "led.h"
- #include "key.h"
- #include "ltdc.h"
- #include "lcd.h"
- #include "sdram.h"
- #include "usmart.h"
- #include "pcf8574.h"
- #include "mpu.h"
- */
- #include "sys_delay.h"
- #include "sys_malloc.h"
- #include "obj_sdmmc_sdcard.h"
- /************************************************
- ALIENTEK 阿波罗STM32H7开发板 实验40
- SD卡实验-HAL库函数版
- 技术支持:www.openedv.com
- 淘宝店铺:http://eboard.taobao.com
- 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
- 广州市星翼电子科技有限公司
- 作者:正点原子 @ALIENTEK
- ************************************************/
- //通过串口打印SD卡相关信息
- void show_sdcard_info(void)
- {
- switch(SDCardInfo.CardType)
- {
- case STD_CAPACITY_SD_CARD_V1_1:printf("Card Type:SDSC V1.1\r\n");break;
- case STD_CAPACITY_SD_CARD_V2_0:printf("Card Type:SDSC V2.0\r\n");break;
- case HIGH_CAPACITY_SD_CARD:printf("Card Type:SDHC V2.0\r\n");break;
- case MULTIMEDIA_CARD:printf("Card Type:MMC Card\r\n");break;
- }
- printf("Card ManufacturerID:%d\r\n",SDCardInfo.SD_cid.ManufacturerID); //制造商ID
- printf("Card RCA:%d\r\n",SDCardInfo.RCA); //卡相对地址
- printf("Card Capacity:%d MB\r\n",(u32)(SDCardInfo.CardCapacity>>20)); //显示容量
- printf("Card BlockSize:%d\r\n\r\n",SDCardInfo.CardBlockSize); //显示块大小
- }
- //测试SD卡的读取
- //从secaddr地址开始,读取seccnt个扇区的数据
- //secaddr:扇区地址
- //seccnt:扇区数
- void sd_test_read(u32 secaddr,u32 seccnt)
- {
- u32 i;
- u8 *buf;
- u8 sta=0;
- buf=mymalloc(SRAMIN,seccnt*512); //申请内存,从SDRAM申请内存
- sta=SD_ReadDisk(buf,secaddr,seccnt);//读取secaddr扇区开始的内容
- if(sta==0)
- {
- printf("SECTOR %d DATA:\r\n",secaddr);
- for(i=0;i<seccnt*512;i++)printf("%x ",buf[i]);//打印secaddr开始的扇区数据
- printf("\r\nDATA ENDED\r\n");
- }else printf("err:%d\r\n",sta);
- myfree(SRAMIN,buf); //释放内存
- }
- //测试SD卡的写入(慎用,最好写全是0XFF的扇区,否则可能损坏SD卡.)
- //从secaddr地址开始,写入seccnt个扇区的数据
- //secaddr:扇区地址
- //seccnt:扇区数
- void sd_test_write(u32 secaddr,u32 seccnt)
- {
- u32 i;
- u8 *buf;
- u8 sta=0;
- buf=mymalloc(SRAMIN,seccnt*512); //从SDRAM申请内存
- for(i=0;i<seccnt*512;i++) //初始化写入的数据,是3的倍数.
- {
- buf[i]=i*3;
- }
- sta=SD_WriteDisk(buf,secaddr,seccnt);//从secaddr扇区开始写入seccnt个扇区内容
- if(sta==0)
- {
- printf("Write over!\r\n");
- }else printf("err:%d\r\n",sta);
- myfree(SRAMIN,buf); //释放内存
- }
- int func_sd_card_main(void)
- {
- // u8 key;
- u32 sd_size;
- u8 t=0;
- u8 *buf;
- /*
- Cache_Enable(); //打开L1-Cache
- //HAL_Init(); //初始化HAL库
- delay_init(400); //延时初始化
- uart_init(115200); //串口初始化
- usmart_dev.init(200); //初始化USMART
- LED_Init(); //初始化LED
- KEY_Init(); //初始化按键
- SDRAM_Init(); //初始化SDRAM
- LCD_Init(); //初始化LCD
- */
- my_mem_init(SRAMIN); //初始化内部内存池
- //my_mem_init(SRAMEX); //初始化外部SDRAM内存池
-
- while(SD_Init())//检测不到SD卡
- {
- sys_delay_ms(500);
- sys_delay_ms(500);
- }
- show_sdcard_info(); //打印SD卡相关信息
-
- //检测SD卡成功
- while(1)
- {
- buf=mymalloc(0,512); //申请内存
- if(SD_ReadDisk(buf,0,1)==0) //读取0扇区的内容
- {
- printf("SECTOR 0 DATA:\r\n");
- for(sd_size=0;sd_size<512;sd_size++)
- printf("%x ",buf[sd_size]);//打印0扇区数据
- printf("\r\nDATA ENDED\r\n");
- }
- myfree(0,buf);//释放内存
-
- t++;
- sys_delay_ms(10);
- if(t==20)
- {
- t=0;
- }
- }
- }
- #endif //--------------USE_SDIO_SD-------------------------
|