|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
問一個(gè)nrf905收數(shù)據(jù)偶爾出錯(cuò)(大概千分之一的出錯(cuò)概率)問題 |
| 作者:wuheelht 欄目:通信技術(shù) |
我用905進(jìn)行通信,有近端A和遠(yuǎn)端B,近端A向遠(yuǎn)端B發(fā)送查詢命令,遠(yuǎn)端B收到查詢命令后返回?cái)?shù)據(jù)給近端A。經(jīng)過一段時(shí)間的調(diào)試,近端A可以查詢到遠(yuǎn)端B的數(shù)據(jù),但近端A收到的遠(yuǎn)端B返回的數(shù)據(jù)會(huì)偶爾出錯(cuò),出錯(cuò)時(shí)收到的一包數(shù)據(jù)全是亂的(收到的一包數(shù)據(jù)長度為32字節(jié)),且無規(guī)律(大概一千包錯(cuò)一包)。近端A發(fā)出查詢命令只有一包,發(fā)出后就轉(zhuǎn)成接收方式,遠(yuǎn)端B平時(shí)總是接收方式,收到數(shù)據(jù)后轉(zhuǎn)成發(fā)送方式,連續(xù)發(fā)送4包數(shù)據(jù)給近端A。近端A發(fā)送查詢命令為2包/秒。 905發(fā)送時(shí)是采用連續(xù)發(fā)送的方式,即如果發(fā)送的數(shù)據(jù)很長,我就分N(N<=4)包,這N包順序發(fā)出,發(fā)出一包后延時(shí)10ms發(fā)送下一包。 905接收時(shí)是采用中斷方式,即將DR作為單片機(jī)的外部中斷源。在中斷處理函數(shù)中讀出收到的數(shù)據(jù)。 我還作過試驗(yàn),近段A向遠(yuǎn)端B發(fā)送數(shù)據(jù),而遠(yuǎn)端B不回應(yīng),只接收數(shù)據(jù),即A發(fā),B收。我發(fā)現(xiàn)B接收到的A的查詢包出錯(cuò)概率大概7萬包數(shù)據(jù)才錯(cuò)一條(可以接受的出錯(cuò)概率),A發(fā)送的速率是40包/秒。我想會(huì)不會(huì)是由于經(jīng)常在發(fā)送和接收方式之間轉(zhuǎn)換,導(dǎo)致905出錯(cuò)的概率會(huì)升高呢,但千分之一的概率太高了點(diǎn),我也采用延時(shí)等方法,但無效果。請教壇上高人,有沒有碰到這種情況的? |
| 2樓: | >>參與討論 |
| 作者: chunyang 于 2006/9/6 18:40:00 發(fā)布:
切換后要待器件穩(wěn)定后才能發(fā)送數(shù)據(jù),注意延時(shí)的位置 合理的協(xié)議也很重要。 |
|
| 3樓: | >>參與討論 |
| 作者: wuheelht 于 2006/9/6 22:13:00 發(fā)布:
謝謝 切換的延時(shí)時(shí)間長度遠(yuǎn)大于905的PDF文件上說的時(shí)間長度。而且今天下午還作了個(gè)試驗(yàn),A向B連續(xù)發(fā)送200包數(shù)據(jù)(1.5秒),每包32字節(jié),B接收正確。明天用2個(gè)A來作實(shí)驗(yàn)看看,1個(gè)A發(fā),1個(gè)A不發(fā),是不是同時(shí)收到錯(cuò)誤數(shù)據(jù)。 |
|
| 4樓: | >>參與討論 |
| 作者: chunyang 于 2006/9/7 9:37:00 發(fā)布:
如果你妥善處理了芯片的工作時(shí)序和步驟 那剩下就是晶體離散性、天線匹配等問題了。 |
|
| 5樓: | >>參與討論 |
| 作者: wuheelht 于 2006/9/12 13:32:00 發(fā)布:
發(fā)現(xiàn)原因了!但不知為什么。 發(fā)現(xiàn)原因了!但不知為什么。我做了個(gè)試驗(yàn),只有A發(fā),B斷電,A發(fā)送成功一包數(shù)據(jù)后馬上轉(zhuǎn)為接收狀態(tài),我發(fā)現(xiàn):A偶爾(千分之一概率)會(huì)進(jìn)接收中斷,接受中斷是由DR產(chǎn)生的,我在發(fā)送時(shí)將中斷使能關(guān)閉了,通過示波器可以看到發(fā)送成功6mS(此時(shí)已經(jīng)通過控制TX_EN將DR置低,再開中斷)后,DR又變高了,收到的是亂碼。按理說我發(fā)送成功后且將DR置低后到下次發(fā)送之間DR應(yīng)該為低才對呀。請問chunyang碰到過這種情況沒? |
|
| 6樓: | >>參與討論 |
| 作者: chunyang 于 2006/9/13 10:45:00 發(fā)布:
那就是你設(shè)置的問題了 需要加深對器件手冊的閱讀和理解。 |
|
| 7樓: | >>參與討論 |
| 作者: wuheelht 于 2006/9/13 22:33:00 發(fā)布:
905的PDF我仔細(xì)讀了 對這種現(xiàn)象,從PDF中找不到理論解釋,而且我試了很多種方法,關(guān)鍵就是從發(fā)送狀態(tài)轉(zhuǎn)為接收狀態(tài)時(shí)會(huì)出問題。請問chunyang大俠對你的905作過誤碼率測試沒有?我想知道到底是905的特性還是我程序的問題。 |
|
| 8樓: | >>參與討論 |
| 作者: ar3000a 于 2006/9/14 1:54:00 發(fā)布:
dr只能讀取,"把dr置低"肯定不對。 |
|
| 9樓: | >>參與討論 |
| 作者: dianzihan 于 2006/9/14 8:47:00 發(fā)布:
確保已經(jīng)通過控制TX_EN將DR置低了嗎? 確保已經(jīng)通過控制TX_EN將DR置低了嗎? |
|
| 10樓: | >>參與討論 |
| 作者: chunyang 于 2006/9/14 10:52:00 發(fā)布:
不要懷疑器件 芯片的正確配置很重要。 |
|
| 11樓: | >>參與討論 |
| 作者: wuheelht 于 2006/9/14 10:59:00 發(fā)布:
可以確定 我是通過TX_EN將DR置0的。A的流程是 trx_en=0 + tx_en=1 + 延時(shí)(進(jìn)入standby狀態(tài))---> 寫發(fā)送地址和發(fā)送數(shù)據(jù)---> trx_en=1(啟動(dòng)發(fā)送) + 延時(shí)(等待發(fā)送完成) + tx_en=0(轉(zhuǎn)為接收狀態(tài))。 |
|
| 12樓: | >>參與討論 |
| 作者: wuheelht 于 2006/9/14 15:49:00 發(fā)布:
今天下午發(fā)現(xiàn)跟本機(jī)地址有關(guān)!。 今天又仔細(xì)閱讀了PDF,發(fā)現(xiàn)我的近端A地址為4字節(jié)長,為0000,將地址更改為非全0就不會(huì)收到討厭的DR上跳沿了,看來全0的地址容易受到自己發(fā)出的數(shù)據(jù)的干擾啊?磥磉是要仔細(xì)鉆研幫助文件啊,不過905的幫助文件敘述比較含糊。CC1000的幫助文件就很嚴(yán)謹(jǐn),不過CC1000使用起來太復(fù)雜了,寄存器太多。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |