python2 python3 通信_python与USB通信

Date

周三 04 十一月 2015

Tags

USB

/

Python

PyUSB依赖于一些USB的驱动程序, 这个貌似叫做无驱驱动, 其中libusb是一统天下者, 当然就要用这个咯. 那么问题来了, libusb这个驱动是怎么装到要开发的设备上呢? 在windows下答案是Zadig, 这个和rtlsdr用的方案是一致的.

下载了最新的Zadig然后选list all device, 可选择的列表里只有WinUSB(这是微软的吧?), libusbk(贵圈好乱), libusb-win32. libusb官网不是说和libusb-win32合并了么? 好吧, 只有选这个了. 但这个相当于libusb 0.1版本的, 估计和OS有关, 我是老迈的xp.

装上后, 给Python装上PyUSB(官网下载后, 按里面说明装),

import usb

usb.core.show_devices()

呵呵~好简单~ PyUSB教程, 文档: 建一个bat文件 pydoc -b 运行, 然后在浏览器里找到usb这个package的帮助.

接下来搞PC-FX2-FPGA的Loopback, 悲剧, 在用device那个类的write方法给端点写数据时, 很是诡异, 各种错, 但按照AN61345中描述的用Control Center收发一个文件数据的方法, 工作正常, 经仔细思考, 可能有以下层面问题:

Cypress的FX2LP 工作在slave FIFO + 自动发包模式时, 在向上位机机发送时, 没满一个包是不会发的, 因此数数很重要, 数不对就等着timeout吧.

FPGA部分copy的Cypress的AN61345, 自己只是写了个简单的testbench玩了一下, 与其说是验证功能, 不如说是我学习它的工作原理.

cy7c68013a FW bug, 这个也是copy的AN61345.

PyUSB坑爹 or Python代码问题.

硬件错误.

于是为了简化问题, 上逻辑分析仪, 另外把这个打包的大小改小. 于是我查了 USB Spec 2.0 5.8.3 Bulk Transfer Packet Size Constraints, 并没有直说不能设小, 那就没问题咯, 于是在FX2中改了AUTOINLEN寄存器(slave.c)和Endpoint Descriptor(dscr.asm) 为2B, 尝试python继续各种错, 逻辑分析仪一看, 这是啥情况?

解释: Channel0 为clk, 10M, 由于采样率不够(?)的原因, 因此看起来奇怪, slrd与sloe拉低(有效)是因为看到FLAG A, 也就是EP2 EF(Empty Flag)拉高(不是Empty了), 这是应从FX2读入fpga的FIFO, 读完后由于FLAG A回到低, 此时应是从FPGA的FIFO到FX2, 可以看到FIFOADD选择了EP6, FLAG B是EP6的FF(Full Flag), 高意思是现在不是满的, 可以写. 但此时slwr应该拉低才对啊?

发2 word时, slwr工作正常. 但是, 细节图:

只写了一个word(上升沿写入). 为毛少一个?

纠结一段时间后终于找到问题, 而且是通过fpga的testbench找到的, 在看cy7c68013a的datasheet时, Slave FIFO Synchronous Write的那个图给了我灵感, 在数据读出后, Flag(由FX2驱动)会改变状态, 这个时间是tXFLG, 最大10ns. 于是我在isim里试了一下, 悲剧. 1个word.

2个word, 少发一个. 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拉低. 且会转换状态为wait_flag_ff. 也就是说会在FIFO锁存数据的同时转换状态, 则应是存在一个竞争关系. 于是我把slrd和sloe换为钟控.

搞定.

实测1个word.

后来又发现传输数据时, 多向FPGA内的FIFO写一个数据, 在和Cypress的例程战斗了一段时间后, 我最终放弃了, 自己写了一个状态机, 加一个Xilinx的FIFO IP, 搞定.

全对. :)

接下来实现了从FPGA发送数据到Python.

Python显示实时数据的框架由之前在python下实时显示麦克风波形与频谱提供. 将数据源从pyaudio换为PyUSB, 搞定.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php设置用户头像,PHP针对多用户实现更换头像功能

一个网站,其实说白了就是某几个特定功能的组合,而更换用户头像就在这些功能之中。今天就来做个测试,针对不同的用户,实现头像上传功能。先给大家展示下成品效果图:思路针对不同的用户上传头像,我们要为每一…

执行计划中cpu耗时_面试被问怎么排查遇到的系统CPU飙高和频繁GC,到底该怎么回答?...

处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排…

可视化数据包分析工具-CapAnalysis

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chenguang.blog.51cto.com/350944/1325742 可视化数据包分析工具-CapAnalysis 我们知道,Xplico是一个从pcap文件中解析出IP流…

网易云歌单添加到php,给自己的网站添加网易云音乐歌单吧^ ^

这个是怎么实现的?一起来看看吧APlayer首先我们需要一个音频播放器,这里我用到了APlayer,这是由bilibili前端大神DIYgod开源的播放器,有兴趣的可以去TA的主页看看,非常惊艳,这里我就不多说了我们看一下APla…

python学完面向对象之后_Python学完基础语法后,再往后应该学什么?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼第一阶段:Python语言及应用课程内容:Python语言基础,面向对象设计,多线程编程,数据库交互技术,前端特效,Web框架,爬虫框架,…

百度应用部署秘籍

2019独角兽企业重金招聘Python工程师标准>>> 【背景介绍】 传统PaaS采用sandbox实现app间的资源安全隔离,sandbox需要对运行环境和编程语言进行底层的功能限制,例如:禁止创建进程和线程,禁止部分系统调用,禁…

php新闻删除功能设计,php原生开发新闻站之删除新闻

我们前两篇文章都完成了新闻的添加、修改。那么我们这个节课程就给大家介绍删除新闻,这个比之前的两个都要简单点!首先创建一个new_delete.php,接着我们要在新闻列表页找到删除的按钮,给这个按钮加一个连接,我们同样需要通过id来传…

java8新特性_JAVA8十大新特性详解

一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sq…

spark1.6.1 on yarn搭建部署

注:本文是建立在hadoop已经搭建完成的基础上进行的。 Apache Spark是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写。该框架对资源调度,任务的提交、执行和跟踪,节点间的通信以及数据并行处理的内在底层操作都进…

php 精度问题怎么解决,JavaScript 中精度问题以及解决方案

JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示。其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在 ES5 规范 中指出了指数位E的取值范围是 [-1074, 971]。精度问题汇总想…

主线程是如何向子线程传递数据的?_c++ 利用thread创建线程

用进行多线程开发小时候,老师总是教育我们上课要专心,“一心不可二用”。可是CPU这个不听话的“熊孩子”偏偏却在一个芯片中加入了两个甚至多个运算核心,想要一“芯”二用。从硬件厂商的角度,通过增加CPU的运算核心,突…

php多维数组交集,求数组差/交集函数-php数组函数(二)

求数组差集函数函数只检查了多维数组中的一维。可以用 array_diff($array1[0], $array2[0]) 检查更深的维度。u:自定义函数比较,a(association):同时比较键和值。自定义函数callable $value_compare_func必须返回一个小于零,等于零…

寻找水王(2)

求解内容极其相似,相同的思路进行求解即可。同时删除4个不同的ID后,剩余数据中3个多数id仍然是多数ID。 上题只需要一个结果,而现在需要3个结果,上题用到的nTimes,也应改为3个计数器。现在我们需要3个变量来记录当前遍…

centos7.4php测试,CentOS7.4 通过yum安装php7.0

一、删除旧版本如果已经安装过php就先删除之前的版本。检查方法如下:yum list installed | grep php然后将安装的包进行删除比如 yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 ph…

正则过滤符号_多角度理解正则项

过拟合和欠拟合什么是过拟合和欠拟合过拟合:模型在训练集上效果好,在测试集上效果差欠拟合:在训练集上效果就不好产生过拟合的原因参数太多,模型复杂度太高数据量少,训练轮次过多样本中噪声较大,模型拟合了…

PHP页面中嵌套go语言,go语言嵌套类型的使用细节

1. 定义在Go语言中,嵌套类型是将已有的类型直接声明在新的结构类型里。被嵌入的类型被称为新的外部类型的内部类型。通过嵌入类型,与内部类型相关的成员变量会提升到外部类型上。就好像这些成员变量直接声明在外部类型一样。如下图所示:外部类…

jvm内存模型_JVM内存模型的相关概念

1.前言Android的虚拟机是根据移动设备的特点基于Java虚拟机(JVM)改进而来,虽然没有保留规范,但作为Java语言的使用者,了解一下JVM的规范还是有必要的。2.JVM内存模型JVM在执行Java程序时,会把它管理的内存划分为若干个的区域&…

php session bug,thinkphp2.x中session的BUG及解决办法

很多人出现一个TP构建的APP,出现SESSION相同导致用户未经授权就登陆了其它项目,N久没有找到原因。今天晚上跟踪了一下代码,找到了问题。主要原因在于TP在项目实例化的时候没有对SESSION进行配置就直接初始化了。/Core/App.class.php中看到这段…

LNMP/LEMP(PHP7.0.04+mysql5.7.12+nginx1.10.0)

预览:Installing Nginx with PHP 7 and MySQL 5.7 (LEMP) on Ubuntu 16.04 LTSThis tutorial exists for these OS versionsUbuntu 15.10 (Wily Werewolf)Ubuntu 14.04 LTS (Trusty Tahr)Ubuntu 13.04 (Raring Ringtail)Ubuntu 12.10 (Quantal Quetzal)Ubuntu 12.04 LTS (Preci…

length函数的头文件_Framebuffer 应用编程中涉及的 API 函数

本节程序的目的是&#xff1a;打开 LCD 设备节点&#xff0c;获取分辨率等参数&#xff0c;映射 Framebuffer&#xff0c;最后实现描点函数。5.2.1 open 函数在 Ubuntu 中执行“man 2 open”&#xff0c;可以看到 open 函数的说明&#xff1a;头文件&#xff1a;#include <s…