原子哥的USB读卡器实验程序,如何才能不读写flash呢?

2019-08-22 14:13发布

倒腾了一上午,还是没办法只读写SD卡,始终有另外一个盘符出现。

求助  !!!!


例子如下

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"                           
#include "lcd.h"  
#include "malloc.h"
#include "sdio_sdcard.h"  
#include "w25qxx.h"   
#include "mass_mal.h"
#include "usb_lib.h"
#include "hw_config.h"
#include "usb_pwr.h"
#include "memory.h"            
#include "usb_bot.h"

/************************************************
ALIENTEK精英STM32开发板实验44
USB读卡器 实验  
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/


extern u8 Max_Lun;        //支持的磁盘个数,0表示1个,1表示2个.
int main(void)
{         
        u8 offline_cnt=0;
        u8 tct=0;
        u8 USB_STA;
        u8 Divece_STA;
                    

        delay_init();                     //延时函数初始化         
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                                          //初始化与LED连接的硬件接口
        LCD_Init();                                           //初始化LCD   
        W25QXX_Init();                                //初始化W25Q128
         my_mem_init(SRAMIN);                //初始化内部内存池
        
         POINT_COLOR=RED;//设置字体为红 {MOD}           
        LCD_ShowString(30,50,200,16,16,"ELITE STM32F103 ^_^");        
        LCD_ShowString(30,70,200,16,16,"USB Card Reader TEST");        
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2015/1/29");        
         W25QXX_Init();
        if(SD_Init())
        {
                Max_Lun=0;                                                                                        //SD卡错误,则仅只有一个磁盘.
                LCD_ShowString(30,130,200,16,16,"SD Card Error!");        //检测SD卡错误
        }else //SD 卡正常
        {                                                                                                                             
                LCD_ShowString(30,130,200,16,16,"SD Card Size:     MB");
             Mass_Memory_Size[1]=SDCardInfo.CardCapacity;                //得到SD卡容量(字节),当SD卡容量超过4G的时候,需要用到两个u32来表示
            Mass_Block_Size[1] =512;                                                        //因为我们在Init里面设置了SD卡的操作字节为512个,所以这里一定是512个字节.
            Mass_Block_Count[1]=Mass_Memory_Size[1]/Mass_Block_Size[1];
                 LCD_ShowNum(134,130,Mass_Memory_Size[1]>>20,5,16);        //显示SD卡容量
         }
        if(W25QXX_TYPE!=W25Q128)LCD_ShowString(30,130,200,16,16,"W25Q128 Error!");        //检测SD卡错误
        else //SPI FLASH 正常
        {                                                                                                                             
                    Mass_Memory_Size[0]=1024*1024*12;        //前12M字节
            Mass_Block_Size[0] =512;                        //设置SPI FLASH的操作扇区大小为512
            Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
                LCD_ShowString(30,150,200,16,16,"SPI FLASH Size:12MB");         
        }
        delay_ms(1800);
        USB_Port_Set(0);         //USB先断开
        delay_ms(700);
        USB_Port_Set(1);        //USB再次连接
        LCD_ShowString(30,170,200,16,16,"USB Connecting...");        //提示USB开始连接         
          Data_Buffer=mymalloc(SRAMIN,BULK_MAX_PACKET_SIZE*2*4);        //为USB数据缓存区申请内存
        Bulk_Data_Buff=mymalloc(SRAMIN,BULK_MAX_PACKET_SIZE);        //申请内存
         //USB配置
         USB_Interrupts_Config();   
         Set_USBClock();   
         USB_Init();            
        delay_ms(1800);                       
        while(1)
        {        
                delay_ms(1);                                 
                if(USB_STA!=USB_STATUS_REG)//状态改变了
                {                                                            
                        LCD_Fill(30,190,240,190+16,WHITE);//清除显示                                    
                        if(USB_STATUS_REG&0x01)//正在写                  
                        {
                                LCD_ShowString(30,190,200,16,16,"USB Writing...");//提示USB正在写入数据         
                        }
                        if(USB_STATUS_REG&0x02)//正在读
                        {
                                LCD_ShowString(30,190,200,16,16,"USB Reading...");//提示USB正在读出数据                  
                        }                                                                                          
                        if(USB_STATUS_REG&0x04)LCD_ShowString(30,210,200,16,16,"USB Write Err ");//提示写入错误
                        else LCD_Fill(30,210,240,210+16,WHITE);//清除显示         
                        if(USB_STATUS_REG&0x08)LCD_ShowString(30,230,200,16,16,"USB Read  Err ");//提示读出错误
                        else LCD_Fill(30,230,240,230+16,WHITE);//清除显示   
                        USB_STA=USB_STATUS_REG;//记录最后的状态
                }
                if(Divece_STA!=bDeviceState)
                {
                        if(bDeviceState==CONFIGURED)LCD_ShowString(30,170,200,16,16,"USB Connected    ");//提示USB连接已经建立
                        else LCD_ShowString(30,170,200,16,16,"USB DisConnected ");//提示USB被拔出了
                        Divece_STA=bDeviceState;
                }
                tct++;
                if(tct==200)
                {
                        tct=0;
                        LED0=!LED0;//提示系统在运行
                        if(USB_STATUS_REG&0x10)
                        {
                                offline_cnt=0;//USB连接了,则清除offline计数器
                                bDeviceState=CONFIGURED;
                        }else//没有得到轮询
                        {
                                offline_cnt++;  
                                if(offline_cnt>10)bDeviceState=UNCONNECTED;//2s内没收到在线标记,代表USB被拔出了
                        }
                        USB_STATUS_REG=0;
                }
        };
}















友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。