cdc_usb模擬串口-設(shè)備描述符問題

使用官方例程?CH573_CDC_OK,usb模擬串口功能時,發(fā)現(xiàn)win10系統(tǒng)無需安裝系統(tǒng)就可直接讀寫設(shè)備,但是系統(tǒng)關(guān)于設(shè)備描述和程序有差別,這是使用自寫軟件讀取的串口信息(也可從系統(tǒng)的設(shè)備管理器獲取該信息)如下:

description:??"USB?串行設(shè)備"
manufacturer:??"Microsoft"
serialNumber:??"2017-2-25"
vendorIdentifier(VID):??6790
productIdentifier(PID):??22306

除了后面的 VID和PID與程序中一致外,其余均不同。這里推測是設(shè)備插入電腦后,系統(tǒng)自動更新安裝了默認驅(qū)動,導(dǎo)致信息被修改。


有沒有方法可以保持實際使用時,電腦上的設(shè)備描述和程序中一致。目前項目需要通過??description 和?manufacturer 初步區(qū)分產(chǎn)品類型(類似Arduino的開發(fā)板信息)。否則次之,只能使用 VID和PID做產(chǎn)品區(qū)分了


還望有大神能夠解答,不甚感激!


那個程序里面應(yīng)該是沒有上傳字符串描述符的,你可以添加字符串描述符,不過系統(tǒng)層操作一般是設(shè)備類型加vid pid,這個應(yīng)該就足夠了。


第一次連接設(shè)備,電腦右下角有設(shè)備描述顯示,和程序中是一致的,但過幾秒就改變了,這是第一次連接電腦顯示(設(shè)備管理器卸載設(shè)備后,重新連接也可以)

image.png

這是程序中描述符相關(guān),可以發(fā)現(xiàn)時上傳了的

//?語言描述符
const?UINT8?MyLangDescr[]?=?{0x04,?0x03,?0x09,?0x04};
//?廠家信息?ghtech
const?UINT8?MyManuInfo[]?=?{0x0E,?0x03,?'w',?0,?'c',?0,?'h',?0,?'.',?0,?'c',?0,?'n',?0};
//?產(chǎn)品信息?www.ghtech.cn
const?UINT8?MyProdInfo[]?=?{0x0C,?0x03,?'C',?0,?'H',?0,?'5',?0,?'7',?0,?'x',?0};



目前問題解決了一半,description 和?manufacturer?還是無法修改,這個目前根據(jù)搜集的資料來看,是無法修改的了,和驅(qū)動綁定了。

但?serialNumber 可以自定義,源程序這里有問題,如下

//?廠家信息?ghtech
const?UINT8?MyManuInfo[]?=?{14,?03,?103,?0,?104,?0,?116,?0,?101,?0,?99,?0,?104,?0};
//?產(chǎn)品信息?www.ghtech.cn
const?UINT8?MyProdInfo[]?=?{28,?03,?119,?0,?119,?0,?119,?0,?46,?0,?103,?0,?104,?0,?116,?0,?101,?0,?99,?0,?104,?0,?46,?0,?99,?0,?110,?0};
//?序列號描述符?
const?UINT8?MySerDes[]?=?{
????0x14,?0x03,
????0x32,?0x00,?0x30,?0x00,?0x31,?0x00,?0x37,?0x00,?0x2D,?0x00,
????0x32,?0x00,?0x2D,?0x00,
????0x32,?0x00,?0x35,?0x00};

這里的廠家信息和產(chǎn)品信息通過編碼轉(zhuǎn)換,可以得到和注釋一致。但是序列號描述轉(zhuǎn)換后卻發(fā)現(xiàn)亂碼,是不正常的數(shù)字編碼。于是嘗試將數(shù)組成員由數(shù)字改為字符,直觀易懂,如下:

//?語言描述符
const?UINT8?MyLangDescr[]?=?{0x04,?0x03,?0x09,?0x04};
//?廠家信息?wchcn
const?UINT8?MyManuInfo[]?=?{0x0E,?0x03,?'w',?0,?'c',?0,?'h',?0,?'.',?0,?'c',?0,?'n',?0};
//?產(chǎn)品信息?CH57x
const?UINT8?MyProdInfo[]?=?{0x0C,?0x03,?'C',?0,?'H',?0,?'5',?0,?'7',?0,?'x',?0};
//?序列號描述符?TEST
const?UINT8?MySerDes[]?=?{0x0A,?0x03,'T',?0x00,?'E',?0x00,?'S',?0x00,?'T',?0x00};

測試后,可以通過軟件讀取到串口信息如下:

description:??"USB?串行設(shè)備"
manufacturer:??"Microsoft"
serialNumber:??"TEST"
vendorIdentifier:??6790
productIdentifier:??22306

可以發(fā)現(xiàn)源碼的 序列號描述符即serialNumber 應(yīng)該是有問題的,導(dǎo)致系統(tǒng)顯示了其它內(nèi)容,導(dǎo)致一開始以為不能定制內(nèi)容,折騰了半天。所以還是使用字符形式編寫最好,不會出錯。


因此目前可行方案是通過以下三者區(qū)分產(chǎn)品類型(注意6790是芯片生產(chǎn)商編號即沁恒公司,由usb官方分配的,不建議修改)

serialNumber:??"TEST"
vendorIdentifier:??6790
productIdentifier:??22306



樓主能分享下cdc代碼嗎?


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频