Pylibftdi库不工作(串行模式,UM232H)

2024-05-19 06:48:11 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我对python和Linux都很陌生。 也就是说,我正在尝试使用pylibftdi库与FTDI UM232H芯片通信。 我在Linux Ubuntu12.04上运行我的脚本。 我安装了我在这里得到的库: http://pylibftdi.readthedocs.org/en/latest/ 显然一切都很好。 我还成功地运行了一些例子。在

然后我试着写一些代码来与设备通信:我把它连接在总线供电的配置中(为了从USB获得电源),然后我短路了TX和RX的引脚,这样我在TX上发送的内容将在RX上被读回。 我没有得到任何错误,但我不能读回任何关于RX的东西。 下面是我非常简单的代码:

import pylibftdi as p    
import time

test = p.Driver()
print test.list_devices()
#This is not working
#print test.libftdi_version()

dev1 = p.Device(device_id='FTUBL36A', mode='t')#, chunk_size = 0)

dev1.flush()

dev1.baudrate = 9600
len = dev1.write('Hello World')
time.sleep(1)
res = dev1.read(len)

print 'res: ', res

我也无法获得libftdi\u版本信息,即使我安装了它。在

有人知道我做错了什么吗?其他人有没有经历过这样的问题? 提前谢谢!在


Tags: 代码testimportlendev1timelinuxres
1条回答
网友
1楼 · 发布于 2024-05-19 06:48:11

恐怕我没有一个完整的答案,但有一些观察(我会让这个更简洁,作为一个评论,但我没有足够的代表性)。在

免责声明:我是pylibftdi的作者

libftdi版本/安装

Ubuntu libftdi包(甚至最新的13.10)是0.20。这尤其令人困惑/恼火,因为Ubuntu包的名称是“libftdi1”。在(real)libftdi 1.0之前,没有ftdi_get_library_version()函数,因此libftdi_version()无法与Ubuntu默认包一起使用。pylibftdi的下一个版本认识到了这一点并给出了适当的响应。在

要安装1.0,请按照http://developer.intra2net.com/mailarchive/html/libftdi/2013/msg00014.html上的说明操作(例如,下面的操作对我很有用—注意,我以前安装了Ubuntu libftdi1包,可能还需要其他依赖项):

$ sudo apt-get install cmake libusb-1.0
$ git clone git://developer.intra2net.com/libftdi
$ cd libftdi
$ git checkout tags/v1.0
$ mkdir build; cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig  # ensure the new library is recognised

在此之后,获取库版本应该可以工作:

^{pr2}$

UM232H数据读取错误

请注意,最新的libftdi(重复上面的内容,但使用git checkout master)似乎对我来说工作得稍微好一点,而且上面的程序在UM232H中非常适合我(我显然省略了device=...参数,但在其他方面保持不变)。如果我将'Hello World'替换为'Hello World' * 10,写入和读取一个较长的字符串,则返回一个截断值,通常只有29个字节。我不知道为什么它是这个值;在早期的libftdi版本中,它似乎总是返回17个字节。很奇怪。在

对于其他设备(UB232R,UM232R),这一切都如预期的那样完美地工作,所以在(不可否认的)你可以选择设备的情况下,你可以考虑切换。。。注意,FT232H芯片相对较新,libftdi中的支持可能不如旧设备的支持可靠,但同样可能的是,我错误地假设它应该以类似于pyllibftdi中旧设备的方式工作。在

其他想法

  • 我尝试过将ftdi_sio(在/etc/modprobe.d/blacklist.conf的末尾添加blacklist ftdi_sio),这会阻止Linux内核在插入设备时做什么(不带这个插件时,Rx/Tx指示灯闪烁几次,然后加载ftdi峎sio模块。我不确定这是否有必要,也不确定是否有区别。

  • 请注意,由于设备中的内部缓冲和各种驱动层(包括USB),无法保证read()将返回以前写入设备的任何内容(假设是外部Tx->Rx环回)。这些只是流,框架应该在应用层完成。话虽如此,但它在UB232R上“正常工作”,即使考虑到这一点,UM232H似乎在串行模式下与pylibftdi有问题。

  • Bitbang模式对于UM232H/pylibftdi似乎工作得很好。


我会继续调查和更新这个答案,如果我发现更多。在

相关问题 更多 >

    热门问题