为什么我在使用libusb与PIC 18F2550通信时读取或写入超过3个字节时会出现错误
Why do I get an error when read or write more than 3 bytes using libusb to communicate with a PIC 18F2550?
我在Qt中使用libusb与PIC微控制器18F2550通信。问题是,在我尝试发送或读取超过三个字节之前,它一直工作正常。为什么会发生这种情况?
我尝试过使用bulk_read传输和interrupt_read。当我将缓冲区的大小设置为等于或小于3时,那么传输就可以完美地工作,使用批量或中断。当这个大小大于3时,我得到的buffer1和buffer[2]还可以,但其余的都是错误的。
我得到的错误是由于超时。作为输入,我使用端点0x81。
更多信息:
大容量或中断读取的返回值为-116。我从PIC发送到PC的前两个十六进制字节([0]和1)中的数字是0x02D6。有了这个数字,buffer[0]
=-42(当它应该是0xD6=214时),buffer[1]
=2是正确的。在[2]
和[3]
字节中,数字是0x033D,我得到[2]
=61=0x3D。这是正确的,[3]
=-42???(如[0]
)。
第五个字节是1,SW显示2???
。可能是微控制器有问题,因为我把它编程为HID USB?
我不认为HID是个问题。我以前也遇到过类似的问题;PIC将在传输大数据时随机超时。结果是MCU上出现了一些电压波动。你是如何连接水晶的?VUSB上有电容器来调节吗?
构建PIC18F USB设备是一个关于构建PICHID的很棒的教程,尽管它不是基于18F2550而是基于18F4550,但它应该非常相似,我相信你可以从原理图和硬件设置中获得很多。这是我的PIC-USB项目的起点。
相关文章:
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 在 Linux 中,uint32_t从 4 个字节更改为 6 个字节
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 向指针地址添加 20 个字节偏移量
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- C++/地址空间:每个地址 2 个字节?
- 为什么这个结构需要 24 个字节
- 为什么带有 vptr 的对象长 12 个字节?
- 使用 valgrind 检查我的链表暗示中的内存泄漏,让我"肯定丢失:1 个块中有 40 个字节"
- 复制后删除原始数组指针将前 3 个字节设置为 0
- 在编译时而不是运行时创建一个由两个字节组成的值
- 为什么在我的实现中,所有数组都对齐到 16 个字节?
- 使用 Python 导出 4 个字节浮点数
- C++向指针地址添加 4 个字节
- 是否强制转换void**并将第一个字节设置为nullptr
- AES-128 CFB-8解密的前16个字节已损坏
- Qt TCP 套接字 - 写入超过 15 个字节
- 在"C++代码"部分中,可能会写入两个字节
- 视觉C++转换和写入值为 10 的无符号 int 给出 5 个字节