147 lines
4.3 KiB
C
Raw Permalink Normal View History

2021-07-28 13:15:22 +08:00
#include "sys.h"
#include "delay.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 "malloc.h"
#include "w25qxx.h"
#include "sdmmc_sdcard.h"
//ALIENTEK <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STM32H750/F750<35><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ʵ<><CAB5>41
//SD<53><44> ʵ<><CAB5>
//<2F><><EFBFBD><EFBFBD>֧<EFBFBD>֣<EFBFBD>www.openedv.com
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ӡSD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
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); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
printf("Card RCA:%d\r\n",SDCardInfo.RCA); //<2F><><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>ַ
printf("Card Capacity:%d MB\r\n",(u32)(SDCardInfo.CardCapacity>>20)); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
printf("Card BlockSize:%d\r\n\r\n",SDCardInfo.CardBlockSize); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>С
}
//<2F><><EFBFBD><EFBFBD>SD<53><44><EFBFBD>Ķ<EFBFBD>ȡ
//<2F><>secaddr<64><72>ַ<EFBFBD><D6B7>ʼ,<2C><>ȡseccnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//secaddr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//seccnt:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void sd_test_read(u32 secaddr,u32 seccnt)
{
u32 i;
u8 *buf;
u8 sta=0;
buf=mymalloc(SRAMEX,seccnt*512); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>,<2C><>SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
sta=SD_ReadDisk(buf,secaddr,seccnt);//<2F><>ȡsecaddr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(sta==0)
{
printf("SECTOR %d DATA:\r\n",secaddr);
for(i=0;i<seccnt*512;i++)printf("%x ",buf[i]);//<2F><>ӡsecaddr<64><72>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("\r\nDATA ENDED\r\n");
}else printf("err:%d\r\n",sta);
myfree(SRAMEX,buf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
}
//<2F><><EFBFBD><EFBFBD>SD<53><44><EFBFBD><EFBFBD>д<EFBFBD><D0B4>(<28><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>дȫ<D0B4><C8AB>0XFF<46><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SD<53><44>.)
//<2F><>secaddr<64><72>ַ<EFBFBD><D6B7>ʼ<><D0B4>seccnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//secaddr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//seccnt:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void sd_test_write(u32 secaddr,u32 seccnt)
{
u32 i;
u8 *buf;
u8 sta=0;
buf=mymalloc(SRAMEX,seccnt*512); //<2F><>SDRAM<41><4D><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
for(i=0;i<seccnt*512;i++) //<2F><>ʼ<EFBFBD><CABC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>3<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>.
{
buf[i]=i*3;
}
sta=SD_WriteDisk(buf,secaddr,seccnt);//<2F><>secaddr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼд<CABC><D0B4>seccnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(sta==0)
{
printf("Write over!\r\n");
}else printf("err:%d\r\n",sta);
myfree(SRAMEX,buf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
}
int main(void)
{
u8 key;
u32 sd_size;
u8 t=0;
u8 *buf;
Cache_Enable(); //<2F><><EFBFBD><EFBFBD>L1-Cache
HAL_Init(); //<2F><>ʼ<EFBFBD><CABC>HAL<41><4C>
Stm32_Clock_Init(160,5,2,4); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,400Mhz
QSPI_Enable_Memmapmode(); //QSPI<50>ڴ<EFBFBD>ӳ<EFBFBD><D3B3>ģʽ
delay_init(400); //<2F><>ʱ<EFBFBD><CAB1>ʼ<EFBFBD><CABC>
uart_init(115200); //<2F><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
usmart_dev.init(200); //<2F><>ʼ<EFBFBD><CABC>USMART
LED_Init(); //<2F><>ʼ<EFBFBD><CABC>LED
KEY_Init(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SDRAM_Init(); //<2F><>ʼ<EFBFBD><CABC>SDRAM
LCD_Init(); //<2F><>ʼ<EFBFBD><CABC>LCD
my_mem_init(SRAMIN); //<2F><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2>ڴ<EFBFBD><DAB4><EFBFBD>(AXI)
my_mem_init(SRAMEX); //<2F><>ʼ<EFBFBD><CABC><EFBFBD>ⲿ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>(SDRAM)
my_mem_init(SRAM12); //<2F><>ʼ<EFBFBD><CABC>SRAM12<31>ڴ<EFBFBD><DAB4><EFBFBD>(SRAM1+SRAM2)
my_mem_init(SRAM4); //<2F><>ʼ<EFBFBD><CABC>SRAM4<4D>ڴ<EFBFBD><DAB4><EFBFBD>(SRAM4)
my_mem_init(SRAMDTCM); //<2F><>ʼ<EFBFBD><CABC>DTCM<43>ڴ<EFBFBD><DAB4><EFBFBD>(DTCM)
my_mem_init(SRAMITCM); //<2F><>ʼ<EFBFBD><CABC>ITCM<43>ڴ<EFBFBD><DAB4><EFBFBD>(ITCM)
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"POLARIS STM32");
LCD_ShowString(30,70,200,16,16,"SD CARD TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2019/5/10");
LCD_ShowString(30,130,200,16,16,"KEY0:Read Sector 0");
while(SD_Init())//<2F><><EFBFBD><EFBFBD><E2B2BB>SD<53><44>
{
LCD_ShowString(30,150,200,16,16,"SD Card Error!");
delay_ms(500);
LCD_ShowString(30,150,200,16,16,"Please Check! ");
delay_ms(500);
LED0_Toggle;//DS0<53><30>˸
}
show_sdcard_info(); //<2F><>ӡSD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
POINT_COLOR=BLUE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
//<2F><><EFBFBD><EFBFBD>SD<53><44><EFBFBD>ɹ<EFBFBD>
LCD_ShowString(30,150,200,16,16,"SD Card OK ");
LCD_ShowString(30,170,200,16,16,"SD Card Size: MB");
LCD_ShowNum(30+13*8,170,SDCardInfo.CardCapacity>>20,5,16);//<2F><>ʾSD<53><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)//KEY0<59><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
buf=mymalloc(0,512); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
key=SD_ReadDisk(buf,0,1);
if(key==0) //<2F><>ȡ0<C8A1><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
LCD_ShowString(30,190,200,16,16,"USART1 Sending Data...");
printf("SECTOR 0 DATA:\r\n");
for(sd_size=0;sd_size<512;sd_size++)printf("%x ",buf[sd_size]);//<2F><>ӡ0<D3A1><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("\r\nDATA ENDED\r\n");
LCD_ShowString(30,190,200,16,16,"USART1 Send Data Over!");
}else printf("err:%d\r\n",key);
myfree(0,buf);//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
}
t++;
delay_ms(10);
if(t==20)
{
LED0_Toggle;//DS0<53><30>˸
t=0;
}
}
}