|
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
成功把圈圈的程序應(yīng)用到ZLG的PDIUSBD12開發(fā)板上!!! |
作者:hugoliang 欄目:技術(shù)交流 |
我按照圈圈的BLOG上給的程序,修改后,想把它用到USBD12的開發(fā)板上,可是根本沒有識別.我用bus hound看的結(jié)果如圖所示. 我不理解的是第一行應(yīng)該是GET_STATUS,它的第一個字節(jié)應(yīng)該是0x80,0x81,0x82其中的一個,可是哪個都不是,這是為什么呢?謝謝. 同時感謝圈圈提供的程序和圖,使我對USB的學(xué)習(xí)很快地就入門了。謝謝 * - 本貼最后修改時間:2006-3-25 21:16:05 修改者:hugoliang |
2樓: | >>參與討論 |
作者: computer00 于 2006/3/22 22:59:00 發(fā)布:
估計是程序哪里改錯了,你只要修改相應(yīng)的IO口即可,其它地方不動 你的USBD12外部是不是接了上拉電阻?注意核對一下電路圖。 |
3樓: | >>參與討論 |
作者: hugoliang 于 2006/3/23 12:16:00 發(fā)布:
可是連主機發(fā)過來的數(shù)據(jù)都不對啊? 由第一行應(yīng)該是GET_STATUS,它的第一個字節(jié)應(yīng)該是0x80,0x81,0x82其中的一個,可是主機發(fā)過來的是0xa3,主機發(fā)過來的數(shù)據(jù)都是不對的,這又是為什么呢?我真的很自己檢查過程序了,謝謝. |
4樓: | >>參與討論 |
作者: computer00 于 2006/3/23 12:39:00 發(fā)布:
你看到的get_status應(yīng)該是USB主控制器發(fā)給根集線器的。 因為USB插入,并接了上拉電阻之后,USB根集線器就會檢測到設(shè)備插入,并報告USB主控制器。 USB主控制器就會通過發(fā)送獲取集線器狀態(tài)的命令給根集線器。 我的程序肯定是沒問題的。估計還是硬件連接或者管腳分配的問題。 |
5樓: | >>參與討論 |
作者: hugoliang 于 2006/3/23 15:25:00 發(fā)布:
我是個菜鳥,肯定是哪里改錯了. 對了,你能把serial.h這個文件放到你的BLOG上嗎?我想試著用串口調(diào)試一下.謝謝圈圈. |
6樓: | >>參與討論 |
作者: computer00 于 2006/3/23 16:32:00 發(fā)布:
串口其實很簡單的,你自己隨便寫一個串口發(fā)送程序即可。 下面這幾個都改好了嗎?另外,確認一下你的D12跟我給的圖有什么區(qū)別沒。 #define USB_DATA P0 #define USB_A0 P3_5 #define USB_WR P3_6 #define USB_RD P3_7 #define USB_INT P3_2 俺理說,按照我的原理圖連接,燒入程序就可以用的,其它地方都不用改動。已經(jīng)有人成功使用過了。 |
7樓: | >>參與討論 |
作者: hugoliang 于 2006/3/24 20:25:00 發(fā)布:
你好,我已經(jīng)用串口調(diào)試過了.出現(xiàn)一些問題. 我把串口調(diào)試功能加到里面,按照你的程序,每次串口總是收到一大堆"O",就是連"OK"都沒顯示完整.是不是說明,單片機在不停地復(fù)位?而引起復(fù)位的,我查了一下開發(fā)板的原理圖,只可能是器件掛起,可是又是什么引起器件掛起的呢?謝謝 |
8樓: | >>參與討論 |
作者: computer00 于 2006/3/24 21:33:00 發(fā)布:
器件掛起怎么會導(dǎo)致單片機復(fù)位呢?不可能吧。 |
9樓: | >>參與討論 |
作者: hugoliang 于 2006/3/24 21:55:00 發(fā)布:
恩,開發(fā)板的說明書上是這么寫的. 開發(fā)板的電路連接就是掛起恢復(fù)時,給MCU發(fā)一個復(fù)位信號. 但是我不知道是不是因為這個引起的,我只是看到串口上收到一系列的"o",可不可以這樣理解,MCU在不斷的復(fù)位呢?謝謝你. |
10樓: | >>參與討論 |
作者: computer00 于 2006/3/24 22:33:00 發(fā)布:
有可能。那就是你的硬件連接跟我的不一樣了。 把D12發(fā)給MCU的復(fù)位信號去掉試試。 |
11樓: | >>參與討論 |
作者: hugoliang 于 2006/3/24 22:44:00 發(fā)布:
剛才我把發(fā)送OK的命令改到連接USB之前了. 這樣,串口收到OK后,緊接著收到的是0xc0,說明,連接USB以后,中斷寄存器收到是的把掛起改變和總線復(fù)位置位,這是為什么呢?什么可以引起掛起改變和總線復(fù)位呢? |
12樓: | >>參與討論 |
作者: hugoliang 于 2006/3/24 22:54:00 發(fā)布:
串口收到的數(shù)據(jù)是這樣的。 4F 4B C0 80 C0 是這些字母的重復(fù).4F是O,4B是K,然后接下來的3個字節(jié)分別是3次讀取中斷寄存器的不同的值.第一次,掛起改變位和總線復(fù)位位置1,第二次,只有掛起改變位置1,第三次和第一次一樣。 |
13樓: | >>參與討論 |
作者: hugoliang 于 2006/3/24 23:29:00 發(fā)布:
哦,原因查出來了. 是因為開發(fā)板上CS,RST,SUSPD線都和MCU連著,我沒有配置它們,不好意思,讓圈圈浪費了許多時間,謝謝. |
14樓: | >>參與討論 |
作者: computer00 于 2006/3/24 23:36:00 發(fā)布:
暈菜了……下次一定要記得,核對一下原理圖。 * - 本貼最后修改時間:2006-3-24 23:51:44 修改者:computer00 |
15樓: | >>參與討論 |
作者: hugoliang 于 2006/3/25 13:41:00 發(fā)布:
又不行了…… 這次是只收到一次中斷,是復(fù)位標(biāo)志置1,然后就沒有中斷了,這應(yīng)該從哪里下手檢查呢? |
16樓: | >>參與討論 |
作者: hugoliang 于 2006/3/25 14:16:00 發(fā)布:
我感覺是中斷模式設(shè)置的不一樣. 中斷模式:1表示報告所有的錯誤和NAKing并產(chǎn)生一個中斷;0表示只有OK被報告.你設(shè)置是的1,只收到一次中斷.而我設(shè)置的是0.但是具體意思我還是不明白. |
17樓: | >>參與討論 |
作者: hugoliang 于 2006/3/25 21:13:00 發(fā)布:
呵呵,大功告成!!! 利用圈圈的程序,經(jīng)過修改,已經(jīng)成功地把ZLG的D12USB開發(fā)板模擬成U盤. 首先,感謝圈圈一直的幫助,感謝圈圈公布的程序,使我很快地學(xué)到許多東西,圈圈,謝謝你. 其次,我想說一些有關(guān)把圈圈的程序移植到周立功的PDIUSBD12開發(fā)板需要注意的一些情況: 1.引腳方面:由于在圈圈的電路中,SUSPEND,CS,RST等線都沒有用,但周立功的開發(fā)板上都已和MCU連接,所以要特別注意,開始的時候,處理好片選等線的情況. 2.我也不知道為什么,在圈圈的程序中,設(shè)置模式的時候,時鐘運行位是置1的,可是在開發(fā)板上,必須置0,不知道其中的奧妙,還等圈圈來解釋. 最后,謝謝圈圈,下一步我想加上一片FLASH,做個真正的U盤,到時候還請圈圈幫忙啊:) |
18樓: | >>參與討論 |
作者: iC921 于 2006/3/25 22:29:00 發(fā)布:
俺和樓主一樣興奮…… |
19樓: | >>參與討論 |
作者: Bingoes 于 2006/3/26 9:22:00 發(fā)布:
俺也想玩玩USB,但那個D12只有TSSOP封裝的 連SOP封裝的都沒有。我又不想花錢買專門的開發(fā)板,自己做板又得花上一筆錢做PCB,怎么算都是不劃算。用萬用板自己焊個板子是最好的了,可器件的封裝太小了,要是D12有DIP的就好了,哎哎。。。 |
20樓: | >>參與討論 |
作者: hugoliang 于 2006/3/26 10:09:00 發(fā)布:
呵呵,看來我有必要做一些用于轉(zhuǎn)成DIP封裝的小板子了. 只是不知道有多少人需要,如果有需要的話,我就做一批,首先得送給圈圈一些啊:)如果要的人多的話,我就去做一些,到時候成本價發(fā)給大家(不好意思,如果人多我也送不起,畢竟還是個窮學(xué)生). |
21樓: | >>參與討論 |
作者: 何以解憂 于 2006/3/26 10:17:00 發(fā)布:
萬用板有上面有TSSOP的 |
22樓: | >>參與討論 |
作者: computer00 于 2006/3/26 10:18:00 發(fā)布:
謝謝先~~~~~~~。這么小的板子,可以順便搭著什么板子做了。 如果專門為這么一個小板去開模,恐怕不劃算吧……………… 那樣還不如干脆做成開發(fā)板算了,把51一起掛上去,反正開板費我們這里就是300。 |
23樓: | >>參與討論 |
作者: hugoliang 于 2006/3/26 12:40:00 發(fā)布:
那我周一打聽一下. 在我的印象中,光照費好象是5毛錢左右每平方厘米,再加上3毛錢左右的制版費,應(yīng)該沒有那么貴吧.不過好象總面積必須足夠大,估計象這種轉(zhuǎn)接板,得做百八十塊,人家才管做.我估計平均下來應(yīng)該每塊1,2元錢吧,我先問問看,再看需要人的多少.如果多,我就做一些,郵寄給大家. |
24樓: | >>參與討論 |
作者: xxdcq 于 2006/3/27 9:26:00 發(fā)布:
我也做成功了! 有幾處改動 //第1處改動 #include<Atmel/AT89x52.H> #include<UDISK.H> #include<PDIUSBD12.H> #include<MASS_STORAGE.H> //#include<serial.h> #define USB_COMMAND_ADD 0xff01 #define USB_DATA_ADD 0xff00 #define D12CS P1_6 #define D12SUSPD P3_3 #define USB_INT P3_2 #define ENDPOINT_NUMBER 2 #define MAX_CONTROL_DATA_SIZE 16 #define MAX_LUN 0 #define MAX_BULK_DATA_SIZE 64 CONTROL_DATA_BUFF Control_Data; unsigned CHAR idata buffer[64]; CBW cbw; CSW csw; //第2處改動 void write_usb_command(unsigned CHAR usb_command) //寫USB命令 { unsigned CHAR xdata *exAddress; exAddress=USB_COMMAND_ADD; *exAddress=usb_command; } void write_a_usb_data(unsigned CHAR usb_data) //寫一字節(jié)USB數(shù)據(jù) { unsigned CHAR xdata *exAddress; exAddress=USB_DATA_ADD; *exAddress=usb_data; } unsigned CHAR read_a_usb_data(void) //讀一字節(jié)USB數(shù)據(jù) { unsigned CHAR TEMP; unsigned CHAR xdata *exAddress; exAddress=USB_DATA_ADD; TEMP=*exAddress; return TEMP; } //第3處改動 unsigned CHAR read_endpoint_buff(unsigned CHAR endp,unsigned CHAR len,unsigned CHAR * buff) //讀終端點緩沖 { unsigned CHAR i,j; unsigned CHAR xdata *exAddress; read_last_status(endp); if(!(select_endpoint(endp))&0x01){error(0); return 0;} read_endpoint_status(endp); write_usb_command(Read_Buffer); read_a_usb_data(); j=read_a_usb_data(); if(j>len) j=len; exAddress=USB_DATA_ADD; for(i=0;i<j;i++) *(buff+i)=*exAddress; clear_buffer(); return j; } unsigned CHAR write_endpoint_buff(unsigned CHAR endp,unsigned CHAR len,unsigned CHAR * buff) //寫終端點緩沖 { unsigned CHAR i; unsigned CHAR xdata *exAddress; read_last_status(endp); select_endpoint(endp); write_usb_command(Write_Buffer); write_a_usb_data(0); write_a_usb_data(len); exAddress=USB_DATA_ADD; for(i=0;i<len;i++) *exAddress=*(buff+i); validate_buffer(); return len; } //第4處改動 void connect_usb(void) //連接USB { D12SUSPD=0; //USB非掛起狀態(tài) write_usb_command(0xf3); //初始化USBD12 write_a_usb_data(0x1e); //連接USB write_a_usb_data(0x47); //設(shè)置頻率 } //第5處改動 void main(void) { P0=0xff; P1=0xff; P2=0xff; P3=0xff; D12CS=0; //選中USB D12SUSPD=0; //USB非掛起狀態(tài) disconnect_usb(); // delay(1000); // init_comport(57600); init_usb(); D12CS=1; //非選中USB D12CS=0; //選中USB connect_usb(); // send_to_comport('O'); // send_to_comport('K'); while(1) { if(!USB_INT) { read_interrupt_register(); // delay(10); // printc(Interrupt_Register.Register[0]); if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;} if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;} if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;} if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;} // if(Interrupt_Register.Interrupt.port_out_1)endp1_out(); // if(Interrupt_Register.Interrupt.port_in_1)endp1_in(); if(Interrupt_Register.Interrupt.main_out_port){endp2_out();continue;} if(Interrupt_Register.Interrupt.main_in_port&&usb_flags.flags.usb_endp2_in){endp2_in();continue;} } } } |
25樓: | >>參與討論 |
作者: hugoliang 于 2006/3/27 9:32:00 發(fā)布:
呵呵,LS的有沒有興趣繼續(xù)做下去? 我想買一片FLASH,準(zhǔn)備把它作成一個真正的U盤:)如果有興趣,可以一起討論一起做啊:) |
26樓: | >>參與討論 |
作者: computer00 于 2006/3/27 10:44:00 發(fā)布:
原來開發(fā)板上用的是總線模式?我比較喜歡IO模式,哈哈。 |
27樓: | >>參與討論 |
作者: computer00 于 2006/3/27 15:37:00 發(fā)布:
如果你打算用51+FLASH來做U盤的話,你會發(fā)現(xiàn)內(nèi)存太少了 非常郁悶。要借用FLASH中的一些塊來做緩沖。 因為寫是按扇區(qū)來寫的,但FLASH的擦除必須按塊擦除,所以在擦除之前,必須備份同一塊中其它扇區(qū)的數(shù)據(jù)。 特別是FAT表,如果弄不好,很容易就損壞了。 |
28樓: | >>參與討論 |
作者: hugoliang 于 2006/3/27 17:34:00 發(fā)布:
恩,這方面的問題我看過一些資料. 我現(xiàn)在用的是P89V51RD2,有1K的字節(jié),肯定不夠,最起碼要有32K吧,先把U盤嘗試著做出來,如果可以的話,考慮用ARM.呵呵,到時候還是少不了圈圈的幫忙哈:) |
29樓: | >>參與討論 |
作者: computer00 于 2006/3/27 18:43:00 發(fā)布:
先慢慢啃資料吧。 |
30樓: | >>參與討論 |
作者: ztg33333 于 2006/3/28 14:55:00 發(fā)布:
圈圈的BLOG 在那里,我看下 |
31樓: | >>參與討論 |
作者: computer00 于 2006/3/28 15:37:00 發(fā)布:
請點擊我這個簽名的圖片,就可以打開我的blog了~~~~~~~~~~ |
32樓: | >>參與討論 |
作者: hugoliang 于 2006/3/29 20:44:00 發(fā)布:
另外,圈圈,我突然想到這樣一個問題. 你在程序中模擬了一個TXT文件,如果我想模擬一個WORD文件,應(yīng)該怎么做呢?哪里有這方面的資料? |
33樓: | >>參與討論 |
作者: computer00 于 2006/3/29 22:07:00 發(fā)布:
這就需要去找word文檔的存儲格式了。 但這個可不容易搞啊,word文檔中包含了很多信息,要一一搞清楚可不容易。 就算你新建一個空的word文檔,大概也需要19KB的數(shù)據(jù)。 另一種辦法就是強行將test.txt的擴展名,改成.doc,這樣電腦也能用word去打開它,也可以正常顯示,但是看起來就是很單調(diào)了。 |
34樓: | >>參與討論 |
作者: hugoliang 于 2006/3/30 10:09:00 發(fā)布:
那WORD文檔的存儲格式哪里可以找到呢? 官方有沒有公布? |
35樓: | >>參與討論 |
作者: ljxh401 于 2006/3/31 14:50:00 發(fā)布:
00的資料在那里下載 想玩 有材料 |
36樓: | >>參與討論 |
作者: flyzsl 于 2006/4/2 11:10:00 發(fā)布:
新手入門求助! 看了一個多月的ALTERA的CPLD資料,想動手操作下。 各位高手可以推薦一個 MCU+CPLD 功能的開發(fā)板嗎?具體的型號和價格,也請告知。最好是價格不太貴的哦,呵呵,是自己玩。 謝謝各位大蝦~~~ |
37樓: | >>參與討論 |
作者: zhangjcad 于 2006/4/4 17:35:00 發(fā)布:
看看程序 還是程序的問題~~ 我寫D12程序,調(diào)試了四五天才行了 |
38樓: | >>參與討論 |
作者: mxinfa 于 2006/4/5 14:34:00 發(fā)布:
圈圈你太牛了 往死里佩服 |
39樓: | >>參與討論 |
作者: woodpaul 于 2006/4/5 16:34:00 發(fā)布:
可以在設(shè)備上加一個628512,作為數(shù)據(jù)緩沖啊。 如果你打算用51+FLASH來做U盤的話,你會發(fā)現(xiàn)內(nèi)存太少了 非常郁悶。要借用FLASH中的一些塊來做緩沖。 因為寫是按扇區(qū)來寫的,但FLASH的擦除必須按塊擦除,所以在擦除之前,必須備份同一塊中其它扇區(qū)的數(shù)據(jù)。 特別是FAT表,如果弄不好,很容易就損壞了。 直接加一塊628512做緩沖不就好了么。 |
40樓: | >>參與討論 |
作者: mxinfa 于 2006/4/6 17:38:00 發(fā)布:
樓主,向您請教問題 樓主跟你一樣我的CS,RST,SUSPD等線也都和MCU連著,按照圈圈的圖我想辦法把CS接地了,DMACK接高了,CLKOUT跟DMREQ本來就是輸出,不配置估計也沒關(guān)系,現(xiàn)在就是suspend不知道該怎么配置,它既能做輸入又能作輸出啊,你是怎么配置的? 謝謝了 |
41樓: | >>參與討論 |
作者: alexchang 于 2006/4/7 9:52:00 發(fā)布:
尋求圈圈的BLOG! 最近也想搞搞USB,但是感覺不容易上手,能讓俺也看看圈圈的BLOG么?謝謝 |
42樓: | >>參與討論 |
作者: mxinfa 于 2006/4/7 18:27:00 發(fā)布:
圈圈幫小弟看看 用你的這個程序,按照我自己的硬件修改了一些必要的設(shè)置后 現(xiàn)象如下:led先是快閃三下,然后慢閃三下后熄滅,系統(tǒng)彈出提示無法識別,小弟我搞了好幾天了,沒眉目,麻煩幫我看看 |
43樓: | >>參與討論 |
作者: mxinfa 于 2006/4/8 11:20:00 發(fā)布:
慚愧,開發(fā)板自己做的沒有測試碼 我開發(fā)板用的單片機是ZE5系列的(很少有人用過可能),“51核+FPGA”的結(jié)構(gòu),40M晶振,4時鐘的,I/O方式還是總線方式是可以配置的,我按照圈圈的圖配置成了I/O方式,D+上我沒加1.5K的電阻,除了修改了幾個跟管腳有關(guān)的#define,別的地方都沒有動,降低時鐘就只有換晶振了(不想這么干。 USB_CS, USB_DMACK本來是接到I/O上的,按照圈圈的圖我分別把他們配置成了0和1,13腳跟17腳也是接到I/O的,看圈圈的懸空了,我看它們本來就是輸出腳就沒理會它們。只有suspend了,圈圈懸空了,我把它配置成0跟1都試了,效果是一樣的。 我對USB協(xié)議不太熟,想先把這個調(diào)通了,對照著程序再去看協(xié)議(直接看協(xié)議,頭大),幫幫我啊 |
44樓: | >>參與討論 |
作者: mxinfa 于 2006/4/8 12:57:00 發(fā)布:
附圖 另外,WR、RD信號、A0信號,DATA0-DATA7信號分別進行了測試,都能正確送出來,協(xié)議本身不熟,所以Bushound也不會使用,對其收到的數(shù)據(jù)也看不懂 圖片傳不上去啊,濕了很多次了,什么時候能傳的時候再傳吧 |
45樓: | >>參與討論 |
作者: computer00 于 2006/4/8 13:27:00 發(fā)布:
看來是比較暈。先回去看看書吧,急是急不來的。 從我第一次看USB協(xié)議,到開始做第一個USB程序,總共大概過了1年半的時間,可想USB的復(fù)雜程度。 當(dāng)然,我不是專門去看它,而是平時抽空出來看看。但不比RS232、SPI、I2C等那么簡單, 如果是這些,恐怕只要花幾個小時看點內(nèi)容,就可以開始寫程序了。 |
46樓: | >>參與討論 |
作者: BAILLSO 于 2006/4/13 10:29:00 發(fā)布:
To Bingoes 可以自己慢帶有貼片封裝的那種萬用板啊,我現(xiàn)在就在用,TSS0P的DS12和2MB的FLASH AT45DB161B都可以焊上 下一步我也打算試試usb了,硬件環(huán)境是有了,可是我軟件不太好,希望大家多多幫忙啊 |
47樓: | >>參與討論 |
作者: bugshadow 于 2006/4/14 20:57:00 發(fā)布:
圈圈就是強 |
48樓: | >>參與討論 |
作者: asdhja 于 2009/2/5 18:23:46 發(fā)布:
不會吧! 我下了,就沒有運行起過. ?系統(tǒng)啟動................................ 顯示無法識別的USB設(shè)備. 現(xiàn)在正在肯USB2.0的協(xié)議. |
|
|
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |