CH376創(chuàng)建TXT文件失敗

最近正在學(xué)習(xí)CH376S操作U盤,我試著在U盤的根目錄下新建一個(gè)TXT文件并在文件里寫入一些字符串。程序打印出來的信息顯示文件創(chuàng)建成功,字符串寫入也成功,可是插到電腦上打開優(yōu)盤發(fā)現(xiàn)創(chuàng)建的這些文件的文件名里面含有特殊的字符,而且文件打不開,如下圖所示

27.jpg

11.jpg

程序見二樓。求大神指點(diǎn)

/*

?* main.c

?*

?* ?Created on: 2010-10-8

?* ? ? ?Author: Administrator

?*/


#include "alt_types.h"

#include "altera_avalon_pio_regs.h"

#include "sys/alt_irq.h"

#include "system.h"

#include

#include


//CH375命令定義

#define GET_IC_VER0x01//獲取CH376芯片以及固件版本

#define SET_BAUDRATE 0x02//設(shè)置串口通訊波特率

#define ENTER_SLEEP0x03//進(jìn)入低功耗睡眠掛起狀態(tài)

#define RESET_ALL 0x05//執(zhí)行硬件復(fù)位

#define CHECK_EXIST0x06//測試工作狀態(tài),按位取反

//#define GET_MAX_LUN0x0a//獲取USB存儲(chǔ)設(shè)備最大邏輯單元號(hào)

//#define SET_DISK_LUN 0x0b//設(shè)置USB存儲(chǔ)設(shè)備的當(dāng)前邏輯單元號(hào)

//#define SET_PKT_P_SEC 0x0b//設(shè)置USB存儲(chǔ)設(shè)備的每扇區(qū)數(shù)據(jù)包總數(shù)

#define SET_USB_MODE 0x15//設(shè)置USB工作模式命令

#define TEST_CONNECT 0x16//檢查USB設(shè)備的連接狀態(tài)

#define ABORT_NAK 0x17//放棄當(dāng)前NAK的重試

#define GET_STATUS 0x22//獲取中斷狀態(tài)并取消請(qǐng)求

#define RD_USB_DATA 0x27//從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊

#define WR_USB_DATA7 0x2c//向USB主機(jī)端點(diǎn)的輸出緩沖區(qū)寫入數(shù)據(jù)塊

#define DISK_INIT 0x51//初始化USB存儲(chǔ)設(shè)備

#define DISK_SIZE 0x53//獲取USB存儲(chǔ)設(shè)備的容量

#define DISK_READ 0x54 //從USB存儲(chǔ)設(shè)備讀數(shù)據(jù)塊

#define DISK_RD_G0 0x55//繼續(xù)USB存儲(chǔ)設(shè)備的讀操作

#define DISK_WRITE 0x56//向USB存儲(chǔ)設(shè)備寫數(shù)據(jù)塊

#define DISK_WR_GO 0x57//繼續(xù)USB存儲(chǔ)設(shè)備的寫操作

//#define DISK_INQUIRY 0x58//查詢USB存儲(chǔ)設(shè)備的特性

#define DISK_READY 0x59//檢查USB存儲(chǔ)設(shè)備是否就緒

//#define DISK_R_SENSE 0x5a//檢查USB存儲(chǔ)設(shè)備的錯(cuò)誤



#define SET_FILE_NAME 0x2f

#define FILE_CREATE 0x34

#define FILE_CLOSE 0x36

#define BYTE_WRITE 0x3c

#define BYTE_WR_GO 0x3d

#define WR_REQ_DATA 0x2d






//CH375中斷狀態(tài)定義

#define USB_INT_SUCCESS 0x14//USB事務(wù)或者傳輸操作成功

#define USB_INT_CONNECT 0x15 //檢查到USB設(shè)備連接事件

#define USB_INT_DISCONNECT 0x16 //檢查到USB設(shè)備斷開事件

#define USB_INT_BUF_OVER 0x17//USB傳輸?shù)臄?shù)據(jù)有誤或者數(shù)據(jù)太多緩沖區(qū)溢出

#define USB_INT_DISK_READ 0x1d//USB存儲(chǔ)設(shè)備讀操作,請(qǐng)求數(shù)據(jù)讀出

#define USB_INT_DISK_WRITE 0x1e//USB存儲(chǔ)設(shè)備寫操作,請(qǐng)求數(shù)據(jù)寫入

#define USB_INT_DISK_ERR 0x1f//USB 存儲(chǔ)設(shè)備操作失敗



//函數(shù)申明

alt_u8 init_usb(void);//CH376初始化并等待U盤插入

alt_u8 init_umem(void);//U盤存儲(chǔ)器初始化

alt_u8 umem_sec_read(alt_u32 lab);//讀取U盤一個(gè)扇區(qū)

alt_u8 umem_sec_write(alt_u32 lab);//U盤一個(gè)扇區(qū)寫入

void write_command_to_usb(alt_u8 command);//寫命令到CH376

void write_data_to_usb(alt_u8 data);//寫數(shù)據(jù)到CH376

alt_u8 read_data_from_usb(void);//從CH376讀出數(shù)據(jù)

void delayus(alt_u32 cnt);//短延時(shí)函數(shù)


alt_u8 ch375_intflag;//CH375中斷標(biāo)志位,1表示產(chǎn)生中斷

alt_u8 ch375_status;//CH375中斷狀態(tài)數(shù)據(jù)

alt_u8 URD_BUFFER[512];//U盤數(shù)據(jù)讀取緩沖(512B)

alt_u8 UWR_BUFFER[512];//U盤數(shù)據(jù)寫入緩沖(512B)



//////////////////////////////////////////////////////////////////////

//函數(shù)名:handle_usbirq_interrupts

//功 ? ? 能:CH375中斷函數(shù)

//輸 ? ? 入:無

//返 ? ? 回:無

//////////////////////////////////////////////////////////////////////

static void handle_usbirq_interrupts(void)

{

? ? //獲取中斷狀態(tài)并取消請(qǐng)求

? ? write_command_to_usb(GET_STATUS);//發(fā)送命令

? ? ch375_status = read_data_from_usb();//讀取當(dāng)前狀態(tài)

? ? ch375_intflag = 1;//中斷標(biāo)志位置位

}


//////////////////////////////////////////////////////////////////////

//函數(shù)名:main

//功 ? ? 能:主函數(shù)

//輸 ? ? 入:無

//返 ? ? 回:alt_u8

//////////////////////////////////////////////////////////////////////

alt_u8 main()

{

alt_u16 i;

init_usb();//CH375初始化并等待U盤插入

init_umem();//U盤存儲(chǔ)器初始化


while(1)

{

printf("創(chuàng)建一個(gè)TXT文件... ...\n");

write_command_to_usb(SET_FILE_NAME);


delayus(1000);


send_string_to_usb("/HOW.TXT\0",9);


delayus(1000);


write_command_to_usb(FILE_CREATE);

while(ch375_intflag != 1);

ch375_intflag = 0;

if(ch375_status == USB_INT_SUCCESS)

{

printf("成功\n");

}

else

{

printf("失敗--%d\n",ch375_status);

while(1);

}

write_command_to_usb(BYTE_WRITE);

write_data_to_usb(28);

write_data_to_usb(0);

while(ch375_intflag != 1);

ch375_intflag = 0;

if(ch375_status == USB_INT_DISK_WRITE)

? ?{

? ?write_command_to_usb(WR_REQ_DATA);


? ?delayus(1000);


? ?printf("需要寫入txt的數(shù)據(jù)量為: %d\n",read_data_from_usb());

}

else

{

? ?printf("失敗--%d\n",ch375_status);

while(1);

}

send_string_to_usb("Hello,USB!",10);

send_string_to_usb("U盤TXT文本創(chuàng)建成功",18);

write_command_to_usb(BYTE_WR_GO);

while(ch375_intflag != 1);

ch375_intflag = 0;

if(ch375_status == USB_INT_SUCCESS)

{

printf("txt文本數(shù)據(jù)寫入成功\n");

}

else

{

printf("第二次TXT文本數(shù)據(jù)寫入失敗--%d\n",ch375_status);

while(1);

}

write_command_to_usb(FILE_CLOSE);

write_data_to_usb(1);

printf("TXT文本創(chuàng)建并寫入完成!\n");


while(1);

}






//umem_sec_read(0);//讀取U盤第0扇區(qū)


/*

umem_sec_read(1000000);//讀取U盤第1000000扇區(qū)


for(i=0;i<512;i++)

{

UWR_BUFFER[i] = i;

}

umem_sec_write(1000000);//U盤第1000000扇區(qū)寫入

umem_sec_read(1000000);//讀取U盤第1000000扇區(qū)

*/




return 0;

}




void send_string_to_usb(alt_8 *str,alt_u8 str_len)

{

alt_u8 i;

//向USB主機(jī)端點(diǎn)的輸出緩沖區(qū)寫入數(shù)據(jù)塊,WR_USB_DATA7命令

write_command_to_usb(WR_USB_DATA7);

/*該命令向USB主機(jī)端點(diǎn)的輸出緩沖區(qū)或者USB 端點(diǎn)2的上傳緩沖區(qū)寫入數(shù)據(jù)塊。首先寫入的輸入

數(shù)據(jù)是數(shù)據(jù)塊長度,也就是后續(xù)數(shù)據(jù)流的字節(jié)數(shù)。數(shù)據(jù)塊長度的有效值是0 至64,如果長度不為0,

則單片機(jī)必須將后續(xù)數(shù)據(jù)逐個(gè)寫入CH375。*/


delayus(1000);


//寫入數(shù)據(jù)塊長度數(shù)據(jù)

write_data_to_usb(str_len);

//寫入固定長度數(shù)據(jù)字節(jié)

for(i=0;i

{

//寫入數(shù)據(jù)

write_data_to_usb(str[i]);

}

}







//////////////////////////////////////////////////////////////////////

//函數(shù)名:init_usb

//功 ? ? 能:CH376初始化并等待U盤插入

//輸 ? ? 入:無

//返 ? ? 回:alt_u8 1:成功,0--失敗

//////////////////////////////////////////////////////////////////////

alt_u8 init_usb(void)

{

//alt_u8 tmp;

alt_u8 temp = 0;//臨時(shí)變量


//初始化全局變量

ch375_intflag = 0;//清除CH375中斷標(biāo)志位

ch375_status = 0;//清除 CH375中斷寄存器


//初始化CH376控制端口

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_RD_BASE,1);

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_WR_BASE,1);

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_A0_BASE,1);

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_CS_BASE,1);


//使能CH376中斷信號(hào)

IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_USB_INT_BASE,1);

IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_USB_INT_BASE,0);

alt_irq_register(PIO_USB_INT_IRQ,PIO_USB_INT_BASE,handle_usbirq_interrupts);//注冊(cè)中斷函數(shù)


//設(shè)置USB工作模式

write_command_to_usb(SET_USB_MODE);//送命令


delayus(200);


write_data_to_usb(0x06);//切換到已啟用的USB設(shè)備方式,外部固件模式


delayus(200);

/*

模式代碼為04H時(shí)切換到未啟用的USB主機(jī)方式;

模式代碼為05H時(shí)切換到已啟用的USB主機(jī)方式,不產(chǎn)生SOF包;

模式代碼為06H時(shí)切換到已啟用的USB主機(jī)方式,自動(dòng)產(chǎn)生SOF包;

模式代碼為07H時(shí)切換到已啟用的USB主機(jī)方式,復(fù)位USB總線;

*/


//CH375芯片讀寫測試

printf("CH375芯片讀寫測試……\n");


//讀取并打印固件版本號(hào)

write_command_to_usb(GET_IC_VER);//發(fā)送命令

temp = read_data_from_usb()-0x40;//讀取版本信息

printf("固件版本號(hào)為:0x%x\n",temp);//打印版本信息


//測試工作狀態(tài),按位取反

write_command_to_usb(CHECK_EXIST);//發(fā)送命令

write_data_to_usb(0xaa);//寫入數(shù)據(jù)0xaa

temp = read_data_from_usb();//讀取寫入數(shù)據(jù)取反結(jié)果,即0xaa取反應(yīng)為0x55

if(temp == 0x55) printf("測試工作狀態(tài):成功\n");//打印測試結(jié)果

else

{

printf("測試工作狀態(tài):失敗\n");

return(0);

}

printf("等待USB設(shè)備連接事件……\n");//打印事件

do{//查詢當(dāng)前USB設(shè)備的連接狀態(tài)

write_command_to_usb(TEST_CONNECT);

temp = read_data_from_usb();//讀取USB設(shè)備的連接狀態(tài)

delayus(600000);

} while(temp != 0x15);//檢測到USB設(shè)備連接事件

printf("檢測到USB設(shè)備連接事件:檢查到U盤插入\n");//打印事件


return(1);

}


//////////////////////////////////////////////////////////////////////

//函數(shù)名:init_umen

//功 ? ? 能:U盤存儲(chǔ)器初始化

//輸 ? ? 入:無

//返 ? ? 回:alt_u8 1:成功,0--失敗

//////////////////////////////////////////////////////////////////////

alt_u8 init_umem(void)

{

alt_u8 i;

alt_u8 mem[8];//U盤存儲(chǔ)量


//初始化USB存儲(chǔ)設(shè)備

printf("\n初始化USB存儲(chǔ)設(shè)備……\n");//打印事件

ch375_intflag = 0;//清除CH375中斷標(biāo)志位

write_command_to_usb(DISK_INIT);//發(fā)送命令

while(ch375_intflag != 1);//等待中斷產(chǎn)生

ch375_intflag = 0;//清除CH375中斷標(biāo)志位

if(ch375_status == USB_INT_SUCCESS) printf("初始化USB存儲(chǔ)設(shè)備:成功\n");

else

{

printf("初始化USB存儲(chǔ)設(shè)備:失敗——0x%x\n",ch375_status);

while(1);

}


//檢查USB存儲(chǔ)設(shè)備是否就緒

printf("等待USB存儲(chǔ)設(shè)備就緒……\n");//打印事件

do{

delayus(10000);

ch375_intflag = 0;//清除CH375中斷標(biāo)志位

write_command_to_usb(DISK_READY);//發(fā)送命令

while(ch375_intflag != 1);//等待中斷產(chǎn)生

} while(ch375_status != USB_INT_SUCCESS);

printf("USB存儲(chǔ)設(shè)備已經(jīng)就緒\n");//打印事件

ch375_intflag = 0;//清除CH375中斷標(biāo)志位


//獲取USB存儲(chǔ)設(shè)備的容量

printf("獲取USB存儲(chǔ)設(shè)備的容量……\n");//打印事件

write_command_to_usb(DISK_SIZE);//發(fā)送命令

while(ch375_intflag != 1);//等待中斷產(chǎn)生

ch375_intflag = 0;//清除CH375中斷標(biāo)志位

if(ch375_status == USB_INT_SUCCESS)

{

printf("獲取USB存儲(chǔ)設(shè)備的容量:成功\n");

write_command_to_usb(RD_USB_DATA);//發(fā)送命令

//讀取并打印USB存儲(chǔ)設(shè)備容量

read_data_from_usb();//讀取第一個(gè)字節(jié),即后續(xù)數(shù)據(jù)長度,為8

for(i=0;i<8;i++)//連續(xù)讀取8個(gè)字節(jié)數(shù)據(jù)

{

mem[i] = read_data_from_usb();

}

printf("\t總扇區(qū)數(shù)為:%d\n",((mem[0]<<24)+(mem[1]<<16)+(mem[2]<<8)+mem[3]));

printf("\t每個(gè)扇區(qū)字節(jié)數(shù)為:%dB\n",((mem[4]<<24)+(mem[5]<<16)+(mem[6]<<8)+mem[7]));

printf("\t總存儲(chǔ)量為:%dMB\n",((((mem[0]<<24)+(mem[1]<<16)+(mem[2]<<8)+mem[3]))>>12)*((((mem[4]<<24)+(mem[5]<<16)+(mem[6]<<8)+mem[7]))>>8));

return(1);

}

else

{

printf("獲取USB存儲(chǔ)設(shè)備的容量:失敗——0x%x\n",ch375_status);

return(0);

}


}


//////////////////////////////////////////////////////////////////////

//函數(shù)名:umem_sec_read

//功 ? ? 能:讀取U盤一個(gè)扇區(qū)

//輸 ? ? 入:alt_u32 lab:LAB地址,即扇區(qū)號(hào)(此外使用了全局?jǐn)?shù)組URD_BUFFER)

//返 ? ? 回:alt_u8 1:成功,0--失敗

//////////////////////////////////////////////////////////////////////

alt_u8 umem_sec_read(alt_u32 lab)

{

alt_u8 i;

alt_u16 cnt = 0;

alt_u8 temp = 0;//臨時(shí)變量


//從USB存儲(chǔ)設(shè)備讀數(shù)據(jù)塊

printf("\n從U盤讀取第%d扇區(qū)數(shù)據(jù)塊……\n",lab);//打印事件

write_command_to_usb(DISK_READ);//發(fā)送命令

write_data_to_usb(lab);//起始地址:LAB地址的最低字節(jié)0x00

write_data_to_usb(lab>>8);//起始地址:LAB地址的較低字節(jié)0x00

write_data_to_usb(lab>>16);//起始地址:LAB地址的較高字節(jié)0x00

write_data_to_usb(lab>>24);//起始地址:LAB地址的最高字節(jié)0x00

write_data_to_usb(0x01);//數(shù)據(jù)長度:扇區(qū)數(shù)0x01

while(1)//執(zhí)行數(shù)據(jù)讀取操作

{

while(ch375_intflag != 1);//等待中斷產(chǎn)生

ch375_intflag = 0;//清除CH375中斷標(biāo)志位

if(ch375_status == USB_INT_DISK_READ)//USB存儲(chǔ)設(shè)備讀操作,請(qǐng)求數(shù)據(jù)讀出

{

write_command_to_usb(RD_USB_DATA);//發(fā)送讀取數(shù)據(jù)命令

temp = read_data_from_usb();//讀取第一個(gè)字節(jié),即后續(xù)數(shù)據(jù)長度,應(yīng)為64

for(i=0;i

{

URD_BUFFER[cnt++] = read_data_from_usb();


printf("0x%2x,",URD_BUFFER[cnt-1]);


if((i==15) || (i==31) || (i==47) || (i==63)) printf("\n");//每16個(gè)數(shù)據(jù)換行


}

write_command_to_usb(DISK_RD_G0);//發(fā)送繼續(xù)USB存儲(chǔ)設(shè)備的讀操作命令

}

else if(ch375_status == USB_INT_SUCCESS)

{

printf("讀取U盤第%d扇區(qū)數(shù)據(jù):成功\n",lab);

break;

}

else

{

printf("讀取U盤第%d扇區(qū)數(shù)據(jù):失敗——0x%x\n",lab,ch375_status);

return(0);

}

}


return(1);

}


//////////////////////////////////////////////////////////////////////

//函數(shù)名:umem_sec_write

//功 ? ? 能:U盤一個(gè)扇區(qū)寫入

//輸 ? ? 入:alt_u32 lab:LAB地址,即扇區(qū)號(hào)(此外使用了全局?jǐn)?shù)組UWR_BUFFER)

//返 ? ? 回:alt_u8 1:成功,0--失敗

//////////////////////////////////////////////////////////////////////

alt_u8 umem_sec_write(alt_u32 lab)

{

alt_u8 i;

alt_u16 cnt = 0;


//從USB存儲(chǔ)設(shè)備讀數(shù)據(jù)塊

printf("\n向U盤寫入第%d扇區(qū)數(shù)據(jù)塊……\n",lab);//打印事件

write_command_to_usb(DISK_WRITE);//發(fā)送命令

write_data_to_usb(lab);//起始地址:LAB地址的最低字節(jié)0x00

write_data_to_usb(lab>>8);//起始地址:LAB地址的較低字節(jié)0x00

write_data_to_usb(lab>>16);//起始地址:LAB地址的較高字節(jié)0x00

write_data_to_usb(lab>>24);//起始地址:LAB地址的最高字節(jié)0x00

write_data_to_usb(0x01);//數(shù)據(jù)長度:扇區(qū)數(shù)0x01

while(1)//執(zhí)行數(shù)據(jù)寫入操作

{

while(ch375_intflag != 1);//等待中斷產(chǎn)生

ch375_intflag = 0;//清除CH375中斷標(biāo)志位

if(ch375_status == USB_INT_DISK_WRITE)//USB存儲(chǔ)設(shè)備讀操作,請(qǐng)求數(shù)據(jù)寫入

{

write_command_to_usb(WR_USB_DATA7);//發(fā)送寫入數(shù)據(jù)命令

write_data_to_usb(64);//寫入第一個(gè)字節(jié),即后續(xù)數(shù)據(jù)長度,為64

for(i=0;i<64;i++)//連續(xù)寫入64個(gè)字節(jié)數(shù)據(jù)

{

write_data_to_usb(UWR_BUFFER[cnt++]);

}

write_command_to_usb(DISK_WR_GO);//發(fā)送繼續(xù)USB存儲(chǔ)設(shè)備的讀操作命令

}

else if(ch375_status == USB_INT_SUCCESS)

{

printf("寫入U(xiǎn)盤第%d扇區(qū)數(shù)據(jù):成功\n",lab);

break;

}

else

{

printf("寫入U(xiǎn)盤第%d扇區(qū)數(shù)據(jù):失敗——0x%x\n",lab,ch375_status);

return(0);

}

}


return(1);


}


//////////////////////////////////////////////////////////////////////

//函數(shù)名:write_command_to_usb

//功 ? ? 能:寫命令到CH375

//輸 ? ? 入:alt_u8 command----寫入命令

//返 ? ? 回:無

//////////////////////////////////////////////////////////////////////

void write_command_to_usb(alt_u8 command)

{

//命令操作 A0=1

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_A0_BASE,1);

//設(shè)置USB_DB為輸出

IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_USB_DB_BASE,0xff);

//送命令到USB_DB

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_DB_BASE,command);


//拉低USB_CS

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_CS_BASE,0);

//拉低USB_WR

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_WR_BASE,0);

//延時(shí)

delayus(10);

//拉高USB_WR

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_WR_BASE,1);

//拉高USB_CS

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_CS_BASE,1);

}


//////////////////////////////////////////////////////////////////////

//函數(shù)名:write_data_to_usb

//功 ? ? 能:寫數(shù)據(jù)到CH376

//輸 ? ? 入:alt_u8 data----寫入數(shù)據(jù)

//返 ? ? 回:無

//////////////////////////////////////////////////////////////////////

void write_data_to_usb(alt_u8 data)

{

//數(shù)據(jù)操作 A0=0

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_A0_BASE,0);

//設(shè)置USB_DB為輸出

IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_USB_DB_BASE,0xff);

//送數(shù)據(jù)到USB_DB

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_DB_BASE,data);


//拉低USB_CS

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_CS_BASE,0);

//拉低USB_WR

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_WR_BASE,0);

//延時(shí)

delayus(10);

//拉高USB_WR

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_WR_BASE,1);

//拉高USB_CS

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_CS_BASE,1);

}


//////////////////////////////////////////////////////////////////////

//函數(shù)名:read_data_from_usb

//功 ? ? 能:從CH376讀出數(shù)據(jù)

//輸 ? ? 入:無

//返 ? ? 回:alt_u8----讀出數(shù)據(jù)

//////////////////////////////////////////////////////////////////////

alt_u8 read_data_from_usb(void)

{

alt_u8 data = 0;//返回?cái)?shù)據(jù)變量定義


//數(shù)據(jù)操作 A0=0

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_A0_BASE,0);

//設(shè)置USB_DB為輸入

IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_USB_DB_BASE,0x00);


//拉低USB_CS

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_CS_BASE,0);

//拉低USB_RD

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_RD_BASE,0);

//延時(shí)>30ns數(shù)據(jù)輸出有效,可以讀取

delayus(10);

//讀取數(shù)據(jù)

data = IORD_ALTERA_AVALON_PIO_DATA(PIO_USB_DB_BASE);

//拉高USB_RD

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_RD_BASE,1);

//拉高USB_CS

IOWR_ALTERA_AVALON_PIO_DATA(PIO_USB_CS_BASE,1);

//延時(shí),讀取結(jié)束

delayus(1);


return data;

}



//////////////////////////////////////////////////////////////////////

//函數(shù)名:delayus

//功 ? ? 能:短延時(shí)函數(shù)

//輸 ? ? 入:alt_u32 cnt----延時(shí)值

//返 ? ? 回:void

//////////////////////////////////////////////////////////////////////

void delayus(alt_u32 cnt)

{

int i;

for(i=0;i

}


你好:

????你程序里的send_string_to_usb("/HOW.TXT\0",9);這個(gè)函數(shù)就寫錯(cuò)了,使用SET_FILE_NAME命令后面跟隨的直接是文件名字符串,不需要長度等。具體實(shí)現(xiàn)參考我們提供的例程中的FILE_SYS.c文件中CH376SetFileName( name )這個(gè)函數(shù)。



非常感謝幫助,已經(jīng)修改了程序,可以正常工作了


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频