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

📄 scsi.c

📁 usb开发(基于D12)。。湖南大学计算机与通信学院同学毕业设计及源代码!!好的很啊
💻 C
📖 第 1 页 / 共 2 页
字号:
/*++

Module Name:

         Scsi.c

Abstract:

         Header file related to D12 module

Environment:

        ICCAVR 6.29

Revision History:

        04/23/2004      chenchi   created

--*/
/******************************************************************/

#include <macros.h>
#include "d12.h"
#include "scsi.h"
#include "scsi_data.h"
#include "nflash32.h"

unsigned char BulkPhase = 0;
unsigned char BulkStausPhase;
unsigned int dCBWDaTrLen;
unsigned char * WritePageBuff = "";
unsigned int WritePageBuffLen = 0;

CSW_STRUCT  Usb_Csw;
CBW_STRUCT  Usb_Cbw;

/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:处理PC发送的批量传输包
**函数输入参数及说明:接收数据长度

**函数返回值:无
**在本函数以外定义的变量:
**调用的函数说明:无

**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void Bulk_Out_Packet(unsigned char len){
	unsigned char i,j,*p;
	unsigned char Buff[64];
	if(BulkPhase == CommandPhase){
		j = D12_DATA;
		csram;
		p = XmtBuff.b;
		*(p++) = j;
		for(i=0;i<len;i++)
		{
	  		j = D12_DATA;
	   		csram;
	   		asm("st Z+,%j");
		}
		Usb_BoCommand();
	}
	else if(BulkPhase == OutDataPhase){
		j = D12_DATA;
		csram;
		p = Buff;
		*(p++) = j;
		for(i=0;i<len;i++)
		{
	  		j = D12_DATA;
	   		csram;
	   		asm("st Z+,%j");
		}
		for(i=0;i<len;i++){
			WritePageBuff[WritePageBuffLen+i] = Buff[i];
		}
		WritePageBuffLen += len;
		if(WritePageBuffLen == 512){
			Usb_BoBulkInData();
			WritePageBuffLen = 0;
		}
	}
	D12_COMMAND = 0x04;//选择端点(指针指向0位置)
	cwait;
	D12_COMMAND = 0xf1;
	cwait;
	D12_COMMAND = 0xf2;//清端点缓冲区
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:SCSI命令处理
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:
**调用的函数说明:无

**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void Usb_BoCommand(void){	
	XmtBuff.p_p=1;
	dCBWDaTrLen=((XmtBuff.b[11]<<8)+(XmtBuff.b[10]))<<15;
        dCBWDaTrLen=(dCBWDaTrLen<<1)+((XmtBuff.b[9]<<8)+(XmtBuff.b[8])) ;
	Usb_Cbw.CBWCB[0] = XmtBuff.b[15];
	switch(Usb_Cbw.CBWCB[0]){
		case 0x00:
			SCSICMD_TestUnitReady();
			BulkStausPhase = InCSWPhase;
			break;
		case 0x03:
			SCSICMD_RequestSense();
               		BulkStausPhase=InCSWPhase;
               		break;
		case 0x12:
			SCSICMD_Inquiry();
			BulkStausPhase = InCSWPhase;
			break;
		case 0x1a:
			SCSICMD_ModeSense06();
               		BulkStausPhase=InCSWPhase;
               		break;
		case 0x1e:
			SCSICMD_PreventAllowMediumRemoval();
               		BulkStausPhase=InCSWPhase;
               		break;
		case 0x23:
			SCSICMD_ReadFormatCapacities();
			BulkStausPhase = InCSWPhase;
			break;
		case 0x25:
			SCSICMD_ReadCapacity();
               		BulkStausPhase=InCSWPhase;
              		break;
		case 0x28:
			SCSICMD_Read10();
               		BulkStausPhase=InCSWPhase;
               		break;
		case 0x2a:
			SCSICMD_Write10();
               		BulkPhase =OutDataPhase;
               		break;
		case 0x2f:
			SCSICMD_Verify10();
               		BulkStausPhase=InCSWPhase;
               		break;
		case 0x5a:
			SCSICMD_ModeSense10();
               		BulkStausPhase=InCSWPhase;
               		break;
		default:
			BulkStausPhase=InCSWPhase;
			break;
	}
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:PC输入数据处理
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:
**调用的函数说明:无

**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void Usb_BoBulkInData(void){
	flashWrite(WritePageBuff);
	if(WriteResidueVal == 0){
		BulkPhase = CommandPhase;
	}
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:回应批量传输包
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:
**调用的函数说明:无

**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void Bulk_In_Packet(void){
	if(XmtBuff.wrLength != 0)
		BULK_submit();
	else if(ReadResidueVal != 0)
		flashRead();
	else if(BulkStausPhase == InCSWPhase){
		XmtBuff.p_p=0;
		XmtBuff.p = (unsigned char *)&Usb_Csw;
		XmtBuff.wrLength = 13;
		BULK_submit();
	}
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:SCSI命令
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:
**调用的函数说明:无

**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void SCSICMD_Inquiry(void){
	Usb_Set_Csw();
	Usb_Csw.dCSWDataResidue[1] = 0;
	Usb_Csw.dCSWDataResidue[2] = 0;
	Usb_Csw.dCSWDataResidue[3] = 0;
	Usb_Csw.dCSWDataResidue[4] = 0;
	XmtBuff.pp = SCSI_INQUIRY;
	XmtBuff.wrLength = 36;
	BULK_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

**函数功能:创建CSW数据块
**函数输入参数及说明:无

**函数返回值:无
**在本函数以外定义的变量:
**调用的函数说明:无

**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void Usb_Set_Csw(void){
	Usb_Csw.dCSWSignature[0] = 0x55;
	Usb_Csw.dCSWSignature[1] = 0x53;
	Usb_Csw.dCSWSignature[2] = 0x42;
	Usb_Csw.dCSWSignature[3] = 0x53;
	Usb_Csw.dCSWTag[0] = XmtBuff.b[4];
	Usb_Csw.dCSWTag[1] = XmtBuff.b[5];
	Usb_Csw.dCSWTag[2] = XmtBuff.b[6];
	Usb_Csw.dCSWTag[3] = XmtBuff.b[7];
	Usb_Csw.bCSWStatus = 0;
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院

**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ

⌨️ 快捷键说明

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