armV8 下调试232-485小结,

1,网上购买了常用芯片的 usb转485转换器,价格100以内,其中使用的常用转换芯片为 FTDI 公司的,转自百度-英商飞特帝亚有限公司(FTDI)是设计和供应USB芯片和软件方案的专业厂商。FTDI将易于实现的IC设备和经过千锤百炼的免费USB固件和软件驱动组合起来,提供了实现USB的快捷方式。公司的USB单信道和多信道接口可外设成具有易于使用特性的的UART或FIFO界面。这些现行的设备可用于传统 USB至RS232/RS422转换器应用, 也可用于MCU,PLD或FPGA至USB的快速界面。有非常多的评估工具软件和模块可用来设计评估FTDI的芯片。其公司主要芯片如下

armV8 下调试232-485小结,_第1张图片官网上有详细驱动下载,注意windows下win8 win10自动安装驱动,而ubuntu下,我使用的是uart,FT232R芯片,利用虚拟串口,故查找驱动时候,开始找VCP D2XX D3XX, 因为我使用的是232R,如果芯片直接安装在板子上,认为是用D2XX驱动,而我是虚拟串口,所以选择了,vcp,通过官网vcp资料显示,在ubuntu11.1时,all ftdi devices已经集成到kernel 3.0.0.19 上面了,参考官网:https://www.ftdichip.com/FTDrivers.htm ,查看  vcp driver  https://www.ftdichip.com/Drivers/VCP.htm,,故注意 armV8 下调试232-485小结,_第2张图片

通过文档,因为我单独安装过dxx的驱动,不确定是kernal集成 还是我之前安装的可行,上述步骤可以不用一步步做,

我直接  1,dmesg | grep FTDI  发现, 最后那句, ttyusb0 已经attached,故 没有按照上面编写那个文件 99-usbftdi.rules

,(而我后面 发现只有sudo下root权限才能操作serial,也更改了/etc/udev/,可以增加udev规则来实现,具体方法如下:sudo vim /etc/udev/rules.d/70-ttyusb.rules增加如下内容:KERNEL=="ttyUSB[0-9]*",MODE="0666"保存,重新插入USB转串口,普通用户就能搞定了,  不知道 这个 99 和70 rules作用是啥,个人感觉因为linux下一切皆文件,这个是对usb的设置文件,写入keral权限)

2,很重要的一点,sudo apt-get remove brltty, ubuntu下必remove这个才可以使用。

3,插入 串口设备,如果你输入 cd /dev, ls 看到 ttyUSB0 或者ttyUSB1,等表示 已经识别到了这个设备,说明驱动正常。否则需要重新安装驱动,参考 vcp drives 和 d2xx drivers。(疑问: 出现过两次,插拔同一个硬件,只有一个这个com的情况下,发现一会ttyusb0,一会ttyusb1?原因待查),其中我走了个弯路,按照 别人给我的驱动找到了armv8下的 d2xx 驱动,libftd2xx-arm-v8-1.4.8.gz,解压 tar xfvz  libftd2xx-arm-v8-1.4.8.tgz(gunzip  libftd2xx-arm-v8-1.4.8.gz ,tar -vxf libftd2xx-arm-v8-1.4.8.tar  tar -vxf   -vxf libftd2xx-arm-v8-1.4.8),按照要求,1,cd  build  sudo -s  su 后  ,2,cp libftd2xx.* /usr/local/lib  ,3,  chmod 0755 /usr/local/lib/libftd2xx.so.1.4.8, ,4,  ln -sf /usr/local/lib/libftd2xx.so.1.,4.8 /usr/local/lib/libftd2xx.so 安装驱动完毕。 然后 cd exsamples下后make -B , cd 到eeprom下发现 FT_Open failed, 看文档意识是让我们open之前先去FT_SetVIDPID

 

,后面我执行这个setvidpid 发现一样不行,所以应该是用vcp,而不用d2xx。

 

4,为了防止走弯路,先用su权限运行程序 看看python下是否成功,方法:

sudo apt-get remove python-serial

sudo apt-get install python-pip

sudo pip install pyserial

执行 程序:-摘自;吴疆 地址:https://www.cnblogs.com/deeplearning1314/p/10818529.html

# -*- coding:utf-8 -*-
# Author: WUJiang
# 运行环境为Ubuntu18.04&Python2.7

import serial
import time

ser = serial.Serial("/dev/ttyUSB0", 9600) # 选择串口,并设置波特率
if ser.is_open:
    print("port open success")
    # hex(16进制)转换为bytes(2进制),应注意Python2.7与Python3.7此处转换的不同
    send_data = 'ff010055000056'
    send_data = send_data.decode('hex')    # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
    ser.write(send_data)   # 发送命令
    time.sleep(0.1)        # 延时,否则len_return_data将返回0,此处易忽视!!!
    len_return_data = ser.inWaiting()  # 获取缓冲数据(接收数据)长度
    if len_return_data:
        return_data = ser.read(len_return_data)  # 读取缓冲数据
        # bytes(2进制)转换为hex(16进制),应注意Python2.7与Python3.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制
        str_return_data = str(return_data.encode('hex'))
        feedback_data = int(str_return_data[-6:-2], 16)
        print(feedback_data)
else:
    print("port open failed")

###运行环境为Ubuntu18.04&Python3.6
import serial
import time
ser = serial.Serial("/dev/ttyUSB1", 9600) # 选择串口,并设置波特率
if ser.is_open:
    print("port open success")
    # hex(16进制)转换为bytes(2进制),应注意Python2.7与Python3.7此处转换的不同
    send_data = 'ff010055000056'
    send_data = bytes.fromhex(send_data)    # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
    print(send_data)
    ser.write(send_data)   # 发送命令
    time.sleep(0.9)        # 延时,否则len_return_data将返回0,此处易忽视!!!
    len_return_data = ser.inWaiting()  # 获取缓冲数据(接收数据)长度
    if len_return_data:
        return_data = ser.read(len_return_data)  # 读取缓冲数据
        # bytes(2进制)转换为hex(16进制),应注意Python2.7与Python3.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制
        str_return_data = str(return_data.hex())
        feedback_data = int(str_return_data[-6:-2], 16)
        print(feedback_data)
else:
    print("port open failed")

返回值正常。

5,因为我是虚拟环境 新的用户,所以更改了权限,另外在新用户下安装了:

pip install pyftdi

pip install serial

你可能感兴趣的:(485,-python,硬件调试,arm,linux)