本来对USB接口缓冲区的知识等于零,因为在前想图点省事曾请教关于串口编程的知识而不得(并无怨言,与芯片结构无直接关联的内容理当自己去学习),就不得不去广泛查找相关的知识,当然因此诱发了这个讨论就是意外的收获了。
这里要探讨的不是串口通讯,借用控件“MSComm”数据缓冲区读写(同时清空)的功能,自己编写的程序就可以源源不断地读取串口通讯后台存贮的数据,而不必随时照料芯片什么时间填充这些存贮空间。
具体地说就是同样在一个CH341芯片结构中,既然串口传输已经成功地啮合到操作系统控件的数据缓冲区中,用户只要在没有发生溢出之前及时取走现存的数据,就不会造成数据损失,那么并口照样也可以轻易地做到,所差不过是把API结构中由应用软件直接调用读写的操作,改变为操作系统直接进行罢了。
例如我在那篇《[原创]巧用CH341评估板测试并口接收速率 》帖子中阐明的那样,实测选择了最大限度选择了4096字节的缓冲区,也只能做到每毫秒22到23组32字节(总数大约700左右)的接收速率。虽然对比芯片公开的数据还是明显不足,但至少是现实能够达到的标准;而因为实际运用中再大的缓冲区也难以满足需要,再次调用同样的API指令就存在衔接的问题,甚至因为不能确定硬件实际传输效益,为避免帧间数据的损失不得不再降低标准保守使用。
这样的改变对芯片用户而言就有莫大的好处。后台操作的结果是芯片及配套的API只要面对操作系统,或者简单地说就是最大限度地不断填充系统内存划拨出来的缓冲区,而用户则只要随时从缓冲区取走数据而不管你的填充速度。于是只要1K而不是现在上限的4K就足够无限量连续采集而不怕传输遗失了。