You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下使用HidApi读取TRF7970A EVM遇DEVICE_ERROR及初始化失败问题

问题分析与解决方案

核心问题

你的设备是USB转UART桥控制器,对应/dev下的串口设备/dev/tty.usbserial-0001,但你错误地使用了HidApi(针对HID类设备的库)来操作它。HID和UART是完全不同的USB设备类别,HidApi无法识别和操作串口设备,这就是所有操作返回"Device not initialised"的原因。

解决步骤

1. 替换为串口通信库

放弃HidApi,使用专门的Java串口通信库,比如jSerialComm(无需额外依赖,配置简单)或RXTX。

2. jSerialComm示例代码

以下是适配你的设备的示例代码:

import com.fazecast.jSerialComm.SerialPort;
import java.io.InputStream;

public class TRF7970ASerialReader {
    public static void main(String[] args) {
        // 匹配你的串口设备路径
        SerialPort serialPort = SerialPort.getCommPort("/dev/tty.usbserial-0001");
        // 设置TRF7970A EVM的串口参数(需匹配开发板配置,常见为9600波特率)
        serialPort.setBaudRate(9600);
        serialPort.setNumDataBits(8);
        serialPort.setNumStopBits(1);
        serialPort.setParity(SerialPort.NO_PARITY);

        if (serialPort.openPort()) {
            System.out.println("串口打开成功");
            // 设置读取超时
            serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 1000, 0);

            try (InputStream in = serialPort.getInputStream()) {
                byte[] buffer = new byte[64];
                int bytesRead = in.read(buffer);
                if (bytesRead > 0) {
                    System.out.println("读取到数据:" + new String(buffer, 0, bytesRead));
                } else {
                    System.out.println("未读取到数据");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                serialPort.closePort();
            }
        } else {
            System.out.println("无法打开串口,请检查权限或设备连接");
        }
    }
}

3. 前置准备

  • 添加jSerialComm依赖到你的项目:
    Maven依赖:
    <dependency>
        <groupId>com.fazecast</groupId>
        <artifactId>jSerialComm</artifactId>
        <version>2.9.0</version>
    </dependency>
    
  • 确认串口参数与TRF7970A EVM的配置一致(可参考开发板手册,通常波特率为9600或115200)。

4. 硬件连通性验证

在运行Java代码前,先用系统工具验证串口是否正常:

# 使用screen工具连接串口,测试是否能收到数据
screen /dev/tty.usbserial-0001 9600

如果screen能正常连接并收到开发板的数据,说明硬件和权限没问题,再运行Java代码即可。

补充说明

  • 你之前执行的sudo chmod -R 777 /dev/tty.usbserial-0001权限设置是有效的,但如果不想每次都手动修改,可以添加用户到uucp组:
    sudo usermod -aG uucp $USER
    
    重启后生效,无需再手动改权限。

内容的提问来源于stack exchange,提问作者Koushik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:35:08