CH368 调试记录

 CH368 PCIE板卡的 R/W 操作,BIOS设置U 盘启动引导执行

代码

//jiawei ++++++
    clear_screen();
    
    //int cnt = 0;
    int bus368 = 0;
    int dev368 = 0;
    int fun368 = 0;
    int line_for_print=0;
    for(int bus=0; bus<256; ++bus){
        for(int dev=0; dev<32; ++dev) {
            for(int fun=0; fun<8;++fun) {
                // read confiureation space, start with [Vendor ID]: 01H ~ 02H, 16bits
                int vid = pci_config_read16(bus, dev, fun, 0x0); 
                if (vid == 0x1c00) {
                    bus368 = bus;
                    dev368 = dev;
                    fun368 = fun;
                    printf(line_for_print++, 0, "bus368: %x, dev368: %x, fun368: %x", bus, dev, fun);
                    printf(line_for_print++, 0, "vendor id: %x", vid);

                    // read confiureation space, [Device ID]: 02H ~ 03H, 16bits
                    int deviceid = pci_config_read16(bus, dev, fun, 0x02);
                    printf(line_for_print++, 0, "device id: %x", deviceid);
                    break;
                } 
            }
        }
    }

    uint32_t test_val = 0;
    //Device ID : 2 bytes, 5834H
    test_val = pci_config_read16(bus368, dev368, fun368, 0x02); 
    printf(line_for_print++, 0, "2(device id)  : 0x%x ", test_val);

    //Command reg : 16bits, default all zero: 0000 0000 0000 0000
    test_val = pci_config_read16(bus368, dev368, fun368, 0x04); 
    printf(line_for_print++, 0, "4(command reg): 0x%x ", test_val);
    uint32_t command_reg_val = test_val;

    //Status reg: 16bits, default value: 0010H / 0018H
    test_val = pci_config_read16(bus368, dev368, fun368, 0x06);
    printf(line_for_print++, 0, "6(status  reg): 0x%x ", test_val);

    // Revision ID, 8bits, default: 10H
    test_val = pci_config_read8(bus368, dev368, fun368, 0x08);
    printf(line_for_print++, 0, "8(revision id): 0x%x ", test_val);

    uint32_t baseaddr = pci_config_read32(bus368, dev368, fun368, 0x10);
    baseaddr = baseaddr & ~0x03; // clear last 2 bits of BAR
    printf(line_for_print++, 0, "baseaddr: 0x%x", baseaddr);

    int sub_vid = pci_config_read16(bus368, dev368, fun368, 0x2C); //same as VID
    printf(line_for_print++, 0, "2C: %x", sub_vid);

    int sub_did = pci_config_read16(bus368, dev368, fun368, 0x2E); //same as DID
    printf(line_for_print++, 0, "2E: %x", sub_did);


    while (1)  // LED Test, offset = 0xE8H, SCL: bit1     SCS: bit2
    {
        pci_config_write8(bus368, dev368, fun368, baseaddr + 0xE8, 0x40);
        printf(line_for_print, 0, "Test LED ON  -> reg = [0x%x]", 0x40);// 0100 0000
        sleep(1);
        pci_config_write8(bus368, dev368, fun368, baseaddr + 0xE8, 0xff);
        printf(line_for_print, 0, "Test LED OFF -> reg = [0x%x]", 0xff);
        sleep(1);
        
    }
//jiawei ---

测试结果

图1

问题

Issue @1

CH368官网手册中关于 Command register 命令寄存器介绍如下,复位默认值为全0

但是如上图1所示,实际读取的结果是 0x7(hex),也即 0111b,最低3 bits 全是1

当前的读取操作之前并没有任何CH368-EVT板卡的I/O 寄存器写操作,实际读取值与手册描述的默认值不匹配。

Issue @2

BAR baseaddr I/O基地址读取出来是0x3001, 最低位是1 (表示当前为I/O 空间地址?)

后续以此基地址执行I/O 寄存器 R/W 时,需要清除BAR低两位? 以0x3000 BAR基地址索引操作?

Issue @3

 I操作 I/O 空间 register之前,需要检查并设置配置空间 Command 寄存器(偏移地址04H)的最低位写入1,才能按照 BAR 地址 + 偏移地址 操作I/O ?

这种说法是正确的吗?

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: XCOM串口调试助手ch340是一款常用的串口调试工具,它可以通过计算机的USB接口与外部设备(如Arduino、嵌入式开发板等)进行通信。该调试助手内置了CH340芯片,支持USB转串口的功能。 使用XCOM串口调试助手ch340,我们可以方便地进行串口通信的测试与调试。首先,我们需要将调试助手与计算机连接,这可以通过将ch340芯片插入计算机的USB接口来实现。然后,我们可以打开串口调试助手的软件界面,选择对应的串口号,并设置波特率等参数。 在与外部设备建立串口通信后,我们可以使用串口调试助手发送和接收数据。发送数据可以通过输入需要发送的字符或数据,并点击发送按钮来实现。同时,通过串口调试助手的接收区域,我们可以实时地接收来自外部设备的数据。 除了基本的串口通信功能外,XCOM串口调试助手ch340还可以支持数据透传、数据录制、波形显示等功能。透传功能可以将计算机上的数据直接转发到外部设备,实现计算机和外部设备的数据互通。数据录制功能可以将串口通信过程中的数据进行记录,方便后期分析和调试。波形显示功能可以将接收到的数据按照波形形式呈现,更加直观地观察数据变化。 总而言之,XCOM串口调试助手ch340是一款功能强大、易于使用的串口调试工具。它在各种嵌入式开发、通信调试等领域都有着广泛的应用。 ### 回答2: XCOM串口调试助手CH340是一款常用于串口通信调试的工具。它通常由CH340芯片驱动,能够将计算机的USB端口转换为串口接口,用于连接计算机和其他设备之间的数据传输。 XCOM串口调试助手CH340的使用非常简便。首先,我们需要将CH340串口调试助手插入计算机的USB接口,并安装相应的驱动程序。安装完成后,我们可以打开相应的串口调试助手软件。 在软件界面中,我们可以选择要连接的串口号,通常是COM1、COM2等等。然后,我们可以设置波特率、数据、停止和奇偶校验等通信参数。这些参数需要与要连接的设备一致,以保证数据的正确传输。 接下来,我们可以使用串口调试助手进行数据收发。我们可以输入要发送的指令或数据,并点击发送按钮。通过监视接收数据窗口,我们可以实时查看设备返回的数据。 此外,XCOM串口调试助手CH340还具备其他一些功能,如自定义指令集合、脚本编写和自动化测试等。我们可以根据具体需求进行设置和操作。 总之,XCOM串口调试助手CH340是一款方便实用的串口调试工具。它可以帮助我们快速进行串口通信调试,用于连接计算机和其他设备之间的数据传输。无论是工程师还是爱好者,都能通过该工具轻松进行串口调试操作。 ### 回答3: xcom串口调试助手是一款基于CH340芯片的串口调试工具。CH340芯片是一种常用的USB转串口芯片,通过连接计算机的USB接口,可以实现将计算机的串口信号转换为USB信号。xcom串口调试助手使用CH340芯片,可以连接计算机与外部设备的串口进行通信,方便进行串口调试和数据传输。 xcom串口调试助手简单易用,操作界面友好。用户只需将CH340芯片与计算机通过USB线连接,打开xcom串口调试助手软件,选择合适的串口号和波特率,并设置数据、停止、校验等参数,即可开始进行串口调试。通过该调试助手,用户可以发送和接收串口数据,监测串口通信状态,以便进行故障排查和调试。 除了串口调试功能,xcom串口调试助手还提供了丰富的辅助功能和工具。例如,它可以自动检测串口设备的插拔状况,方便用户了解当前串口设备的连接情况;同时还支持数据的发送和接收记录,用户可以保存和查看历史数据记录,方便分析和对比。 总之,xcom串口调试助手是一款使用方便、功能强大的串口调试工具,基于CH340芯片的设计使得它能够与计算机进行稳定的串口通信。无论是在电子设计、嵌入式系统开发、无线通信等领域,xcom串口调试助手都能为用户提供便捷的串口调试和数据交流工具,帮助用户轻松解决串口通信问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值