請問需要參考哪些資料?
如果是采用374模擬U盤的話,建議你去下載CH372DSK,這個里面是372模擬U盤的,至于技術(shù)資料,你可以去看下UFI協(xié)議
你是想通過SPI口操作CH374,讀取U盤的設(shè)備描述么?網(wǎng)上下載CH374EVT.ZIP,參考\PUB\EXAM\HOST目下的程序
請問這樣連接可以嗎?我在UD+,UD-測量電壓時都沒有電壓?是哪里錯了?
CH374的晶振要用24MHZ
用12M的插入U盤時,UD+也有3.7V左右的電壓,但U盤的燈不亮有點怪,請問上面的接法是正確的嗎?
除晶振必須換為24M以外,其他硬件連接都可以。 U盤燈是否亮與U盤自身特性有關(guān),有的U盤空閑時不亮,讀寫時才亮。 現(xiàn)在需要確認單片機與CH374之間的通信是否正常,驗證方法:程序中等待CH374復(fù)位完成后,讀取寄存器:0x04,0x05,0x06,0x07,應(yīng)與手冊中的復(fù)位值一樣。
void CH374_PORT_INIT( ) /* 由于使用通用I/O模擬并口讀寫時序,所以進行初始化 */ { /* 如果是硬件SPI接口,那么可使用mode3(CPOL=1&CPHA=1)或mode0(CPOL=0&CPHA=0),CH374在時鐘上升沿采樣輸入,下降沿輸出,數(shù)據(jù)位是高位在前 */ CH374_SPI_SCS = 1; /* 禁止SPI片選 */ CH374_SPI_SCK = 1; /* 默認為高電平,SPI模式3,也可以用SPI模式0,但模擬程序可能需稍做修改 */ /* 對于雙向I/O引腳模擬SPI接口,那么必須在此設(shè)置SPI_SCS,SPI_SCK,SPI_SDI為輸出方向,SPI_SDO為輸入方向 */ } 對于雙向I/O引腳模擬SPI接口,那么必須在此設(shè)置SPI_SCS,SPI_SCK,SPI_SDI為輸出方向,SPI_SDO為輸入方向 這里需要如何設(shè)置???
你用的是51內(nèi)核的MCU不需要設(shè)置I/O方向.像AVR,ARM等需要設(shè)置.
能不能看它是否工作正常?
374和375怎么相差這么大???用375獲得設(shè)備描述符的程序很簡單,而374的看不太懂,也搞不出來,是不是一定要加下面這些函數(shù) // CH374傳輸事務(wù),輸入目的端點地址/PID令牌/同步標(biāo)志,返回同CH375,NAK不重試,超時/出錯重試 UINT8 HostTransact374( UINT8 endp_addr, UINT8 pid, BOOL tog ); // CH374傳輸事務(wù),輸入目的端點地址/PID令牌/同步標(biāo)志/以mS為單位的NAK重試總時間(0xFFFF無限重試),返回同CH375,NAK重試,超時出錯重試 UINT8 WaitHostTransact374( UINT8 endp_addr, UINT8 pid, BOOL tog, UINT16 timeout ); UINT8 HostCtrlTransfer374( PUINT8 ReqBuf, PUINT8 DatBuf, PUINT8 RetLen ) ; // 執(zhí)行控制傳輸,ReqBuf指向8字節(jié)請求碼,DatBuf為收發(fā)緩沖區(qū) // 如果需要接收和發(fā)送數(shù)據(jù),那么DatBuf需指向有效緩沖區(qū)用于存放后續(xù)數(shù)據(jù),實際成功收發(fā)的總長度保存在ReqLen指向的字節(jié)變量中
技術(shù)人員?回答下啊...如果只想獲得設(shè)備描述符是不是一定要加上面那些函數(shù)啊?
由于CH375內(nèi)部內(nèi)置了相關(guān)的固件程序,用戶只需要通過相關(guān)的命令進行操作就可以了,所以程序比較簡單. CH374沒有內(nèi)置相關(guān)的固件程序,單片機是通過CH374內(nèi)部寄存器進行操作的,所以程序比較復(fù)雜,但速度會比 CH375要快 對于上面的函數(shù),CH374是要用到的
是必須要有的,我們的例子程序里面已經(jīng)提供了獲取設(shè)備描述符的程序,你看一下. UINT8 GetDeviceDescr( PUINT8 buf ) // 獲取設(shè)備描述符 { UINT8 s, len; s = HostCtrlTransfer374( SetupGetDevDescr, buf, &len ); // 執(zhí)行控制傳輸 if ( s == USB_INT_SUCCESS ) { UsbDevEndpSize = ( (PUSB_DEV_DESCR)buf ) -> bMaxPacketSize0; // 端點0最大包長度,這是簡化處理,正常應(yīng)該先獲取前8字節(jié)后立即更新UsbDevEndpSize再繼續(xù) if ( len < ( (PUSB_SETUP_REQ)SetupGetDevDescr ) -> wLengthL ) s = USB_INT_BUF_OVER; // 描述符長度錯誤 } return( s ); }
memcpy(BufLogDescr, SetupGetCfgDescr, sizeof( SetupGetCfgDescr ));這個是什么函數(shù)啊?沒有定義
// 獲取設(shè)備描述符 const UINT8C SetupGetDevDescr[] = { 0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00 }; // 獲取配置描述符 const UINT8C SetupGetCfgDescr[] = { 0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00 }; // 設(shè)置USB地址 const UINT8C SetupSetUsbAddr[] = { 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 }; // 設(shè)置USB配置 const UINT8C SetupSetUsbConfig[] = { 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 這些是什么意思?不太懂