问题记录总结4---串口项目中遇到的问题4

描述问题:光路常亮可成功发送并接收数据,但是由于常亮会加大电源负荷,并且不适合实际使用,因此需要进一步改进,使其在不发送数据时保持熄灭,发送数据时再点亮。

不过在熄灭的情况下直接发送数据又会有基线漂移现象导致产生误码,因此需在发送数据前,先发送一段无效的01码解决基线漂移。考虑后决定使用FIFO来实现这个功能。当检测到FIFO中存入待发送的数据后,发送模块先发送无效码,待无效码发送完毕后,发送数据。

      设计期间,迟迟无法检测到FIFO存入数据的第一个瞬间(无法检测到empty的下降沿),并且FIFO一上电不为空,usedw已显示存入数据,并且empty不为1。

问题难点:在基本逻辑没问题的情况下,迟迟发现不了问题的来源。往往这种情况都会只是1个小错误,小错误更难被发现。

目标:成功配置FIFO,实现该有的功能:将uart_rx接收到的8bit数据写入到FIFO中,写入的瞬间,使uart_flash_tx发送无效码,当无效码发送完成后产生idel_done信号驱动FIFO的读使能读取数据并发送。

问题解决:1、发现上电后empty不为1,即说明FIFO中有数据,使用signaltap抓取信号usedw后     证明了猜测。

2、怀疑是FIFO的读写使能逻辑问题,因此在顶层模块取消FIFO与读写模块的连接, 观察到FIFO的empty为1,即证明猜测正确。

 3、将读写模块分别撰写以此判断是哪个使能配置出现了问题,并分别连接FIFO,发现   当写使能连接FIFO时,会出现上述错误,因此写使能配置错误。

  4、在写使能基本逻辑没问题的情况下会出现错误,由此怀疑是串口的特殊性导致。最终发觉:当rx_data与wr_data连接时,rx_data常态为低电平,但是不能默认它不发    送数据,实质它一直在发送00...,因此导致了FIFO中在上电的瞬间就存入了很多的0,  从而导致empty为0。

5、需多设置写入条件:当rx_done信号来时,再执行写入。不过rx_done 信号产生后, rx_data才会有数据,因此直接添加rx_done信号只会导致FIFO存入 rx_done前面的数据,进而丢失最后一个数据,因此,还需在读模块对rx_done信号进行延迟,使其在读模块中和rx_data 信号保持同步,最终问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值