|
單片機(jī)源程序如下:- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "ch375.h"
- #include "led.h"
- #define ADDR 100//6600000//100 //要操作的U盤(pán)的扇區(qū)地址 物理扇區(qū)地址,用winhex打開(kāi)物理磁盤(pán)可查看扇區(qū)地址數(shù)據(jù)
- u8 flag1=0;
- u8 Write_pbuf[512]; //數(shù)據(jù)緩沖區(qū)
- u8 Read_pbuf[2048];
- u8 status=0xff; //初始化狀態(tài)標(biāo)志
- //測(cè)試內(nèi)容:在優(yōu)盤(pán)或TF卡內(nèi)ADDR地址開(kāi)始,連續(xù)寫(xiě)4個(gè)扇區(qū)數(shù)據(jù),再?gòu)腁DDR處連續(xù)讀4個(gè)扇區(qū)數(shù)據(jù)進(jìn)行匹配,驗(yàn)證數(shù)據(jù)是否正確
- //可獲取優(yōu)盤(pán)或TF卡容量
- //注意:要先上電,再插入優(yōu)盤(pán)
- int main(void)
- {
- u16 i=0;
- delay_init(); //延時(shí)函數(shù)初始化
- LED_Init();
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
- uart_init(9600); //串口初始化為9600
- printf("串口設(shè)置完畢\r\n");
- delay_ms(100); //內(nèi)部電源上電的復(fù)位時(shí)間最大為40ms,這里延時(shí)一段時(shí)間防止出現(xiàn)CH375初始化失敗
- CH375_GPIO_Init(); //初始化CH375B控制端口和數(shù)據(jù)端口 WR、RD、CS、A0、INT和P0~P7
- CH375_WR_CMD(CMD_GET_IC_VER); // 獲取芯片及固件版本
- status=CH375_RD_DAT(); // 版本
- printf("芯片版本為:%#x\r\n",status);
- status=CH375Init(); //初始化CH375芯片,成功返回0,失敗返回1
- printf("CH375芯片初始化值:%#x\r\n",status);
- CH375_WR_CMD(CMD_DISK_MAX_LUN); // 獲取USB存儲(chǔ)設(shè)備的最大邏輯單元號(hào)
- status=CH375_RD_DAT(); // 最大邏輯單元號(hào)
- printf("USB存儲(chǔ)設(shè)備的最大邏輯單元號(hào)為:%#x\r\n",status);
- //status=InitDisk(); //初始化U盤(pán),初始化成功返回0,不成功返回錯(cuò)誤代碼 優(yōu)盤(pán)要上電后重新插拔一次再?gòu)?fù)位才能成功。SD卡不用
- //注意:要先上電,再插入優(yōu)盤(pán)
- status=CH375_InitDisk(); //成功 金士頓8G USB2.0優(yōu)盤(pán) 東芝16G USB3.0優(yōu)盤(pán)上電后插入初始化成功,,SD卡可不用插拔
- printf("U盤(pán)初始化值:%#x\r\n",status);
- status=Get_CH375DiskSize();//打印磁盤(pán)容量,單位MByte
- for(i=0;i<512;i++)
- Write_pbuf[i]=i;//0x55;// //向數(shù)據(jù)緩沖區(qū)中寫(xiě)入0~255 0~255,共512個(gè)字節(jié)
- printf("向緩沖區(qū)中裝入完畢\r\n");
- //CH375WriteSector(ADDR+2,Write_pbuf);//將數(shù)據(jù)緩沖區(qū)中的512個(gè)字節(jié)的數(shù)據(jù)寫(xiě)入U(xiǎn)盤(pán)的第ADDR扇區(qū)中 單個(gè)扇區(qū)寫(xiě)數(shù)據(jù)
- CH375_WriteDisk(Write_pbuf,ADDR,4); //連續(xù)寫(xiě)多個(gè)扇區(qū)數(shù)據(jù)
- printf("寫(xiě) U盤(pán)扇區(qū)完畢\r\n");
- for(i=0;i<2048;i++) //清空接收數(shù)據(jù)緩沖區(qū)
- {
- Read_pbuf[i]=0;
- }
- printf("清空接收緩沖區(qū)完畢\r\n");
- //CH375ReadSector(ADDR+1,Read_pbuf);//從U盤(pán)的第ADDR扇區(qū)中讀取512個(gè)字節(jié)的數(shù)據(jù)到數(shù)據(jù)緩沖區(qū) 單個(gè)扇區(qū)讀數(shù)據(jù)
- CH375_ReadDisk(Read_pbuf,ADDR,4); //連續(xù)讀多個(gè)扇區(qū)數(shù)據(jù)
- //查看讀取到的幾個(gè)扇區(qū)數(shù)據(jù)
- for(i=0;i<10;i++)
- {
- printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
- }
- for(i=520;i<530;i++)
- {
- printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
- }
- for(i=1030;i<1040;i++)
- {
- printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
- }
- for(i=1600;i<1610;i++)
- {
- printf("讀取到的扇區(qū)數(shù)據(jù)為:i=%d Read_pbuf[i]=%#x\r\n",i,Read_pbuf[i]);
- }
- printf("讀 U盤(pán)扇區(qū)完畢\r\n");
- for(i=0;i<512;i++)
- {
- if(Write_pbuf[i]!=Read_pbuf[i]) //對(duì)讀出的數(shù)據(jù)進(jìn)行匹配,如果不吻合則flag=1,否則flag=0
- {
- flag1=1; //數(shù)據(jù)不吻合,flag1=1;
- break;
- }
- }
- printf("匹配完畢\r\n");
- for(i=0;i<512;i++) //清空發(fā)送數(shù)據(jù)緩沖區(qū)
- {
- Write_pbuf[i]=0;
- //printf("扇區(qū)數(shù)據(jù)為:%#x\n",Write_pbuf[i]);
- }
-
- if(flag1)
- {
- LED=1; //發(fā)光二極管滅
- printf("U盤(pán)扇區(qū)讀寫(xiě)測(cè)試失!\r\n"); //數(shù)據(jù)不吻合
- }
- else
- {
- LED=0; //發(fā)光二極管點(diǎn)亮
- printf("U盤(pán)扇區(qū)讀寫(xiě)測(cè)試成功!\r\n"); //數(shù)據(jù)吻合
- }
- printf("------------------------------------\r\n");
- while(1){
- }
- }
復(fù)制代碼
Keil代碼下載:
Keil代碼.7z
(216.18 KB, 下載次數(shù): 11)
2022-11-13 17:04 上傳
點(diǎn)擊文件名下載附件
stm32f103驅(qū)動(dòng)ch375b可讀寫(xiě)優(yōu)盤(pán)扇區(qū),可測(cè)優(yōu)盤(pán)容量 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|