[求助]CH374spi接口

请问374的spi接口正常连接后,怎么设置芯片的工作方式呀? 又怎么才能给予372发送指令呢?这方面的说明好像是没有呀 请多多赐教!!!

实际上你只要通过SPI接口往374的寄存器里面写相应的数据就可以了。具体的设置你可以参考CH374DS1上面的寄存器的说明


哦,谢谢!![Emot]27[/Emot]


#define BIT_EP0_TRAN_RESP 0x0F /* 仅USB设备方式: 端点0发送响应: 0000~1000-应答数据长度0~8,1110-应答NAK,1111-应答STALL,其它值-禁用 */ #define M_SET_EP0_TRAN_ACK( old, len ) ( (old) & ~ BIT_EP0_TRAN_RESP | (len) & 0x0F ) /* 仅USB设备方式: 端点0发送响应/应答ACK */ #define M_SET_EP0_TRAN_NAK( old ) ( (old) & ~ BIT_EP0_TRAN_RESP | 0x0E ) /* 仅USB设备方式: 端点0发送响应/应答NAK */ #define M_SET_EP0_TRAN_STA( old ) ( (old) & ~ BIT_EP0_TRAN_RESP | 0x0F ) /* 仅USB设备方式: 端点0发送响应/应答STALL */ #define BIT_EP0_RECV_RESP 0x30 /* 仅USB设备方式: 端点0接收响应: 00-应答ACK,01-禁用,10-应答NAK,11-应答STALL */ #define M_SET_EP0_RECV_ACK( old ) ( (old) & ~ BIT_EP0_RECV_RESP | 0x00 ) /* 仅USB设备方式: 端点0接收响应/应答ACK */ #define M_SET_EP0_RECV_NAK( old ) ( (old) & ~ BIT_EP0_RECV_RESP | 0x20 ) /* 仅USB设备方式: 端点0接收响应/应答NAK */ #define M_SET_EP0_RECV_STA( old ) ( (old) & ~ BIT_EP0_RECV_RESP | 0x30 ) /* 仅USB设备方式: 端点0接收响应/应答STALL */ #define BIT_EP0_TRAN_TOG 0x40 /* 仅USB设备方式: 端点0发送同步标志: 0-DATA0,1-DATA1 */ #define BIT_EP0_RECV_TOG 0x80 /* 仅USB设备方式: 端点0接收同步标志: 0-DATA0,1-DATA1 */

我用的是374的spi接口,在CH374INI.C 的文件里有以上这几个函数,不明白是什么意思呀,能否高手帮解释一下呀 非常感谢


这些不是函数,是宏定义。 你得看看USB的协议中的几种传输


这只是定义了一个宏,将端点0的状态做了处理,为了方便向寄存器里送数据简单些.你也可以不用这个宏定义,直接根据状态往寄存器里送数据就可以了.


这个好像是涉及到了,USB协议的问题,所以有点难懂!


有哪位知道这几个项目都是怎么用的么? // 设备描述符 const UINT8C MyDevDescr[] = { 0x12, 0x01, 0x10, 0x01, 0xFF, 0x80, 0x37, 0x08, 0x48, 0x43, 0x37, 0x55, // 厂商ID和产品ID 0x00, 0x01, 0x01, 0x02, 0x00, 0x01 }; // 配置描述符 const UINT8C MyCfgDescr[] = { 0x09, 0x02, 0x27, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x37, 0x00, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x81, 0x03, 0x08, 0x00, 0x00 }; // 语言描述符 const UINT8C MyLangDescr[] = { 0x04, 0x03, 0x09, 0x04 }; // 厂家信息 const UINT8C MyManuInfo[] = { 0x0E, 0x03, 'w', 0, 'c', 0, 'h', 0, '.', 0, 'c', 0, 'n', 0 }; // 产品信息 const UINT8C MyProdInfo[] = { 0x0C, 0x03, 'C', 0, 'H', 0, '3', 0, '7', 0, '4', 0 };

UINT8 UsbConfig = 0; // USB配置标志


这些是用来描述设备的特征的,计算机通过这些来识别USB设备 USB协议中有详细的说明。


能不能具体些呢? 请问在上面的定义中 "语言描述符"怎么用的呀,为什么还要用到语言描述符呢? 还有就是"厂家信息"、"产品信息"中的“0x0E, 0x03,”“0x0C, 0x03,”这两个前导是什么意思呢,我能不能改动呢? “厂商ID和产品ID”能随意设置么?


在线等,帮帮忙呀!~~~~~~ 谢谢


语言描述符属于字串描述符,具体使用请查看USB协议。 “厂家信息”、“产品信息”中的第一个字节表示总的长度,第二个字节表示字串描述表类型(0X03),后面是UNICODE 编码的字串。


// 厂家信息 const UINT8C MyManuInfo[] = { 0x1C, 0x03, 'w', 0, 'w', 0, 'w', 0, '.', 0, '1', 0, '2', 0, '3', 0, 'c', 0, 'h', 0, 'i', 0, '.', 0, 'c', 0, 'n', 0 }; //www.123chi.cn // 产品信息 const UINT8C MyProdInfo[] = { 0x10, 0x03, 'P', 0, 'A', 0, 'I', 0, 'N', 0, 'T', 0, 'E', 0,'R', 0};//PAINTER 你看我这两个这么改对么?

那 // 厂商ID和产品ID 是怎么用的呀? 配置描述符是怎么用的,有什么意义,用改么? 请教!!!!!~~~~~~~~


建议你先去好好看一下USB协议,这些在USB协议中都有说明的。 厂商ID和产品ID是用来识别的,不能随便修改,驱动中也用到,如果随便修改的话,会造成识别不起来的。 配置描述符给出了本设备相关的配置信息,具体你也得USB协议。仅仅用我们374与PC机通信的话,根本不需要你进行修改,你如果是模拟其他设备来用的话,将其他设备的描述符添到其中即可。


现在我要定制自己的产品,当然让它显示我们的产品信息啦,所以这不仅仅是一个通信问题啊,这是一个产品的完整性问题. 要完成我上述的功能,在改了厂家信息,产品信息,还需要改别的东西么? 还是就改了这两个就行了呀


这还要看你是定制什么样的产品,有的产品只修改上述的描述符还不够。例如U盘,还需要修改SCSI命令集中Inquire命令的返回数据。总之,你得先了解一下USB协议和相关USB类设备协议(就是你要做的产品)。


只有登录才能回复,可以选择微信账号登录