sasinop 发表于 2013-5-7 18:44:08

求个 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:31:12

本帖最后由 wangjun403 于 2013-5-7 19:33 编辑

串口是串口程序,只能实现基本收发

你说的协议在自己再实现个协议解码

有什么问题可以联系我

系统的时钟需要使用分频好的时钟
如果你是9600bps,输入时钟就要是9600*16

我只在modelsim上跑了功能仿真




sasinop 发表于 2013-5-8 07:07:08

TKS

我来试试,有问题再请教您

sasinop 发表于 2013-5-8 11:15:26

请教一下,你这个程序的CLK 是多少?

wangjun403 发表于 2013-5-8 12:32:54

看你需要用的波特率
baudrate*16就是需要提供给系统的时钟

sasinop 发表于 2013-5-8 12:43:52


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了内容(部分)

sasinop 发表于 2013-5-8 12:49:19

发现,我串口调试,是有偶校验的

现在,我把校验位给设置“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


sasinop 发表于 2013-5-8 12:56:03

好像也不对吧
好像应该是发“00 20 50”,按找这个规律的话, 那出现 “40”的概念过高了,应该“00”错成了“40”

如果“40... ”开始的数据包, 那就太没规律了

劳驾给解释解释您这程序呀 谢谢

sasinop 发表于 2013-5-8 13:06:26

另外有两个问题
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:51:22

本帖最后由 wangjun403 于 2013-5-8 13:54 编辑

我没有主动抛出任何数据

1.波特率是要你自己写个分频模块,把时钟输入进去的
2.UARTAutomatic.v文件,就是你发什么数据,就会收到什么数据,只是测试用的
uart.v文件加收、发两个文件,如果你要对发下来的数据进行处理,就需要用这个文件,比如你说的“ 假设一条命令:bootcode len cmd para para... checksum,, 由PC端发送”,就要对收到的数据另外进行处理
uart.v文件只负责接收你发过来的数据和将你要和PC交互的数据发回去

你只要看懂uart检测数据的原理,肯定可以看明白程序了
是在不明白,modelsim的仿真工程都在里面,自己跑下就好了

wangjun403 发表于 2013-5-8 14:04:21

qq:272729928

kongethan 发表于 2013-8-11 20:14:17

学习中……

dytdyt2010 发表于 2013-8-11 21:35:40

楼主试试我这个,验证通过,
页: [1]
查看完整版本: 求个 FPGA 串口 程序