请教高手:Ai8051U实验箱利用USB库实现USB通信功能程序后如何进行仿真?
向高手请教,先说声谢谢!问题场景:
AI8051U实验箱上做了点灯实验。
结合不停电下载功能的实现方法添加USB库并成功实现了USB通信。
但是发现添加USB通信后,不能再做仿真了。
具体步骤:
1、按照手册中做好AI8051U的仿真芯片,重新给AI8051U实验箱上电。
2、在Keil中保持之前debug的参数不变(没实现USB通信前能正常仿真),开始debug。
3、然后程序停在下图红色框那行。
4、再次单步执行,仿真就停止了,无法再操作任何执行跟踪的步骤了。下图红色框中可见。
程序代码打包在此:
期望结果:
在AI8051U实验箱上添加USB库并成功实现了USB通信的情况下,也能做仿真。
也许我的方法不对,请高手出手相助,给出方法或指出我的错误之处,再次谢谢了!
DebugLab 发表于 2025-4-30 20:39
注意IO是否冲突,USB固定使用P30、P31
串口仿真IO可切换
谢谢两位高手“erci***”(抱歉!只能看到这样的名字)和“DebugLab”提供的帮助。
AI8051U实验箱利用USB库实现USB通信功能程序后如何进行仿真的问题已经解决。
这只是多种办法中的一种解决办法。
总结一下:
思路是利用试验箱上的USB转双串口的功能模块,通过Ai8051U芯片的P3.6和P3.7进行串口仿真。
通过参考Ai8051U实验箱的原理图,发现Ai8051U芯片可做仿真的接口中只有P3.6和P3.7的串口可以连接到实验箱上的USB转双串口模块(模块由Ai8H2K12U芯片组成),然后模块连接到下图黄色框对应的USB-TypeC接口。
图上标注的“USB转双串口 不是烧录/仿真接口”,我现在不知道该如何理解了。目前它的确不能烧录,但是仿真却做到了。
按下图中所示,加上2个跳线(小黄色的长方框)。将另外一个黄框中的双串口开关打到“断”的一方。
双串口开关如果在“通”的一方能看到数据通信时开关旁的LED灯闪烁。为何要打到“断”的一方原因见下图。
我用了2条USB线进行设备连接。
一条USB-TypeA转USB-TypeA的连接试验箱的USB-TypeA口到计算机。
另一条USB-TypeC转USB-TypeA的连接上面第一个图中的“USB转双串口 不是烧录/仿真接口”到计算机。
至此硬件连接完成,剩下就是编译代码、制作仿真芯片、设置仿真参数、进行仿真。
按照其它资料中的讲解跟着做就可以了。
我心飞扬 发表于 2025-4-30 20:18
谢谢你再次回复及帮助。
正像你所说的,我也在看原理图,一点一点比对。
搞清楚了Ai8051U试验箱上集成有一 ...
P36 P37 可以连板载Ai8H2K12U。 DebugLab 发表于 2025-4-30 20:39
注意IO是否冲突,USB固定使用P30、P31
串口仿真IO可切换
谢谢“DebugLab”帮我删除重复帖子,移动帖子到更合适的板块,并回复。
重复帖子是操作失误发到不该发的地方,然后找了一个自认合适一些的地方重发了一下(当然还是不算合适),没及时删除。
以后注意避免这个问题再发生。
现在想的是如何实现我最早想实现的问题。
看来从试验箱中不方便引出,只能用USB_Link1D才能解决了?
注意IO是否冲突,USB固定使用P30、P31
串口仿真IO可切换
USB程序直接实际运行,不要仿真USB,因为上位机一般有超时机制,加断点程序停止运行,上位机就会认为USB设备停止响应 ercircle 发表于 2025-4-30 19:42
参考下图,其它模块要靠自己看电路图摸索了
谢谢你再次回复及帮助。
正像你所说的,我也在看原理图,一点一点比对。
搞清楚了Ai8051U试验箱上集成有一个USB转双串口的模块(Ai8H2K12U),其可以单独用,也可连接到主控芯片Ai8051U上。
我问的那4个框中的问题都明白了。
谢谢!{:baoquan:}{:baoquan:}{:baoquan:}
现在想的是如何实现我最早想实现的问题。
看来从试验箱中不方便引出,只能用USB_Link1D才能解决了?
我心飞扬 发表于 2025-4-30 19:32
谢谢你的回复与帮助!
知道自己对底层逻辑结构的欠缺。
参考下图,其它模块要靠自己看电路图摸索了
ercircle 发表于 2025-4-30 18:32
如何仿真MCU的USB功能,不占用MCU自带的USB来支援仿真通信 - 仿真/编译器/汇编器/头文件 国芯技术交流网站...
谢谢你的回复与帮助!
知道自己对底层逻辑结构的欠缺。
查看AI8051U实验箱的原理图,有板上双串口的电路。
如何使用呢?
在现有说明书和论坛中找了找,没发现相关信息。
如下图中黄色框中的开关、按键、跳线、接口,找不到说明。
如何仿真MCU的USB功能,不占用MCU自带的USB来支援仿真通信 - 仿真/编译器/汇编器/头文件 国芯技术交流网站 - AI32位8051交流社区
关于AI8051U实验箱USB通信与仿真冲突问题的技术分析及解决方案
一、问题现象溯源
根据描述,在未添加USB库时仿真功能正常,但引入USB通信模块后出现仿真中断。这种现象通常由以下三类原因导致:
1. 时钟系统冲突
AI8051U的USB模块需要精确的48MHz时钟源,而默认仿真配置可能使用不同时钟模式。当USB初始化代码强制切换时钟源时,会导致仿真器时序失步。需核查:
USBInit()函数是否修改了CLKDIV寄存器
是否启用了PLL时钟倍频而未同步更新仿真参数
2. 中断向量抢占
USB通信依赖中断处理机制,实验箱默认仿真配置可能存在:
中断优先级配置冲突(特别是USB中断与调试器使用的SWD接口中断)
中断使能时序不当导致仿真器状态机异常
3. 硬件资源占用
USB模块与调试接口共享物理引脚时可能引发冲突,需确认:
P3.0/P3.1是否被USBDP/DM复用
调试接口模式是否设置为SWD而非传统JTAG
二、关键调试步骤建议
(请先备份当前工程,按顺序执行以下验证)
步骤1:时钟配置验证
在Startup.a51文件中插入时钟状态监测代码:
assembly
MOV CLKCON,#0
CALL DELAY10MS
MOV A,CLKDIV
MOV P1,A ; 通过LED显示时钟分频值
步骤2:分阶段初始化测试
修改USB初始化流程为分步执行:
c
void main() {
// Phase 1: 基础外设初始化
LEDInit();
UARTInit();
// Phase 2: 延迟USB初始化
#ifndef DEBUGMODE
USBInit(48000000);
#endif
while(1) {
// 测试代码
}
}
通过条件编译暂时禁用USB初始化,验证基础仿真功能是否恢复。
步骤3:调试接口配置优化
在Keil uVision中调整调试参数:
1. 进入Options for Target -> Debug
2. 修改Settings中的Max Clock项为5MHz
3. 启用"Enable Debugger Runtime Stack"选项
4. 在Trace选项卡中勾选"Periodic Window Update"
三、典型解决方案
根据历史案例库分析,推荐采用分级调试方案:
方案A:双模式编译法
1. 创建DEBUG/RELEASE编译配置
2. 在DEBUG模式下:
使用内部RC振荡器代替PLL
禁用USB中断响应
添加虚拟USB握手协议
c
ifdef DEBUGMODE
#define USBCONNECTED 1
void USBISRSimulate() {
static uint8t cnt = 0;
if(++cnt > 10) {
USBEP0BUF = 0x55;
USBEP0BC = 1;
}
}
endif
方案B:硬件级调试优化
1. 修改硬件连接方式:
使用独立电源为调试器供电
在USBDP/DM线上串联22Ω电阻
2. 更新仿真器固件至最新版本
3. 在USB初始化前插入500ms延时:
```c
void Delay500ms() {
uint16t i;
for(i=0; i
[本文内容由国芯人工智能辅助生成,仅供参考]
页:
[1]