日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python2 python3 通信_python与USB通信

發(fā)布時間:2025/3/11 python 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python2 python3 通信_python与USB通信 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Date

周三 04 十一月 2015

Tags

USB

/

Python

PyUSB依賴于一些USB的驅(qū)動程序, 這個貌似叫做無驅(qū)驅(qū)動, 其中l(wèi)ibusb是一統(tǒng)天下者, 當(dāng)然就要用這個咯. 那么問題來了, libusb這個驅(qū)動是怎么裝到要開發(fā)的設(shè)備上呢? 在windows下答案是Zadig, 這個和rtlsdr用的方案是一致的.

下載了最新的Zadig然后選list all device, 可選擇的列表里只有WinUSB(這是微軟的吧?), libusbk(貴圈好亂), libusb-win32. libusb官網(wǎng)不是說和libusb-win32合并了么? 好吧, 只有選這個了. 但這個相當(dāng)于libusb 0.1版本的, 估計和OS有關(guān), 我是老邁的xp.

裝上后, 給Python裝上PyUSB(官網(wǎng)下載后, 按里面說明裝),

import usb

usb.core.show_devices()

呵呵~好簡單~ PyUSB教程, 文檔: 建一個bat文件 pydoc -b 運行, 然后在瀏覽器里找到usb這個package的幫助.

接下來搞PC-FX2-FPGA的Loopback, 悲劇, 在用device那個類的write方法給端點寫數(shù)據(jù)時, 很是詭異, 各種錯, 但按照AN61345中描述的用Control Center收發(fā)一個文件數(shù)據(jù)的方法, 工作正常, 經(jīng)仔細思考, 可能有以下層面問題:

Cypress的FX2LP 工作在slave FIFO + 自動發(fā)包模式時, 在向上位機機發(fā)送時, 沒滿一個包是不會發(fā)的, 因此數(shù)數(shù)很重要, 數(shù)不對就等著timeout吧.

FPGA部分copy的Cypress的AN61345, 自己只是寫了個簡單的testbench玩了一下, 與其說是驗證功能, 不如說是我學(xué)習(xí)它的工作原理.

cy7c68013a FW bug, 這個也是copy的AN61345.

PyUSB坑爹 or Python代碼問題.

硬件錯誤.

于是為了簡化問題, 上邏輯分析儀, 另外把這個打包的大小改小. 于是我查了 USB Spec 2.0 5.8.3 Bulk Transfer Packet Size Constraints, 并沒有直說不能設(shè)小, 那就沒問題咯, 于是在FX2中改了AUTOINLEN寄存器(slave.c)和Endpoint Descriptor(dscr.asm) 為2B, 嘗試python繼續(xù)各種錯, 邏輯分析儀一看, 這是啥情況?

解釋: Channel0 為clk, 10M, 由于采樣率不夠(?)的原因, 因此看起來奇怪, slrd與sloe拉低(有效)是因為看到FLAG A, 也就是EP2 EF(Empty Flag)拉高(不是Empty了), 這是應(yīng)從FX2讀入fpga的FIFO, 讀完后由于FLAG A回到低, 此時應(yīng)是從FPGA的FIFO到FX2, 可以看到FIFOADD選擇了EP6, FLAG B是EP6的FF(Full Flag), 高意思是現(xiàn)在不是滿的, 可以寫. 但此時slwr應(yīng)該拉低才對啊?

發(fā)2 word時, slwr工作正常. 但是, 細節(jié)圖:

只寫了一個word(上升沿寫入). 為毛少一個?

糾結(jié)一段時間后終于找到問題, 而且是通過fpga的testbench找到的, 在看cy7c68013a的datasheet時, Slave FIFO Synchronous Write的那個圖給了我靈感, 在數(shù)據(jù)讀出后, Flag(由FX2驅(qū)動)會改變狀態(tài), 這個時間是tXFLG, 最大10ns. 于是我在isim里試了一下, 悲劇. 1個word.

2個word, 少發(fā)一個. SLWR也只有一個.

always@(*)begin

if((current_loop_back_state == loop_back_read) & (flag_ef == 1'b1))begin

slrd_n = 1'b0;

sloe_n = 1'b0;

end else begin

slrd_n = 1'b1;

sloe_n = 1'b1;

end

end

always@(*) begin

...

loop_back_read:begin

if(flag_ef == 1'b0)

next_loop_back_state = loop_back_wait_flag_ff;

else

next_loop_back_state = loop_back_read;

end

...

問題代碼, 這樣子生成的組合邏輯, 只要FLAG EF是1, 就會讓slrd和sloe拉低. 且會轉(zhuǎn)換狀態(tài)為wait_flag_ff. 也就是說會在FIFO鎖存數(shù)據(jù)的同時轉(zhuǎn)換狀態(tài), 則應(yīng)是存在一個競爭關(guān)系. 于是我把slrd和sloe換為鐘控.

搞定.

實測1個word.

后來又發(fā)現(xiàn)傳輸數(shù)據(jù)時, 多向FPGA內(nèi)的FIFO寫一個數(shù)據(jù), 在和Cypress的例程戰(zhàn)斗了一段時間后, 我最終放棄了, 自己寫了一個狀態(tài)機, 加一個Xilinx的FIFO IP, 搞定.

全對. :)

接下來實現(xiàn)了從FPGA發(fā)送數(shù)據(jù)到Python.

Python顯示實時數(shù)據(jù)的框架由之前在python下實時顯示麥克風(fēng)波形與頻譜提供. 將數(shù)據(jù)源從pyaudio換為PyUSB, 搞定.

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的python2 python3 通信_python与USB通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。