CH32V203 的USBD外設(shè)

1691295597587325.jpg

USB讀到了OUT事務(wù) 的長(zhǎng)度,但是讀到的數(shù)據(jù)都是亂碼。


找了半天錯(cuò)誤,發(fā)現(xiàn)手冊(cè)里這段地址的有效區(qū)域是512,但是占用了1024B地址。


[N%O)2D6AWY$4X[BCXG}C0W.jpg

并且數(shù)據(jù)空間是這樣的:兩個(gè)隨機(jī)數(shù),兩個(gè)0。


這里有一個(gè)坑。

這段寄存器是16位的,數(shù)據(jù)在連續(xù)的地址空間中,是2byte有效數(shù)據(jù)? 2byte0。

這樣:

?D0 D1 00 00 D2 D3 00 00 D4 D5 00 00 ……


這么關(guān)鍵的問題手冊(cè)里沒寫~或者是寫在不知道哪個(gè)角落里了,找不到。






你們公司要好好寫手冊(cè)呀,手冊(cè)必須一直有人維護(hù),改錯(cuò)誤更新版本。

現(xiàn)在的手冊(cè)寫的太差了。


這里是手冊(cè)的位置和版本:image.png


你好,手冊(cè)的意思是0x40006400-0x40006000=0x400即1024,高16位保留,所以整個(gè)緩沖區(qū)是512字節(jié),可能沒有明顯的文字描述,導(dǎo)致理解上有偏差,推薦用我們例程中的庫(kù),可以比較方便的使用。image.png


是的,這個(gè)圖里這樣寫我以為只是緩沖區(qū)描述表的高16位保留,實(shí)際上,整個(gè)緩沖區(qū)都是高16位保留的。


我還注意到,這段緩沖區(qū)的寫入必須按照16位寫入。也就是說(shuō),不能先寫D0再寫D1,必須一次寫入。

D0 D1 00 00 D2 D3 00 00 D4 D5 00 00 ……


這樣的代碼是無(wú)法工作的,寫入后讀取緩沖區(qū)的值存在異常:

????????static?void?writeInData_O(int?diff_in_buf,?const?byte*?from_ptr,?int?len)?{
????????????byte*?to_ptr?=?(byte*)USBD_BUF_BASE;//也就是0x40006000
????????????to_ptr?+=?(diff_in_buf?*?2);//加上偏移量
????????????int?mov_count?=?0;
????????????while?(true)?{
????????????????*(to_ptr++)?=?*(from_ptr++);//寫入一個(gè)byte
????????????????mov_count++;
????????????????if?(mov_count?==?len)????break;
????????????????*(to_ptr++)?=?*(from_ptr++);//寫入一個(gè)byte
????????????????mov_count++;
????????????????if?(mov_count?==?len)????break;
????????????????to_ptr?+=?2;//跳過兩個(gè)byte
????????????}
????????}

必須每次都寫入16位

????????static?void?writeInData(int?diff_in_buf,?const?byte*?from_ptr,?int?len)?{
????????????int?len_u16?=?(len?+?1)?/?2;
????????????uint16*?to_ptr?=?(uint16*)USBD_BUF_BASE;
????????????to_ptr?+=?diff_in_buf?*?2?/?2;
????????????const?uint16*?from_ptr_16?=?(const?uint16*)from_ptr;
????????????for?(int?i?=?0;i?<?len_u16;i++)?{
????????????????*(to_ptr++)?=?*(from_ptr_16++);
????????????????to_ptr++;
????????????}
????????}



是的,這個(gè)圖里這樣寫我以為只是緩沖區(qū)描述表的高16位保留,實(shí)際上,整個(gè)緩沖區(qū)都是高16位保留的。


我還注意到,這段緩沖區(qū)的寫入必須按照16位寫入。也就是說(shuō),不能先寫D0再寫D1,必須一次寫入。

D0 D1 00 00 D2 D3 00 00 D4 D5 00 00 ……


這樣的代碼是無(wú)法工作的,寫入后讀取緩沖區(qū)的值存在異常:

image.png

必須每次都寫入16位

image.png



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

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