/*++
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
**函数功能:SCSI命令
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:
**调用的函数说明:无
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void SCSICMD_ReadFormatCapacities(void){
Usb_Set_Csw();
Usb_Csw.dCSWDataResidue[0]=(unsigned char)(dCBWDaTrLen-0x0c);
Usb_Csw.dCSWDataResidue[1]=0;
Usb_Csw.dCSWDataResidue[2]=0;
Usb_Csw.dCSWDataResidue[3]=0;
XmtBuff.pp = SCSIDATA_ReadFormatCapacities;
XmtBuff.wrLength = 12;
BULK_submit();
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院
**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ
**函数功能:SCSI命令
**函数输入参数及说明:无
**函数
没有合适的资源?快使用搜索试试~ 我知道了~
pdiusbd12.rar_PDIUSBD12 pic
共63个文件
bak:10个
h:6个
lis:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 114 浏览量
2022-09-14
14:50:41
上传
评论
收藏 153KB RAR 举报
温馨提示
usb的c语言实现的源码,基于PDIUSBD12芯片,有一定的参考价值
资源详情
资源评论
资源推荐
收起资源包目录
pdiusbd12.rar (63个子文件)
源代码
D12Setup.s 25KB
Avr_Usb_Disk.hex 18KB
Avr_Usb_Disk.IMD 368B
D12ISR.c.bak 5KB
D12Setup.h.bak 3KB
D12.h.bak 1KB
io8515v.h 8KB
NFlash32.o 15KB
MainLoop.lis 7KB
AVR_USB_DISK.SRC 139B
NFlash32.c.bak 10KB
Avr_Usb_Disk.mak 1KB
Scsi.dp2 109B
Avr_Usb_Disk.PS 27KB
NFlash32.h 1KB
D12Setup.lis 58KB
D12Setup.dp2 70B
Avr_Usb_Disk.WK3 25KB
NFlash32.c 10KB
D12ISR.c 5KB
MainLoop.o 1KB
Avr_Usb_Disk.lst 140KB
D12ISR.s 12KB
Avr_Usb_Disk.IAD 368B
NFlash32.s 27KB
MainLoop.c.bak 2KB
Scsi.c 14KB
NFlash32.h.bak 1KB
D12.h 1KB
D12Setup.o 13KB
Avr_Usb_Disk.lk 51B
D12ISR.dp2 47B
Avr_Usb_Disk.IMB 4KB
NFlash32.lis 62KB
Avr_Usb_Disk.PO 776B
Avr_Usb_Disk.dbg 17KB
MainLoop.c 2KB
Avr_Usb_Disk.PR 4KB
Scsi.h.bak 2KB
D12ISR._c 5KB
Scsi.h 2KB
MainLoop.s 3KB
D12ISR.lis 30KB
NFlash32._c 6KB
MainLoop.dp2 73B
Avr_Usb_Disk.cof 23KB
Scsi.lis 71KB
Scsi_Data.h.bak 2KB
Avr_Usb_Disk.mp 6KB
D12Setup.h 3KB
Scsi.c.bak 10KB
NFlash32.dp2 87B
Scsi_Data.h 2KB
Scsi._c 14KB
D12Setup.c 11KB
Scsi.s 33KB
Avr_Usb_Disk.PRI 20KB
D12Setup.c.bak 11KB
D12ISR.o 7KB
Scsi.o 17KB
Avr_Usb_Disk.IAB 4KB
Avr_Usb_Disk.prj 868B
Avr_Usb_Disk.PFI 40B
共 63 条
- 1
刘良运
- 粉丝: 67
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0