peng-zhihui / ElectronBot

GNU General Public License v3.0
8.03k stars 1.85k forks source link

屏幕花屏,USB通信不显示画面的解决办法 #122

Open li460135301 opened 2 years ago

li460135301 commented 2 years ago

程序测试的时候发现屏幕初始化后花屏,而且程序卡在45行,electron.SendUsbPacket函数,返回值一直USBD_BUSY。感觉是硬件问题,但是USB3300我换过,屏幕也换过!问题一样! 显示效果如下: 程序无法继续 屏幕花屏

硬件测试了,没有测试出问题啊!,这个情况一般是什么问题导致?

peng-zhihui commented 2 years ago

驱动可能没装好

peng-zhihui commented 2 years ago

另外检查R16的1M电阻是否焊接正确

li460135301 commented 2 years ago

驱动可能没装好

电阻测试1M是正常的,驱动没有安装会导致花屏吗?关键是电脑都没有弹出任何设备接入,设备管理器里面只有一个CP2102的USB串口,没有其他未安装驱动的设备,也就是根本没有检测到USB设备接入!非常感谢!

peng-zhihui commented 2 years ago

没有发送数据上电就是花屏啊,设备管理器里正常是会出现一个新设备需要按照README里面说的安装仓库的驱动才行

li460135301 commented 2 years ago

没有发送数据上电就是花屏啊,设备管理器里正常是会出现一个新设备需要按照README里面说的安装仓库的驱动才行

后来有显示驱动了,但是我已经禁用了系统强制驱动签名了(通过高级模式,按7禁用系统强制驱动签名),但是驱动还是安装失败,不管怎么样驱动都无法安装成功,不知道和系统版本是否有关,我的系统版本是win1021H1 专业版
禁用强制签名效果 驱动安装失败

peng-zhihui commented 2 years ago

跟系统没关系,就是导航到驱动文件夹就就可以安装啊,你指的安装失败是提示的啥

txp666 commented 2 years ago

image 我的也一样!你的弄好了吗

simasure commented 2 years ago

可以分享一下编译好的HEX文件吗

yangxiaofeng5 commented 2 years ago

可以分享一下编译好的HEX文件吗

同求,我的屏幕都没亮,想借用你的hex文件排除一下问题

wenFrankieeee commented 2 years ago

装好了驱动,设备管理器上能看到ELECTRONBOT, 一样也是花屏。 R16电阻无误

peng-zhihui commented 2 years ago

我晚点更新一个单独的屏幕测试程序吧

coolflyreg commented 2 years ago

装好了驱动,设备管理器上能看到ELECTRONBOT, 一样也是花屏。 R16电阻无误

花屏不是问题,那是因为初始化,内存里的噪点。我现在虽然把屏幕初始化的时候,用颜色清了屏幕,不是噪点了,但是

我是Mac系统,在USB串口里,能看到ElectronBot@PZH,并且能识别到480Mb/s,/dev/ 下也有对应设备。我把舵机的I2C传输屏蔽了,现在就是无法传输USB数据。。。

image image
peng-zhihui commented 2 years ago

我更新了测试程序,不过是Windows下的,可以试一试,见README说明

wenFrankieeee commented 2 years ago

我更新了测试程序,不过是Windows下的,可以试一试,见README说明

QQ图片20220405174105 大佬,显示少几个dll,下载放在相应系统文件夹下后,运行sample 无法运行。是少了什么吗,谢谢

CWEIB commented 2 years ago

装好了驱动,设备管理器上能看到ELECTRONBOT, 一样也是花屏。 R16电阻无误

花屏不是问题,那是因为初始化,内存里的噪点。我现在虽然把屏幕初始化的时候,用颜色清了屏幕,不是噪点了,但是

  • 主控板卡在:electron.SendUsbPacket(electron.usbBuffer.extraDataTx, 32);
  • ElectronBotSDK-LowLevel里的Sample卡在:_obj->ReceivePacket(reinterpret_cast<uint8_t*>(_obj->extraDataBufferRx), 1, 32);

我是Mac系统,在USB串口里,能看到ElectronBot@PZH,并且能识别到480Mb/s,/dev/ 下也有对应设备。我把舵机的I2C传输屏蔽了,现在就是无法传输USB数据。。。

image image

Windows下情况也和你一样,都开始怀疑买的24mhz的晶振是否有问题了 屏幕截图 2022-04-05 182307

peng-zhihui commented 2 years ago

我更新了测试程序,不过是Windows下的,可以试一试,见README说明

QQ图片20220405174105 大佬,显示少几个dll,下载放在相应系统文件夹下后,运行sample 无法运行。是少了什么吗,谢谢

DLL在文件夹里都提供了,不需要单独放到系统文件夹,确认一下你的操作系统是64位的?DLL下载可能不完整,重新下载一下仓库

peng-zhihui commented 2 years ago

装好了驱动,设备管理器上能看到ELECTRONBOT, 一样也是花屏。 R16电阻无误

花屏不是问题,那是因为初始化,内存里的噪点。我现在虽然把屏幕初始化的时候,用颜色清了屏幕,不是噪点了,但是

  • 主控板卡在:electron.SendUsbPacket(electron.usbBuffer.extraDataTx, 32);
  • ElectronBotSDK-LowLevel里的Sample卡在:_obj->ReceivePacket(reinterpret_cast<uint8_t*>(_obj->extraDataBufferRx), 1, 32);

我是Mac系统,在USB串口里,能看到ElectronBot@PZH,并且能识别到480Mb/s,/dev/ 下也有对应设备。我把舵机的I2C传输屏蔽了,现在就是无法传输USB数据。。。

image image

Windows下情况也和你一样,都开始怀疑买的24mhz的晶振是否有问题了 屏幕截图 2022-04-05 182307

用我新发的测试程序测试一下

wenFrankieeee commented 2 years ago

我更新了测试程序,不过是Windows下的,可以试一试,见README说明

QQ图片20220405174105 大佬,显示少几个dll,下载放在相应系统文件夹下后,运行sample 无法运行。是少了什么吗,谢谢

DLL在文件夹里都提供了,不需要单独放到系统文件夹,确认一下你的操作系统是64位的?DLL下载可能不完整,重新下载一下仓库

大佬,一开始缺少的是 vcruntime dll,是要放到system32文件夹里的,我的是64位 win10,刚重新下了一遍仓库,确认完整,故障依旧。另外,我还装了一遍opencv 库

coolflyreg commented 2 years ago

以下方法适合明确知道自己在干什么的小伙伴使用,不清楚自己在干什么的小伙伴,不要看到这里就立刻动手。参考后面的这一条 https://github.com/peng-zhihui/ElectronBot/issues/122#issuecomment-1089684661

对于Windows上驱动装不上的同学,参考以下方法:

然后我的问题还是依旧,感觉不是软件方面的问题了。还是硬件哪里有问题了

下图是用稚晖君发布的固件

image

我自己改后打印信息的固件和之前发的图一样。

txp666 commented 2 years ago

对于Windows上驱动装不上的同学,参考以下方法:

然后我的问题还是依旧,感觉不是软件方面的问题了。还是硬件哪里有问题了

下图是用稚晖君发布的固件 image

我自己改后打印信息的固件和之前发的图一样。

这样装驱动我也试了,打开sample.exe显示connected和你一样 然后就闪退了,屏幕也没有显示

peng-zhihui commented 2 years ago

那你们应该是USB3300 PHY电路有点问题,确认一下板子的焊接,我最开始遇到类似的情况经检查是晶振的1M电阻引起的。 不过既然设备管理器能枚举出来说明应该也没啥问题啊,而且看你们的图设备连接也是正常的,你们看看PID和VID是否正常(0x8023和0x1001)

coolflyreg commented 2 years ago

~那你们应该是USB3300 PHY电路有点问题,确认一下板子的焊接,我最开始遇到类似的情况经检查是晶振的1M电阻引起的。~ 不过既然设备管理器能枚举出来说明应该也没啥问题啊,而且看你们的图设备连接也是正常的,你们看看PID和VID是否正常(0x8023和0x1001)

看起来应该是这样,虽然不工作,没想到这样竟然也能识别 (。 ́︿ ̀。)。 PID和VID是正常的,我的能连上,但是不能发数据。

image
peng-zhihui commented 2 years ago

有调试环境的话,在固件的CDC_Receive_HS函数里打个断点,看能不能接收到主机发来的USB数据包

coolflyreg commented 2 years ago

有调试环境的话,在固件的CDC_Receive_HS函数里打个断点,看能不能接收到主机发来的USB数据包

恐怕还没到主机发送数据的地步。我在mac上打断电给LowLevel的Sample,发现卡在ElectronLowLevel::SyncTask里的第一个ReceivePacket从机的32字节的位置,返回结果总是 -2。打印的是-2,实际打断点,是uint32的4294967294

peng-zhihui commented 2 years ago

那我还是怀疑是驱动安装的问题...设备管理器卸载了设备(勾选卸载驱动)然后按我仓库的说明重新安装一遍我提供的驱动?此外测试的时候最好是拔了USB线重新插一下再运行电脑上的软件,避免出现奇怪的问题

coolflyreg commented 2 years ago

那我还是怀疑是驱动安装的问题...设备管理器卸载了设备(勾选卸载驱动)然后按我仓库的说明重新安装一遍我提供的驱动?此外测试的时候最好是拔了USB线重新插一下再运行电脑上的软件,避免出现奇怪的问题

请问下,为什么 ElectronBot.inf 里的 DeviceId 是 VID_0483&PID_5740,ElectronBot@PZH.inf 里的是 VID_1001&PID_8023?

一个不同的小细节: 我用libusb-win32的驱动安装包,识别出来的DeviceId是 VID_1001&PID_8023&MI_00 和 VID_1001&PID_8023&MI_01。

wenFrankieeee commented 2 years ago

我运行sample 一直 0xc000007b 报错,无法运行。

peng-zhihui commented 2 years ago

我运行sample 一直 0xc000007b 报错,无法运行。

百度一下,安装系统缺少的DLL

peng-zhihui commented 2 years ago

那我还是怀疑是驱动安装的问题...设备管理器卸载了设备(勾选卸载驱动)然后按我仓库的说明重新安装一遍我提供的驱动?此外测试的时候最好是拔了USB线重新插一下再运行电脑上的软件,避免出现奇怪的问题

请问下,为什么 ElectronBot.inf 里的 DeviceId 是 VID_0483&PID_5740,ElectronBot@PZH.inf 里的是 VID_1001&PID_8023?

一个不同的小细节: 我用libusb-win32的驱动安装包,识别出来的DeviceId是 VID_1001&PID_8023&MI_00 和 VID_1001&PID_8023&MI_01。

前者是多余的,安装驱动的时候会匹配后者,正常安装就行

CWEIB commented 2 years ago

对于Windows上驱动装不上的同学,参考以下方法:

然后我的问题还是依旧,感觉不是软件方面的问题了。还是硬件哪里有问题了 下图是用稚晖君发布的固件 image 我自己改后打印信息的固件和之前发的图一样。

这样装驱动我也试了,打开sample.exe显示connected和你一样 然后就闪退了,屏幕也没有显示

测试过也一样出现这种情况 屏幕截图 2022-04-05 225916

CWEIB commented 2 years ago

关于DLL的下载,可以在这个网站中下载https://www.dll-files.com/

peng-zhihui commented 2 years ago

关于DLL的下载,可以在这个网站中下载https://www.dll-files.com/

正常驱动信息是这样的,你看看是不是一样? image

coolflyreg commented 2 years ago

关于DLL的下载,可以在这个网站中下载https://www.dll-files.com/

正常驱动信息是这样的,你看看是不是一样? image

就这个后面的&MI_00和&MI_01的不同,导致BotDriver里的驱动就算装了也没反应,难道是芯片有区别? 就在没装驱动前,插上以后也是会出现两个设备,一个是COM口,一个显示ElectronBot@PZH (驱动没正常启动),硬件的ID就是我截图的这两个

image
CWEIB commented 2 years ago

关于DLL的下载,可以在这个网站中下载https://www.dll-files.com/

正常驱动信息是这样的,你看看是不是一样? image

就这个后面的&MI_00和&MI_01的不同,导致BotDriver里的驱动就算装了也没反应,难道是芯片有区别? 就在没装驱动前,插上以后也是会出现两个设备,一个是COM口,一个显示ElectronBot@PZH (驱动没正常启动),硬件的ID就是我截图的这两个 image 屏幕截图 2022-04-05 231323 一模一样

peng-zhihui commented 2 years ago

我没有在描述符里配置虚拟串口啊,你这个是不是驱动冲突了?设备管理器里面选择显示隐藏设备,卸载所有libusb相关的设备顺便勾选卸载驱动,然后重新安装一下看看,另外板子固件代码确认没改过?用STM32CubeMX重新生成代码的话会覆盖USB相关配置的,最好用我提供的测试hex固件直接烧录

coolflyreg commented 2 years ago

我改了下代码,将DeviceClass和SubClass都改成02,SubClass也可以改为0x00

image

在DeviceClass=0x02的时候,至于SubClass,不管是0x00还是0x02,都可以被识别为串口,同时硬件ID也不带有&MI_0X的了,并且也不会出现2个设备。

image

接下来我设置DeviceClass=0x02,DeviceSubClass=0x00,然后烧录固件 首先禁用了驱动签名重启后,在INF上右键安装,按提示安装完成后,更新驱动

image

让我从计算机上的可用驱动列表中选取

image

选择刚才装好的驱动

image

安装完成

image

关闭后会自动刷新,最终显示成这样

image

然后从串口打印的数据来看,可以通讯了。F405也收到数据了,但是屏幕仍然没有图像

image

Good,是个很大的进步,再接再厉

PS:经过进一步的测试,只要DeviceClass=0x02,不管是DeviceSubClass是0x00,还是0x02,F405都可以收到数据。只要DeviceClass=0x00,那就会出现2个设备,且F405都不能收到数据。

txp666 commented 2 years ago

我没有在描述符里配置虚拟串口啊,你这个是不是驱动冲突了?设备管理器里面选择显示隐藏设备,卸载所有libusb相关的设备顺便勾选卸载驱动,然后重新安装一下看看,另外板子固件代码确认没改过?用STM32CubeMX重新生成代码的话会覆盖USB相关配置的,最好用我提供的测试hex固件直接烧录

用hex烧录也是会有个串口

coolflyreg commented 2 years ago

我没有在描述符里配置虚拟串口啊,你这个是不是驱动冲突了?设备管理器里面选择显示隐藏设备,卸载所有libusb相关的设备顺便勾选卸载驱动,然后重新安装一下看看,另外板子固件代码确认没改过?用STM32CubeMX重新生成代码的话会覆盖USB相关配置的,最好用我提供的测试hex固件直接烧录

我用 6.Tests/TestDisplayUSB/_Released/STM32F4 Firmware/ElectronBot-fw.hex 这个文件,也烧录过测试,同时也把所有安装的驱动都删了。也确实会出现2个设备,硬件ID会多出 &MI_0X 的部分。

昨天睡觉前,我用STM32CubeMX重新生成了工程,然后用 FileMerge 工具一个文件一个文件,一行一行的比对(不过MX的固件迁移到最新了。但影响不大),最终发现是描述符的DeviceClass和SubClass不同。MX默认生成的都是0x02。然后会显示一个虚拟串口。如果我把这个也都改成0x00,那么MX新生成的代码烧录后,也会出现两个设备

顺带一提,出现两个设备的时候,即使把ElectronBot@PZH.inf里的DeviceId改成一样的,驱动也装上了,但是F405那边也仍然无法收到数据。

az666 commented 2 years ago

大佬们加油,好多人都遇到了这个问题,希望能出来一个完美的解法,装不上驱动,剩下的什么事情都干不了。

txp666 commented 2 years ago

29959b8086909d9c33932a1bd1324d3 老哥用你的方法修改0x02装上驱动!运行sample.exe我这里成功显示了(改的6文件夹的程序的0x02)感谢大哥

coolflyreg commented 2 years ago

![29959b8086909d9c33932a1bd1324d3] 老哥用你的方法修改0x02装上驱动!运行sample.exe我这里成功显示了(改的6文件夹的程序的0x02)感谢大哥

可恶啊,我还没成功啊 (╯‵□′)╯︵┻━┻

还是恭喜了

wenFrankieeee commented 2 years ago

![29959b8086909d9c33932a1bd1324d3] 老哥用你的方法修改0x02装上驱动!运行sample.exe我这里成功显示了(改的6文件夹的程序的0x02)感谢大哥

可恶啊,我还没成功啊 (╯‵□′)╯︵┻━┻

还是恭喜了

我也好了,改USB 设备类标识符,的确有效,感谢 微信图片_20220406113946

coolflyreg commented 2 years ago

我用了6.Test的固件,也终于出来了,不容易啊 Y(^_^)Y image

peng-zhihui commented 2 years ago

好吧,我提交一个补丁把默认描述符修改一下~

peng-zhihui commented 2 years ago

调试过程有其他优化或者简化调试的工具也欢迎提交pr

coolflyreg commented 2 years ago

目前我在mac上还不成功。。。真是奇怪。初步估计,用的libusb的版本不对。

regestday commented 2 years ago

我运行sample 一直 0xc000007b 报错,无法运行。

老兄你这个问题解决了吗? 我安装了各种运行库也无济于事

mcu666 commented 2 years ago

我运行sample 一直 0xc000007b 报错,无法运行。

老兄你这个问题解决了吗? 我安装了各种运行库也无济于事

我也没有解决,缺失的dll都装了,用工具扫了一下发现有两个dll不对,目前还没有搞好 image Dependencies.zip 你们可以也用这工具扫一下看看,打开之后把sample.exe拖进去就行,另外这工具不支持WinXP

regestday commented 2 years ago

我运行sample 一直 0xc000007b 报错,无法运行。

老兄你这个问题解决了吗? 我安装了各种运行库也无济于事

我也没有解决,缺失的dll都装了,用工具扫了一下发现有两个dll不对,目前还没有搞好 image Dependencies.zip 你们可以也用这工具扫一下看看,打开之后把sample.exe拖进去就行,另外这工具不支持WinXP

伙计 我搞定了 我本来在win7下 安装了各种运行库 都要崩溃了 你这个工具我也试过了。PE文件结构都快被拆了,我也看了PE导入表信息,然后我直接装了VS2022 就不报错了 然后出现提示 读娶不到happy. 我换了台win10 一样安装了VS2022 正常了。具体原因不祥

mcu666 commented 2 years ago

我运行sample 一直 0xc000007b 报错,无法运行。

老兄你这个问题解决了吗? 我安装了各种运行库也无济于事

我也没有解决,缺失的dll都装了,用工具扫了一下发现有两个dll不对,目前还没有搞好 image Dependencies.zip 你们可以也用这工具扫一下看看,打开之后把sample.exe拖进去就行,另外这工具不支持WinXP

伙计 我搞定了 我本来在win7下 安装了各种运行库 都要崩溃了 你这个工具我也试过了。PE文件结构都快被拆了,我也看了PE导入表信息,然后我直接装了VS2022 就不报错了 然后出现提示 读娶不到happy. 我换了台win10 一样安装了VS2022 正常了。具体原因不祥

可能是因为咱们自己安装的dll版本问题,然后vs2022用正确的dll给覆盖了,等我装个vs试试