求个 FPGA 串口 程序
现在会点灯了想更进一步,弄个串口程序玩玩,希望大概的功能
1、收发正常,能与PC 段的串口完成交互,,比如PC 发一串 16进制数(长度可变),
假设一条命令:bootcode len cmd para para... checksum,, 由PC端发送
FPGA ,将上面的可变命令行,全部接受,并根据CMD,PARA,即命令和参数,执行相应的 过程,并将执行结果,通过串口传给PC
返回包格式: bootcode len cmd res res... checksum
好整么? 本帖最后由 wangjun403 于 2013-5-7 19:33 编辑
串口是串口程序,只能实现基本收发
你说的协议在自己再实现个协议解码
有什么问题可以联系我
系统的时钟需要使用分频好的时钟
如果你是9600bps,输入时钟就要是9600*16
我只在modelsim上跑了功能仿真
TKS
我来试试,有问题再请教您
请教一下,你这个程序的CLK 是多少? 看你需要用的波特率
baudrate*16就是需要提供给系统的时钟 “
20 20 20 20 20 20 20 20 A0 02 40 05 80 0A 40 04 80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 02 40 05 80 0A 40 04 80 20 20 A0 02 40 05 80 0A 40 04 80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 02 40 05 80 02 40 04 80 20 20 20 20 20 20 20 20 20 28 20 20 20 20 20 20 20 20 20 20 A0 02 40 05 80 0A 40 04 80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
”
将你的代码,新建工程了,,编译后,烧写到板子里,,在PC上用串口监控软件接收数据,自带的抛出数据,貌似应该全是16进制的“20”吧
但是发现中间有“错误”的数据,如红色部分
这个是啥原因呢?
本来是要截图的,发现不能直接上传图片,就copy了内容(部分) 发现,我串口调试,是有偶校验的
现在,我把校验位给设置“NONE”了,主动抛出来的数据
“
05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 00 20 05 40 20 05 00 20 05 00 20 05 00 20 05 00 20 05
”
好像也不对吧
好像应该是发“00 20 50”,按找这个规律的话, 那出现 “40”的概念过高了,应该“00”错成了“40”
如果“40... ”开始的数据包, 那就太没规律了
劳驾给解释解释您这程序呀 谢谢
另外有两个问题
1、 4个 *.v的文件,不包括测试文件,,没找到波特率控制的地方呀,你是咋控制的?
2、如果不添加 UARTAutomatic.v文件,保留 uart.v文件加收、发两个文件,怎么使用?也就说可以完成如下功能么?
“
收发正常,能与PC 段的串口完成交互,,比如PC 发一串 16进制数(长度可变),
假设一条命令:bootcode len cmd para para... checksum,, 由PC端发送
FPGA ,将上面的可变命令行,全部接受,并根据CMD,PARA,即命令和参数,执行相应的 过程,并将执行结果,通过串口传给PC
返回包格式: bootcode len cmd res res... checksum
”
如果需要修改的话,说说大概思路,能详细点最好了 谢谢
本帖最后由 wangjun403 于 2013-5-8 13:54 编辑
我没有主动抛出任何数据
1.波特率是要你自己写个分频模块,把时钟输入进去的
2.UARTAutomatic.v文件,就是你发什么数据,就会收到什么数据,只是测试用的
uart.v文件加收、发两个文件,如果你要对发下来的数据进行处理,就需要用这个文件,比如你说的“ 假设一条命令:bootcode len cmd para para... checksum,, 由PC端发送”,就要对收到的数据另外进行处理
uart.v文件只负责接收你发过来的数据和将你要和PC交互的数据发回去
你只要看懂uart检测数据的原理,肯定可以看明白程序了
是在不明白,modelsim的仿真工程都在里面,自己跑下就好了 qq:272729928 学习中…… 楼主试试我这个,验证通过,
页:
[1]