查看: 7040|回复: 24

[其他] USB 硬件FIFO

[复制链接]

该用户从未签到

57

主题

531

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1356
最后登录
2016-12-5
发表于 2016-10-9 17:12:43 | 显示全部楼层 |阅读模式
想请教一下,USB cdc虚拟串口类,以K64的demo为例,是否有硬件的FIFO,或者缓冲机制,该如何打开?
楼主硬件小白,请大神指点。
我知道答案 目前已有24人回答
回复

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25443
最后登录
2025-9-4
发表于 2016-10-10 10:19:54 | 显示全部楼层
楼主你好!
USB是有缓冲区的。
K64芯片在内存中开辟了连续的存储空间,用于存放端点通信用到的基本信息,这个连续存储空间称为婚宠去描述符表BDT。BDT由一个个缓冲区描述符BD组成。
关于BD的具体信息,楼主可以查看reference manual的46.3.4 Buffer Descriptors (BDs)章节。

回复 支持 反对

使用道具 举报

该用户从未签到

57

主题

531

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1356
最后登录
2016-12-5
 楼主| 发表于 2016-10-10 10:37:14 | 显示全部楼层
小恩GG 发表于 2016-10-10 10:19
楼主你好!
USB是有缓冲区的。
K64芯片在内存中开辟了连续的存储空间,用于存放端点通信用到的基本信息,这 ...

好的,多谢版主
回复 支持 反对

使用道具 举报

该用户从未签到

57

主题

531

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1356
最后登录
2016-12-5
 楼主| 发表于 2016-10-10 10:39:24 | 显示全部楼层
小恩GG 发表于 2016-10-10 10:19
楼主你好!
USB是有缓冲区的。
K64芯片在内存中开辟了连续的存储空间,用于存放端点通信用到的基本信息,这 ...

这个BDT我在例程中也找到相关的部分介绍了,BUFFER DISCRIPTOR TABLE (BDT) DISCRIPTION  
在CDC例程中的khci_dev.c 文件中,BDT代表的就是硬件的缓存吗?也就是硬件的FIFO?
USB的硬件FIFO和DMA都支持吗?两者有什么区别吗
回复 支持 反对

使用道具 举报

该用户从未签到

57

主题

531

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1356
最后登录
2016-12-5
 楼主| 发表于 2016-10-10 10:43:05 | 显示全部楼层
小恩GG 发表于 2016-10-10 10:19
楼主你好!
USB是有缓冲区的。
K64芯片在内存中开辟了连续的存储空间,用于存放端点通信用到的基本信息,这 ...

版主,我只有K22的  reference manual,  K64系列的可否上传我一份
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25443
最后登录
2025-9-4
发表于 2016-10-10 10:50:14 | 显示全部楼层
LuoR 发表于 2016-10-10 10:39
这个BDT我在例程中也找到相关的部分介绍了,BUFFER DISCRIPTOR TABLE (BDT) DISCRIPTION  
在CDC例程中的 ...

楼主你好!
其实你查看寄存器也会发现一些BDT,所以这个BDT是和硬件相关的缓冲区。
关于FIFO和DMA.
FIFO,我看了下文档,没有较多的解释,有个在缓冲描述符字节格式地方,KEEP/TOK_PID[3]的说明,如果配置为FIFO模式,并且该位为1,cpu不通知令牌被处理,数据直接从FIFO移入移出,所以我认为,这里的FIFO其实就是buff的概念,不像芯片其他外设的FIFO,也就是多级buff的情况。
DMA,也就是起到一个把数据从一个地方用硬件快速搬到另一个地方,和FIFO是完全不同的概念。
回复 支持 反对

使用道具 举报

该用户从未签到

57

主题

531

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1356
最后登录
2016-12-5
 楼主| 发表于 2016-10-10 11:40:47 | 显示全部楼层
小恩GG 发表于 2016-10-10 10:50
楼主你好!
其实你查看寄存器也会发现一些BDT,所以这个BDT是和硬件相关的缓冲区。
关于FIFO和DMA.

版主,我遇到的问题是这样的,我建立了软FIFO并没有改善丢帧的现象。

USB发送部分有一个宏  #if CDC_IMPLEMENT_QUEUING   这个定义为1的时候便会打开很多代码, 是关于queue的,打开这个丢帧的现象就会大大的减小。我跟了一下,相关处理应该是在  device端口部分的一个底层的fifo.但也属于软件FIFO,并非是硬件的。
分析了一下丢帧原因,是在发送过程中出现了 /* bin is full 容器满, */。也就是覆盖了上一次的数据,或者是打开的这个FIFO满了,数据溢出。
还有一个现象,我监测数据,发现有很多重复发送给PC的数据,不知道什么原因导致了数据的重发。版主可否帮忙分析一下呢。
我的目的是要解决丢帧的问题。吞吐量较大,1ms间隔发送15-17B,理论上是完全可以处理过来的。
请教了些大神,给了我些建议,在转给USB发送的时候要检查dev寄存器的状态,防止数据的覆盖。
这部分的操作可有代码demo我参考一下呢。我感觉例程中应该有考虑到这部分,
回复 支持 反对

使用道具 举报

该用户从未签到

57

主题

531

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1356
最后登录
2016-12-5
 楼主| 发表于 2016-10-10 11:45:55 | 显示全部楼层
小恩GG 发表于 2016-10-10 10:50
楼主你好!
其实你查看寄存器也会发现一些BDT,所以这个BDT是和硬件相关的缓冲区。
关于FIFO和DMA.

我觉得有个概念和过程我一直是一知半解:
bulk传输和中断传输,CDC类的数据是通过bulk传输方式来进行的,
这个传输方式在系统中是如何运行的,
比如 我调用了一个TASK来进行发送操作,或者上位机通过串口发送给板子,
那么bluk批量传输的话,没有中断的过程吗?
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25443
最后登录
2025-9-4
发表于 2016-10-10 13:08:32 | 显示全部楼层
LuoR 发表于 2016-10-10 10:43
版主,我只有K22的  reference manual,  K64系列的可否上传我一份

http://www.nxp.com/files/microco ... on&fileExt=.pdf
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-12-6 16:47
  • 签到天数: 27 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    2

    主题

    318

    帖子

    0

    高级会员

    Rank: 4

    积分
    759
    最后登录
    2018-2-24
    发表于 2016-10-10 15:32:18 | 显示全部楼层
    学习了.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 08:46 , Processed in 0.105607 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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