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