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