描述问题:不同于数据在电路中的传输,数据在光路上传输时,外界噪声对其影响非常大。
不传输数据时的电路:接收rx_lvds端口恒为0,没有噪声的干扰
不传输数据时的光路:接收rx_lvds端口有很多噪音信号,会导致接收模块错误的认为数据已经被发送,从而上传错误的信息。
(此处附图)
问题难点:当前所采用的识别数据到来的方法是使用波特率时钟结合状态机对收到的所有rx_lvds信号数据进行识别,当检测得到连续的“1、1、1、0”4个bit数据后,启动对有效数据的接收。
不过,由于光路上有非常多的噪音信号,且噪音信号规律,因此当噪音信号中出现连续的“1、1、1、0”这4个bit数据后,会错误的启动对数据的接收,进而将噪音信号上传至上位机显示。(滤波失败)
如上图所示:tx_lvds恒为0没有发送数据时,rx_lvds接口收到了噪音信号;并且噪音信号被bps_clk采样时,“恰好”出现了“1、1、1、0”,从而导致对有效数据的接收en_flag的错误置1。
因此,此种思路已不能使用,通过观察发现,噪音信号多且杂,所以不能单靠检测数据来启动数据接收;但其又不存在规律,而tx_lvds发送时的无效码是存在规律的,因此可以通过检测规律,当符合规律之后,启动en_flag。
目标:实现成功滤波,使光路上的接收端在成功接收到无效码后在启动对有效数据的接收。
问题解决:1、噪音是不规律的,因此通过分析当前时序,如下图
依靠规律检测:在光发送与光接收周期一定的情况下,连续检测到15个下降沿后再进入数据位检测。
2、先计时1个周期(计数器计数50),遇上升沿清0。
3、在一周期内(0-50)(2MHZ),通过设置采样区域,使下降沿计数器遇下降沿+1,加至15后进入1110检测
最终实现了规律检测,在电上成功通信。