+ +1. 电脑通过某种设备(板载RS232串口,USB转TTL串口(例如CH340))制造一个硬件串口,单片机一般自带硬件TTL串口 +1. 双方通过串口控制信息初始化串口,包括波特率(传输速度),数据位x位,停止位x位等 +2. 双方交叉连接,以预先被写死的串口控制信息传输串口数据信息,要求双方串口控制信息设置完全相同才能正常传输。不然假设一方以另外一方两倍的速度发送和接受,这边发两个bit那边在同样的时间接收一次,显然就会炸。 + +那么,游戏程序本身内定串口控制信息是9600的速度,游戏程序打开串口,初始化电脑端为9600波特率,电脑告诉串口设备以9600速度在那两条串口TXRX数据线上发送和接收串口数据信息,那么远端单片机就必须以9600去配合,双方才能正确的传输信息 +所以这个9600实际上是游戏程序限制的,s公司在开发这个设备的时候就确定了这个波特率,所以不管是官方面板还是自制面板一般都是要使用这个波特率的(为什么要说一般呢,因为见下USB-CDC) + + +**以下内容可能让您感到不适** + +有的人说“打开程序一看就知道这个方案肯定不行,波特率才9600那么慢,还好意思发出来”这样,不知道是真的不懂还是忽悠不知道串口这玩意的玩家来抹黑这个方案的。 +有本事你用这种走真实存在的串口两条线的串口,不修改游戏的前提下,做一个大于9600波特率的。 +或者说,按照你的说法,9600波特率,就是方案不行,那官方面板9600波特率,官方面板官方机台肯定不行,刷新速度那么慢,打不了大歌,官机只能打打12以下的小歌,大歌1414+打不了((((( +就这么说吧,如果程序里面以115200速度打开串口去配合游戏程序,就像你写了个串口通信的程序,单片机程序里是115200,然后电脑串口监视器以9600波特率传输...额,这,但凡接触过串口的都知道这样必挂吧..如果我都说到这份上了还要问“你有什么证据证明官方是9600”,“9600那么慢,官方肯定不是9600,你这9600肯定不行”,我已经没话说了。 + + ++
+ +大家可能对这玩意不是很熟悉,但是其实大家可能接触过很多这种。 +叫名字不熟悉,那我说,atmega32u4的板子,samd21的板子之类的,走直连usb连到电脑上,电脑识别的串口就是所谓USBCDC串口,这样熟悉了吧。 +你在这类板子上一般只能看见主控一个芯片,没有ch340等串口芯片 + +我们知道官方程序里面设定的电脑以9600打开串口,其实这里可以算出官方理论最高屏幕触摸刷新率是多少,未经修改的游戏,触摸数据包每个是9个字节,也就是72个bit,9600波特率也就是9600bits/s,计算得到串口限制每秒最多133.3333个数据包,即官方最高理论极限是133.3333hz,实际上应该是达不到的,所以在这顺便也说一下,其实并不用担心用这个方案做出来的触摸面板的性能,因为官机的性能其实并不是很好,官机延迟大,刷新率低,顺便说一下,还有人说mpr121性能不够来说方案不行的,我只能说,它性能可能不是那么顶尖,但是至少够用,做出来纸面性能大于官方面板,官方面板能干的他都能干,我觉得这就足够了。 + +那么为什么说我们的方案的性能,包括刷新率,可以超过官方呢,不是说波特率都被限制到9600了吗? + +首先我们要知道9600波特率是在硬件那两条线上面传输的一个提前约定的速度。使用两条线那种传输方式,电脑先以一个高速的线路比如usb告诉usb转串口设备串口控制信息和串口数据信息,usb转串口依靠串口控制信息描述的速度等,在两条线上面发送和接收数据。说白了就是这个9600的速度限制的是那两条线上面的速度,实际上,电脑最本身,系统里面是不管这个速度的,那么如果我们的usb设备从拿到串口控制信息和串口数据信息之后就截胡了呢? + +usbcdc就是这样一种东西,他提供给usb设备一种通讯方式,在电脑上显示为一个串口,usb设备可以是一个单片机一类,单片机告诉电脑,自己是一个cdc设备,电脑就把他识别为串口,并当作串口去处理他,这个单片机一类的东西自带usb能力,它接收串口控制信息和串口数据信息并进行自己所需的操作:它本身可以作为usb转串口使用,你可以编写程序,让这个设备接收到串口控制信息和串口数据信息之后,像一个usb转串口,ch340一类的东西一样,以串口控制信息的参数把串口数据信息从自身的硬件串口发送出去和接收后传给电脑(官方版arduino UNO的usb转串口芯片,atmega16u2就是这样使用的),当然,自己也可以直接内部处理数据并以usb速率12Mbit/s跟电脑以一个串口的通信方式通信。比如这个单片机可以是atmega32u4,游戏程序打开串口,初始化串口为9600,他拿到串口控制信息9600和串口数据信息之后,直接扔掉了串口控制信息9600,因为他不需要这个东西,这个东西是用来控制硬件两条线串口上面的传输的。因为不经过硬件两条线,他不受波特率等约束,他自身就直接跟电脑以usb12Mbit/s速度通信,他自己自身处理好数据,把数据就直接发给电脑了,速度?12Mbit/s,这样,不受9600的限制,进行传输,没有133.3333hz的理论限制,我们就可以做到超越官方的刷新率,同时没有经过usb或者电脑内置串口芯片转换rs232的步骤,直接使用低延迟的usb通信,延迟也做的比官方低。 + + ++