📄 ch375_cmd.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 + -