CH372外置固件模式,進(jìn)入中斷,識別為Ep0_Setup后,讀出的8位數(shù)據(jù)為以下: 80 06 00 01 00 00 40 00 這個正常么?
這個數(shù)據(jù)是正常的啊,主機來向你要設(shè)備描述符啊,要求要的長度是64字節(jié),實際你可以給主機返回的長度應(yīng)該是18個字節(jié)。
設(shè)備描述符18個字節(jié),要求要的長度64個字節(jié), mVarSetupLength里面的長度要修改么?
主機可以要多于你本身描述符的長度,但是你返回的時候一定要按照你本身的長度來給主機返回數(shù)據(jù)。當(dāng)然,你的長度也需要修改。
參考程序里面沒有改mVarSetupLength,18字節(jié)設(shè)備描述符,每次復(fù)制8字節(jié)上傳,最后剩2字節(jié),為了補齊8字節(jié),后面的6個字節(jié)是無用的數(shù)據(jù)么?配置描述符和HID設(shè)備描述符什么時候上傳?
能不能具體講一下外置固件模式的工作流程
不是這個樣子的,實際在數(shù)據(jù)進(jìn)行傳輸?shù)臅r候,最后一次數(shù)據(jù)傳輸如果為2個字節(jié)的話,那么,你就往372里面寫2個字節(jié)進(jìn)去,沒必要在補其8個字節(jié)在寫下去。實際的外置固件程序你可以去參考CH372EVT。ZIP里面的例子程序
mVarSetupLength=request.buffer[6];這一指令不是把40H存到mVarSetupLength這個變量中么?主機要設(shè)備描述符,復(fù)制8個描述符,通過端點0上傳,mVarSetupLength長度減8不是還有56個描述符,設(shè)備描述符只有18個啊。
這個變量建議你不要存,因為這個變量只是一個象征性的數(shù)據(jù),實際你傳輸?shù)臄?shù)據(jù)是要根據(jù)你描述符的長短來上傳數(shù)據(jù)的,計算機在獲取描述符的時候,有時候是不需要知道你描述符是多長,那么他就發(fā)一個要獲取很長描述符的命令下來,但是你往計算機上面返回數(shù)據(jù)的話,你一定要按照你自己描述符的長度往計算機返回,但是你也可以返回計算機要求的數(shù)據(jù),只不過后面的數(shù)據(jù)是無效的數(shù)據(jù)而已