《线程》中讨论的其它部件:PCM2705C,
您好,
我想用 SPI 更改 USB 描述符数据。
我在这里做错了什么?
第一行是 CS,而不是数据,第三行是时钟。
PSEL 和主机线路都很高。 D+线被拉低。
谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
可以 通过 SPI 端口(PCM2705C/7C)修改设备描述符;只有在 PSEL 和主机像您一样高时,此描述符编程功能才可用。 有关更多功能详情,请参阅 第9.5.1节 USB 接口
请检查注释4 ( 数据表第35页): 在 PCM2707C 电源准备就绪且 SPI 主机(DSP)准备好发送数据之前,MS 必须处于高位。 此外,如果描述符是通过 SPI 编程的,SPI 主机必须处理 D+下拉菜单。 在通过 SPI 对 PCM2707C 进行编程之前,不得激活 D+上拉(高= 3.3 V)。
感谢您的回复,但这未能解决我的问题。
与此同时,我能够更改描述符名称,但它不能按预期工作。
一些奇怪的事情让它发挥作用:
因此,我可以更改描述符,但我想知道如何在没有这些 奇怪调整的情况下进行更改
这是“有效”代码:
static void usb_spiWriteDescriptor() { uint8_t dataToSend[58] = {0xBB, 0x08, 0x04, 0x27, 0x02, 0x41, 0x75, 0x64, 0x61, 0x63, 0x20, 0x2D, 0x20, 0x44, 0x57, 0x50, 0x33, 0x34, 0x35, 0x20, // To change this text, the first number needs to be changed 0x20, 0x20, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x64, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2E, 0x20, 0x80, 0x7D, 0x0A, 0x93, 0x01, 0x00 }; uint8_t wordToSend[2] = {0x02, 0x00}; spi_DMA_write(0, 0, 2, &wordToSend[0], &usbSPiHandle, GPIO_USBCS); /* Reverse the bit order */ for(uint8_t n = 0; n < 58; n++) { dataToSend[n] = (dataToSend[n] & 0xF0) >> 4 | (dataToSend[n] & 0x0F) << 4; dataToSend[n] = (dataToSend[n] & 0xCC) >> 2 | (dataToSend[n] & 0x33) << 2; dataToSend[n] = (dataToSend[n] & 0xAA) >> 1 | (dataToSend[n] & 0x55) << 1; wordToSend[1] = dataToSend[n]; wordToSend[0] = 0x08; spi_DMA_write(0, 0, 2, &wordToSend[0], &usbSPiHandle, GPIO_USBCS); } }
我看了节目,并将其与数据表的示例进行了比较。 数据表清楚地指示了57个字节,因此我认为您正在添加一个额外的字节, 然后该字节似乎 可以正常工作,这可能意味着您的第一个字节 未被读取。 您能否绘制 SPI 写入操作图,以便查看操作的完整详细信息(参见图29)
从数据表中:“数据必须从地址0x00存储,并且必须由57字节组成,根据下列参数: •供应商 ID (2字节)•产品 ID (2字节)•产品字符串(ANSI ASCII 代码为16字节)•供应商字符串(ANSI ASCII 代码为32字节)•电源属性(1字节)•最大功率(1字节)•报告描述符中的辅助 HID 用法 ID (3字节)"
外部 ROM 数据(样本集)
0xBB,0x08,0x04,0x27, 供应商 ID:0x08BB, 产品 ID:0x2704
0x50,0x72,0x6f,0x64,0x75, 0x63,0x74,0x20,0x73,0x74, 0x72,0x69,0x6E,0x67,0x73, 0x2E, 产品字符串:产品字符串(16字节)
0x56,0x65,0x6E,0x64,0x6f, 0x72,0x20,0x73,0x74,0x72, 0x69,0x6E,0x67,0x73,0x20, 0x61,
0x72,0x65,0x20,0x70,0x6C, 0x61,0x63,0x65,0x64,0x20, 0x68,0x65,0x72,0x65,0x2E, 0x20, 供应商字符串:此处放置供应商字符串(32字节,31个可见字符后跟1个空格)
0x80, 电源属性(bmAttribute):0x80 (总线供电)
0x7D, 最大功率(最大功率):0x7D
0x0A,0x93,0x01 辅助 HID 用法 ID:0x0A,0x93,0x01 (AL A/V 捕获)
解释数据从地址0x00开始存储
请注意,数据位必须通过 I 2C 总线从 LSB 发送到 MSB。 因此,每个数据字节必须以相反顺序存储其位。