一、现象
使用ft232 usb转串口芯片,经常出现设备拔出后仍然显示设备连接:
而实际串口设备根本不存在,重新插入ft232也无法使用。
换个usb口能解决问题,重启mac也可以解决。
二、解决方法
每次重启mac很麻烦,所以查找了原因,这里和我的问题是一样的:https://superuser.com/questions/1135730/how-to-release-reset-serial-port-ftdi-devices-mac-osx,里面提到了两个解决办法:
方法1
删掉FT232驱动:/System/Library/Extensions/FTDIUSBSerialDriver.kext
因为系统本身已经带有apple自带的FT232驱动了:/System/Library/Extensions/AppleUSBFTDI.kext
两个在一起可能有问题,所以删掉一个,保留apple自带的。
方法2
上面删掉的是外部的,留下apple自带的。方法2则是删掉自带的,保留外部的。
- 官网下载驱动并安装:
- ft232官网下载最新版驱动:https://www.ftdichip.com/Drivers/VCP.htm,适用于macos 10.13的最新版驱动版本是 2.4.2。
- 安装,安装完后问题可能还会存在。
通过查看日期发现,驱动不在/System/Library/Extensions/FTDIUSBSerialDriver.kext,这是一个2012年的很老的文件。
新文件在 /Library/Extensions/FTDIUSBSerialDriver.kext,这才是2017年驱动发布的日期。
- 关闭csrutil:(我的电脑早就关闭了,没必要执行)
- 重启电脑,按住 CMD+R 进入recovery模式
- 打开terminal,输入:csrutil disable,电脑会提示你重启已生效。
- 重启进入正常模式,关掉apple自带的驱动:
cd /System/Library/Extensions/
sudo mv AppleUSBFTDI.kext AppleUSBFTDI.disabled
sudo touch /System/Library/Extensions
chgrp -R wheel FTDIUSBSerialDriver.kext (可省略,安装完后默认已经是wheel了)
sudo mv D2zzHelper.kext D2xxHelper.disabled (找不到这个文件,省略) - 打开csrutil:
- 重启电脑,按住 CMD+R 进入recovery模式
- 打开terminal,输入:csrutil enable,重启
我的实际操作
把 /System/Library/Extensions/ 里的两个驱动全部删掉,保留 /Library/Extensions/ 里的驱动,具体过程如下:
- 官网下载驱动并安装:
- ft232官网下载最新版驱动:https://www.ftdichip.com/Drivers/VCP.htm,适用于macos 10.13的最新版驱动版本是 2.4.2。
- 安装,安装完后驱动文件在 /Library/Extensions/FTDIUSBSerialDriver.kext,这个文件日期2017年,是驱动发布的日期。
- 删掉 /System/Library/Extensions/ 里的两个驱动文件:
cd /System/Library/Extensions/
sudo mv FTDIUSBSerialDriver.kext FTDIUSBSerialDriver.disabled # 日期2012年
sudo mv AppleUSBFTDI.kext AppleUSBFTDI.disabled # 苹果自带,日期2017年 - 重启
再用一段时间看下效果,今天是2019年12月24日。
2020年03月04日:用了两个多月了,没有再出现过问题,不用再被迫重启mac了。
2020年04月10日补充
之前相当于有三个选择:
- /System/Library/Extensions/FTDIUSBSerialDriver.kext,系统自带,日期2012年,会导致USB崩掉,重启才能恢复。
- /System/Library/Extensions/AppleUSBFTDI.kext,系统自带,日期2017.12.11
- /Library/Extensions/FTDIUSBSerialDriver.kext,从官网下载驱动后安装的位置,日期2017.5.9
之前使用的是3号驱动,想着是官网最新应该最好吧。
使用时也一直没发现问题,直到最近测试串口,发现FT232会有高达几百ms的延时。于是想着是不是驱动问题,换成2号驱动,延时降低到10ms以内。
所以,还是使用apple自带的FT232驱动吧(/System/Library/Extensions/AppleUSBFTDI.kext)!日期更新,估计是针对apple设备单独做的改动。