我的375能正確的讀回測試信號(輸入0xAA,返回0X5500) 當我插上U盤時返回0X1600,頭文件里指明16是U盤斷開。測試插上U盤時V+=4.01v 有兩問題: 1.如何保證V+供電為5V,我直接提供5V給V+可行嗎?我按照官方提供的電路無論R2取值為多少V+均為4.1V左右。是不是圖有問題? 2.為什么在串口助手顯示的返回值后面均有00? 請高手指點一二。 串口助手顯示如下: test:5f00 test:5500 Insert USB disk chipan chushihua:1600 Error status, 22
1.R2電阻可以不加 可以使用計算機的USB口提供5v電壓. 2.把串口輸出方式換為 printf("%02x \n",(unsigned short)i); 3.你的CH375是工作在幾伏的?
在U盤不插的時候電壓是幾V?請不要懷疑電路的正確性,我們能保證電路100%正確.您直接給VCC 5V電壓就可以了.R2的電阻值一定要小.5歐姆以下.現(xiàn)在先解決您的硬件問題.4.01V的電壓U盤根本就無法工作.
U盤不插的時候是5v,那我直接把R2換成導線可以不?
換了后插上U盤V+=5,vd-=0.5v,vd+=3.35v 我想知道為什么返回值為0x5500而不是0x55?
這跟你的打印格式有關(guān)系
如果供電在5V以下的話.可以使用升壓IC!不過這樣最高的效率在90% 而且價格比比較高!如果在5V或5V以上的話.可以使用LDO穩(wěn)壓IC! 我認為最好的辦法是使用6V以上,降壓輸出!效率在98%以上!電壓穩(wěn)定,可以過大電流!
“這跟你的打印格式有關(guān)系” 不懂!?。。。。。。。。?! 請說明清楚點
是和打印格式有關(guān)的,在KEIL編譯器中,%X是按照4個字節(jié)輸出,所以要強制轉(zhuǎn)換為unsigned shor 型數(shù)據(jù).由于您輸出的數(shù)據(jù)實際長度不大于2個字節(jié)用%02X就可以了. 也就是1樓所說的printf("%02x \n",(unsigned short)i);
非常感謝你們的解答!!!!!!!!!! 明白了!
學到東西了 頂個
大家好!請教幾個問題! 我在做用CH375B讀寫手機的U盤!有些手機可以讀寫!但有50%不行 大家都知道手機的充電腳電壓最高在4.3V。 ?。茫?75B的VCC電壓為5V供電。 ?。?)不插手機時!對應的充電腳電壓為4.8V。 ?。?)插入手機時!充電腳被拉低成了4.3V。 不行的原因在于:無法對手機的U盤進行枚舉,不知道何故。 請問:(1)手機的充電腳電壓為4.3V時,它的U盤能正常工作嗎? (2)有些U盤是不是采用CBI傳輸協(xié)議?CH375B是不是沒有內(nèi)置CBI傳輸協(xié)議? (3)怎樣編寫單片機的外部固件程序?
(1)電壓過低了,最好保證在4.7V以上 (2)沒有內(nèi)置CBI協(xié)議固件 (3)目前還沒遇到CBI協(xié)議的U盤,固件程序不是一兩句話能說的清楚的,您需要先了解一下協(xié)議,才知道從哪入手
呵!看來不是手機U盤供電的問題了! ?。ǎ保┙o充電引腳提供5.2VDC的電壓。(不插入手機時為5.2V) ?。ǎ玻┊斒謾C插入時充電引腳電壓拉低成5.0V。此時給手機充電的電流很大?。ǎ担埃埃恚烈陨希? ?。ǎ常┻€是不能獲取設備的描述符?
我把程序貼出來! 請各位大俠幫忙看看問題出在哪里? void TI_cmd_dat(uchar rp)//發(fā)送串行命令 { TI=0; TB8=1; SBUF=rp; while(!TI); TI=0; } void TI_data(uchar start) //發(fā)送串行數(shù)據(jù) {
TI=0; TB8=0; SBUF=start; while(!TI); TI=0; } uchar RI_data(void) //接收串行數(shù)據(jù) { uchar strsta; unsigned int j; //接收數(shù)據(jù)啟用超時控制30ms for(j=10000;j!=0;j--) { if(RI) { RI=0; strsta=SBUF; return(strsta); } } return(0);//出錯 }
uchar starut_st(void)//使用查詢方式,并且獲取中斷的狀態(tài) { uchar j,k; bit grey=0; for(j=80;j!=0;j--) //等待70ms for(k=250;k!=0;k--) { INT0=1; if(INT0==0) { grey=1; j=1; break; } } //多次查詢且延時 if(grey) { grey=0; TI_cmd_dat(0x22); //發(fā)送獲取中斷狀態(tài)的命令碼 return(RI_data()); //返回狀態(tài)碼 } else return(0);//出錯返回‘0’ }
void set_usb_mode(uchar mode ) { uchar spk; TI_cmd_dat(0x15); _nop_(); _nop_(); TI_data(mode); times_10us(3); for(spk=50;spk!=0;spk--) { if(RI_data()==0x51) return; else { TI_data(mode); times_10us(3); } } green1=0; //燈亮則表明模式設定不成功 }
void CH375_int0(void) { uchar datbuf; uchar *buffer; set_usb_mode(5);//設定為已啟用的USB模式5。并且自動查檢USB設備的連接狀態(tài) if(starut_st()==0x15)//等待設備插入 { set_usb_mode(7); times_20ms(6); set_usb_mode(6); //結(jié)束復位,并且切換到已啟用的模式6 if(starut_st()==0x15) //再次等待設備插入 { delay_times1s();//有些USB設備必須延時800MS以上才能正常工作 green=0; TI_cmd_dat(0x51);//初始化USB存儲器 if(starut_st()==0x14)//USB 存儲器初始化成功 { yes_sucess=0; } else { TI_cmd_dat(0x4d); //自動配置普通的USB存儲設備 times_20ms(1);//等待CH375B操作完成 if(starut_st()==0x14) { yes_sucess=0; } else { TI_cmd_dat(0x46);//獲取USB設備的描述符 _nop_(); _nop_();
TI_data(1);//描述符的類型1類型2配置 _nop_(); _nop_(); if(starut_st()==0x14)//成功獲取USB設備的描述符 { TI_cmd_dat(0x28);//獲取數(shù)據(jù)流的長度 _nop_(); _nop_();
datbuf=RI_data(); //接收到第一個字節(jié)為后續(xù)數(shù)據(jù)流的長度 if(datbuf>0) { yes_sucess=0; } while(datbuf--) { *buffer=RI_data(); buffer++; } } } } } } }
void pss_usb(void) { uchar i; TI_cmd_dat(0x06);//發(fā)送測試CH375是否工作正常的命令碼 _nop_(); _nop_(); TI_data(0x57); //發(fā)送測試的數(shù)據(jù) _nop_(); _nop_();
if(RI_data()==0xa8) CH375_int0();//CH375B工作正常,調(diào)用CH375B初始化函數(shù) else { for(i=100;i!=0;i--) { TI_cmd_dat(0x05); times_20ms(4); //執(zhí)行USB硬件復位
TI_cmd_dat(0x06); _nop_(); _nop_(); TI_data(0x55); _nop_(); _nop_(); if(RI_data()==0xaa) break; } if(i==0) { while(1) { red=!red; times_1s(); times_1s(); } } else CH375_int0(); } }
有些手機可以枚舉成功! 但大部分手機不行。請各位幫忙看看問題出在哪里了! 會不會是在設定模式時的延時出了問題呀