⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch375_cmd.c

📁 基于U(375)盘及SD(SPI模式)卡集成文件系统(包括底层驱动)
💻 C
字号:
#include "ch375_cmd.h"
#include "Driver_WR.h"
UINT32 USBEventId;

extern void delay(void);

/* 向CH375命令端口写命令数据 */
extern void CH375_CMD_PORT_d_out( UINT8 d_out );

/* 向CH375数据端口写数据 */
extern void CH375_DAT_PORT_d_out( UINT8 d_out );

/* 从CH375命令端口读数据 */
extern UINT8 CH375_DAT_PORT_d_in();


/* 设置CH375为USB主机方式 */
UINT8 mCH375Init( )
{
    unsigned char i;
    unsigned char temp8;
	
    USBEventId = IRQ_EVT_EXTINT4;
	IRQ_disable(USBEventId);
    CH375_CMD_PORT_d_out(0x05);   //Reset All
    for(i=0;i<20;i++)
		delay();
	IRQ_clear(USBEventId);
	IRQ_enable(USBEventId);
    CH375_CMD_PORT_d_out(CMD_GET_IC_VER);  /* 获取芯片及固件版本 */
    i = CH375_DAT_PORT_d_in();  /* 版本 */
    if ( i < 0xA2 ) 
    {
    	printf("Error: cannot support this type of chip\n");
        return CH_ERROR;  /* 不支持该芯片 */
    }
  	temp8 = 0;
	CH375_CMD_PORT_d_out(0x06);      //测试工作状态
	
	CH375_DAT_PORT_d_out(0x55);      //主机方式: 继续执行USB存储器的读操作
	
	temp8 = CH375_DAT_PORT_d_in();
	
	if(temp8 == 0xAA)
	{
		CH375_CMD_PORT_d_out(0x15);   //设置为USB模式 
		CH375_DAT_PORT_d_out(0x06);   //自动检测USB设备连接
		
		return CH_OK;
	}
	printf("Error: CH375 init Error\n");
    return CH_ERROR;  /* CH375出错,例如芯片型号错或者处于串口方式或者不支持 */
}

/* 初始化磁盘 */
UINT8   mInitDisk( )
{   
    UINT8 Status,i,j=0;
	CH375_CMD_PORT_d_out(CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */
	
	Status = CH375_DAT_PORT_d_in();
	if ( Status == USB_INT_DISCONNECT ) 
	{
		printf("Error: init Disk Error, USB is unconnected\n");
        return CH_ERROR;                    /* USB设备断开 */
    }
	CH375_CMD_PORT_d_out(CMD_DISK_INIT) ;  /* 初始化USB存储器 */
	            /* 等待中断并获取状态 */
	Status = mWaitInterrupt();
	if ( Status != USB_INT_SUCCESS ) 
	{
		printf("Error: Init Disk Error!\n");
        return CH_ERROR;             
        
    }       /* 出现错误 */
	while(1)
    {   
        j++;
		CH375_CMD_PORT_d_out(CMD_DISK_SIZE) ;  /* 获取USB存储器的容量 */
	
		Status = mWaitInterrupt( );             /* 等待中断并获取状态 */
		if ( Status == USB_INT_SUCCESS ) 
          break;
		else 
       {
			
			CH375_CMD_PORT_d_out(CMD_DISK_R_SENSE) ; /* 获取USB存储器的容量 */
			Status = mWaitInterrupt( );                 /* 等待中断并获取状态 */
			if ( Status == USB_INT_SUCCESS )            /* 出现错误 */
				continue;
			else 
            {
				printf("Error: Init Disk Error!\n");
        		return CH_ERROR;             
        
    		}       /* 出现错误 */
        }
   }

    for(i=0;i!=5;i++)
    {
        CH375_CMD_PORT_d_out(CMD_DISK_READY) ;     /* 获取USB存储器的容量 */
        Status = mWaitInterrupt( );                 /* 等待中断并获取状态 */
        if ( Status == USB_INT_SUCCESS ) 
            return CH_OK;                           /* U盘已经成功初始化 */
	}
	return CH_ERROR;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -