[AT32F415] 下载官方USB虚拟串口的例程运行不成功--done

[复制链接]
 楼主| shiweicl1314 发表于 2021-9-6 09:37 | 显示全部楼层 |阅读模式
本帖最后由 muyichuan2012 于 2021-9-13 09:22 编辑

之前采购了一批415C8芯片现在准备用上,用官方USB虚拟串口例程简单修改下载测试后发现无法成功,板子外部使用8M晶体,做了以下修改 1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg

修改了芯片型号、启动文件等,直接下载程序运行时连上USB后电脑上没有任何提示,也没有声音。在线调试发现连上程序根本无法进入中断程序,停止后程序一直在大循环处,试了很多次没有一次能成功,这里只需要测试虚拟串口所以并没有增加其他代码,想问一下还有哪里需要修改的?

打赏榜单

ArterySW 打赏了 5.00 元 2021-09-09
理由:BSP问题反馈属实。

 楼主| shiweicl1314 发表于 2021-9-6 14:40 | 显示全部楼层
现在论坛跟群里都没有售后支持了吗?
ArterySW 发表于 2021-9-6 15:43 | 显示全部楼层
shiweicl1314 发表于 2021-9-6 14:40
现在论坛跟群里都没有售后支持了吗?

这边有按照您说的修改方式修改测试,能正常枚举成功。是否还有其他修改的地方没有说明呢?又或者可以检查一下电路连接有没有问题,正常情况下,电路正常,就算代码有问题,PC端也会提示有设备插入,只是枚举失败,无法识别
 楼主| shiweicl1314 发表于 2021-9-6 16:01 | 显示全部楼层
ArterySW 发表于 2021-9-6 15:43
这边有按照您说的修改方式修改测试,能正常枚举成功。是否还有其他修改的地方没有说明呢?又或者可以检查 ...

你好,首先感谢您的回复。

   我已经换过2片板子结果是一样的,代码就是上图修改的那些,没有在修改任何地方。我尝试在USB_D+上拉1.5k电阻到3.3V发现居然枚举成功了,但用串口助手发送数据测试发现数据传输不正常(返回数据过多或不正确,又或者一直重复返回0数据),而且加了上拉之后也不是每次都能枚举成功。

评论

如果拆掉D+的上拉电阻,USB连接到PC后就不会有任何的提示。  发表于 2021-9-6 16:05
 楼主| shiweicl1314 发表于 2021-9-6 16:20 | 显示全部楼层
ArterySW 发表于 2021-9-6 15:43
这边有按照您说的修改方式修改测试,能正常枚举成功。是否还有其他修改的地方没有说明呢?又或者可以检查 ...

还有我调试时发现在初始化USB库的过程中,程序经常会卡在这个延时函数中出不来,因为我在main()函数的while处设置断点发现程序经常无法运行到那里,单步发现程序卡在了下图位置。
11.jpg
ArterySW 发表于 2021-9-6 16:40 | 显示全部楼层
shiweicl1314 发表于 2021-9-6 16:01
你好,首先感谢您的回复。

   我已经换过2片板子结果是一样的,代码就是上图修改的那些,没有在修改任 ...

OTG在device模式下,内部自带上拉电阻,不需要额外提供上拉才对。您这边的现象比较奇怪,可否将使用的BSP版本告知一下,我们这边看呢能否复现您说的现象。

评论

就连内部的USB电阻都没起到作用,自己外加电阻反而偶尔成功了。  发表于 2021-9-6 19:20
那个例程在我这里无法正常运行。  发表于 2021-9-6 19:18
[url=home.php?mod=space&uid=726251]@shiweicl1314[/url] :就是使用BSP里面的demo,和你修改点相同  发表于 2021-9-6 18:08
也可以把您测试OK的工程发给我试试,还有我这边的415应该是去年底采购的,会不会有版本区别?  发表于 2021-9-6 17:14
你好,BSP是我昨天刚从群里提供的地址下载的,AT32F4xx_StdPeriph_Lib_V1.3.1.zip  发表于 2021-9-6 17:11
 楼主| shiweicl1314 发表于 2021-9-6 20:10 | 显示全部楼层
ArterySW 发表于 2021-9-6 16:40
OTG在device模式下,内部自带上拉电阻,不需要额外提供上拉才对。您这边的现象比较奇怪,可否将使用的BSP ...

我换了几块新板子结果都是一样,我现在基本可以肯定这个BSP有BUG,我测试403RC跟403ARC都是一切正常,唯独415C8T7不行。
muyichuan2012 发表于 2021-9-7 08:00 来自手机 | 显示全部楼层
请问你用的bsp版本是?

评论

群里下载的,AT32F4xx_StdPeriph_Lib_V1.3.1.zip  发表于 2021-9-7 08:29
自己的灌饼 发表于 2021-9-7 08:44 | 显示全部楼层
你的设置有问题的。仔细看看。

评论

哪里有问题?  发表于 2021-9-7 08:49
ArterySW 发表于 2021-9-7 09:36 | 显示全部楼层
shiweicl1314 发表于 2021-9-6 20:10
我换了几块新板子结果都是一样,我现在基本可以肯定这个BSP有BUG,我测试403RC跟403ARC都是一切正常,唯 ...

感谢您的反馈。对于您那边不能识别设备的问题,我们使用你所使用的BSP版本在AT-START板子上实验没有复现问题。但是对于您提到的收发数据问题,这边已找到问题原因;请按照如下修改代码,测试看看。

将usbd_cdc_vcp.c文件内的CDC_DataTx函数替换如下即可:

static uint16_t CDC_DataTx (void)
{
  uint16_t dwSendLen = 0;
        uint32_t SendPtr = 0;
  static uint8_t send0packet = 0;
  if (usb_txfifo.wrpointer == usb_txfifo.curpointer )
  {
    if(send0packet == 1)
    {
      USB_DCD_EPT_Tx (&USB_OTG_dev, CDC_IN_EP, &usb_txfifo.fifo[SendPtr] , 0 );
      send0packet = 0;
      return USB_DEVICE_OK;
    }
    else
    {
      return USB_DEVICE_FAIL;
    }
  }
       
        if ( usb_txfifo.wrpointer > usb_txfifo.curpointer )
        {
          dwSendLen = usb_txfifo.wrpointer - usb_txfifo.curpointer;
        }               
        else
        {
                dwSendLen = USB_FIFO_MAX - usb_txfifo.curpointer;
        }
        SendPtr = usb_txfifo.curpointer;
        if ( dwSendLen > 64 )
        {
                dwSendLen = 64;
        }
        usb_txfifo.curpointer += dwSendLen;
       
        if ( usb_txfifo.curpointer >= USB_FIFO_MAX )
                usb_txfifo.curpointer = 0;
  
  send0packet = 1;
  
  USB_DCD_EPT_Tx (&USB_OTG_dev, CDC_IN_EP, &usb_txfifo.fifo[SendPtr] , dwSendLen );
  return USB_DEVICE_OK;
}

评论

那这个问题就奇怪了,这个现象显然不可能是板子问题。  发表于 2021-9-7 13:11
@shiweicl1314我们已使用415C8T7实验,没有复现你的问题,枚举正常,不需要额外上拉电阻。如之前所说,415为OTG,在强制device模式下,芯片内部自带上拉,从设计上就是不需要额外加上拉电阻的。  发表于 2021-9-7 11:21
希望你们可以使用415C8T7这款芯片实际测试一下这个问题,谢谢。  发表于 2021-9-7 10:21
你好,替换了CDC_DataTx函数之后通讯问题解决了,目前测试通讯一切正常。但是还是必须外加1.5k电阻,否则PC不做任何提示。  发表于 2021-9-7 10:20
 楼主| shiweicl1314 发表于 2021-9-7 20:33 | 显示全部楼层
在没有连接USB数据线的时候给板子上电,之后万用表量D+上的电压发现是0V,也就是说明内部的电阻并没有开启。
 楼主| shiweicl1314 发表于 2021-9-7 22:42 | 显示全部楼层
测试发现通过程序主动写OTG_FS_DCTL寄存器的SFTDIS位,无论是置位还是执行清除操作,在D+管脚上始终都是0V电压,无法设置为高电平状态。
1.jpg
11.jpg 22.jpg

评论

这个测试结果是在没有连接USB数据线时测量芯片的D+管脚得出的。  发表于 2021-9-7 22:48
数据采集存储 发表于 2021-9-8 08:37 | 显示全部楼层
这个配置太详细了。
 楼主| shiweicl1314 发表于 2021-9-8 10:39 | 显示全部楼层
我感觉问题应该快要解决了,经过反复测试确定是D+内置电阻没有被使能,查看寄存器手册看到了这么一段话
11.jpg

在usb库的gpio初始化中看到PA9被设置为输入模式,于是我将VBUS接入高电平后发现USB被计算机识别了(断开高电平后USB跟计算机会失去连接),也就是此时D+的电阻发挥了作用,我想知道415的USB当做设备使用时PA9必须要做为输入模式并且接入高电平才会使能USB的内置电阻吗?
 楼主| shiweicl1314 发表于 2021-9-8 10:44 | 显示全部楼层
@ArterySW 麻烦您帮我看一下楼上
 楼主| shiweicl1314 发表于 2021-9-8 23:05 | 显示全部楼层
问题已经解决了。
自己造声卡 发表于 2021-9-10 10:14 | 显示全部楼层
这个帖子,太赞了。不错。
sparrow054 发表于 2021-10-9 14:02 | 显示全部楼层
好贴!非常的棒
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

59

帖子

2

粉丝
快速回复 返回顶部 返回列表