首先,我对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版本信息,即使我安装了它。在
有人知道我做错了什么吗?其他人有没有经历过这样的问题? 提前谢谢!在
恐怕我没有一个完整的答案,但有一些观察(我会让这个更简洁,作为一个评论,但我没有足够的代表性)。在
免责声明:我是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
包,可能还需要其他依赖项):在此之后,获取库版本应该可以工作:
^{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似乎工作得很好。
我会继续调查和更新这个答案,如果我发现更多。在
相关问题 更多 >
编程相关推荐