一、此文背景

之前在我的第一篇博客《Ubuntu11.04下测试并口驱动程序过程—LDD实践》中说到过我的下一步计划“用FPGA开发外围设备卡,通过PCI总线或者ISA总线挂在研华的工控机上,自己做外围电路和写驱动程序”。经过3个多月时间,FPGA电路板已经做出第一版本,并经过初步调试,实现了基本的电压采集功能。FPGA扩展板的另一功能CAN通讯由于时间关系驱动软件部分尚未开展。

很幸运的是,因为之前比较仔细的参照了Altera的FPGA设计手册,所以电路板设计基本没大问题,第一版本制作出来,FPGA就挺好用的。唯一缺憾是FPGA的配置存储芯片我用的是以前一直都用的EPCS4,但是实际用QUARTUS转成jic想下载配置文件的时候,才发现不能成功,说是EPCS4容量太小。才发现CLONE 3系列FPGA必须用EPCS16以上的芯片,又比较幸运的时EPCS4和EPCS16的管脚和封装都一样,所以在电路板上替换掉就行了。 这部分的经验是最好先买好芯片,定好封装后,再设计PCB,一是因为这样画出的PCB和封装才好吻合,另外有的芯片比较难买,不要设计好PCB后,才发现有的芯片买不到。二是,还是就要反复看相关的设计手册,比如EPCS型号问题。

二、FPGA扩展板硬件设计的简单介绍

大概设计如下图标注,本次实验测试时,是这样一个连接,总共堆了三个PC104模块在一起,最底层的是研华的PCM3362主板,第二层的是买的PEAK-CAN模块(没啥用,懒得拔掉),第三层是我自己设计的FPGA扩展模块。

本次调试的主要任务是对AD7859芯片写驱动,在UBUNTU下实现驱动API,通过系统调用能直接读A/D转换电压和配置AD7859芯片。而FPGA是PC104总线和AD7859二种总线中间电路桥的作用,PC104用的是8位,而AD7859是16位,另外AD7859总线读写数据需要一些特殊的信号,这些桥接都是由FPGA来做。具体读写时序参见AD7859说明文档。

三、调试过程中的一些问题,经验,总结(每个问题至少困扰我2天以上)

1、第一个问题,刚开始遇到的低级错误—对总线特性不熟悉!

刚开始板子上电:在我的FPGA板子中,想用signaltap捕捉PC104主板向FPGA写的总线数据总是出现错误的数据!! 我在UBUNTU下通过命令outb(0xAA, 0x307)向FPGA板写数据,即向I/O地址0x307发送数据0xAA。但是我在QUARTUS在线调试时用signaltap功能捕捉时总是发现,当地址线是307时,并且read信号有效时,数据线上出现的不是0xAA这个数据。

这个问题搞的我很郁闷,不思其姐啊。明明我在之前博客《Verilog语言定义的”寄存器“ 是否被优化掉》中已经测试过104总线向FPGA读写数据是完全没问题的。于是我去测试是不是我的FPGA板子的硬件连接,焊接有错误,导致数据不对。 然后又去看FPGA程序设计是不是把管脚号分配错误了,最后这些都排除,不是原因。

最后想了很久才发现,导致这个问题的原因恰好是我做  《Verilog语言定义的”寄存器“ 是否被优化掉》的实验时,连接在第一层主板PC104主板针脚上的导线还连在另一块FPGA板子上(连接图片见上述那个博客)。因为我没有对那个FPGA编程,所以它的连接PC104的通用管脚不一定是高阻态!(可能是低电平,可能是高电平),也就是说104总线上同时挂着2个设备,所以在我的FPGA板子会发现总线上出现错误的数据。 将那些导线拔掉后,再测试就正常了。

2、第二个问题,与AD7859通信

在这里遇到了很多问题,但是既然是对AD7859芯片写驱动,那么大多的通信问题都能归结到没有仔细去读芯片的使用说明文档,导致的不成功。

首先是总线数据位数的问题104可以是8位,可以是16位,最后选择的是8位PC104总线,16位AD数据总线,用FPGA做桥接。 我尚没有找到使用PC104的16位总线的方法,做了一些测试总是在FPGA中观测不到16位的总线数据。用outw(0xaaaa, 0x307)会观察到总线是分成二个写时序在写,先是0x307地址写低8位0xaa,接着再0x308地址写高8位0xaa,总之都不是16位数据。我怀疑应该是在UBUNTU中用写I/O内存,而不是I/O空间的方法才能写16位数据(也就是要先做内存映射,然后用iowrite()函数,见LDD P250页。)

第一个问题是我按照芯片的使用说明文档(用上电默认配置),用芯片管脚adconvert信号开启AD转换,然后直接去读A/D转换电压,用QUARTUS总是观测不到AD数据线上正确的AD转换值,有时会出现0-100之间的较小的数值。 开始一直怀疑是FPGA程序问题,后来实在没法了,用示波器测试芯片功能管脚时,才发现sleep管脚是0电平,芯片是不是在休眠?于是在FPGA中显示的给这个管脚高电平,再去测试功能管脚sleep, adconvert, adbusy(有高电平说明芯片在转换过程中),都没问题。 通过上述sleep管脚的错误,我才发现是我没有仔细读芯片说明文档。 于是再仔细读了读,发现是我理解错了,上电默认配置测试的是AN1和AN2之间的差分电压,而我理解的是AN1和地之间的电压,怪不得采样值会出现0-100之间的较小的数值。  按照文档中设置好AD7859的control register后(向AD总线写值0xE010),就能在AD总线上采到AN1和地之间的电压了。

第二个问题是在FPGA中能观测到这个AD采样值了,但是我始终不能通过PC104总线的读时序把这个值正确读入到UBUNTU系统中。折磨了我很久!

理应不会出现这样奇怪的错误,最后实在没办法,我新建了一个空工程,然后直接给一个定值0xAAAA,然后主板用读时序把这个定值分二次读入系统中,发现能正常读入。同样把这个测试模块放进上述非新建的工程中,就读入失败。 我怀疑就是我以前用的工程太杂乱了,是从最先的CLONE2工程直接拿过来再修改着用,而不是新建的空项目工程。

把相应的需要的模块,基本不修改,重新移植到新建的空工程中,就能正常工作了。所以我怀疑QUARTUS也有不确定性,好像顶层设计的一些模块删除后仍然会在综合过程中综合编译?  总之新建工程后,把这个奇怪的问题解决了。

3、FPGA程序设计的一些总结

经过上述1,2后,总算能采进电压值了,但是中间过程中还出错过许多verilog设计的小问题,很麻烦,也浪费了许多时间。

1、在写信号isawr的下降沿写数据,和在isard的下降沿读数据的问题。

基于PC104接口(ISA接口)的FPGA外围电路扩展板调试经验。相关推荐

  1. ft232h引脚_基于FT232R的USBUART接口设计.pdf

    基于FT232R的USBUART接口设计 b舶≤≯----------.. [摘要] 鉴于PC机USB接口的通用性以及充分发挥USB/ 基于FT232R桥接芯片开发USB/UART接口是一种较为简 便 ...

  2. fmc接口定义_FMC(FPGA Mezzanine Card)_百度百科

    FMC (FPGA Mezzanine Card) 编辑 锁定 讨论 上传视频 FMC:英文全称,FPGA Mezzanine Card.是一个应用范围.适应环境范围和市场领域范围都很广的通用模块.F ...

  3. java字典写实例,基于JAVA的新华字典接口调用代码实例

    基于JAVA的新华字典接口调用代码实例 接口描述:基于JA V A的新华字典接口调用代码实例 接口平台:聚合数据 import java.io.BufferedReader; import java. ...

  4. c语言实现http服务器_基于postman实现http接口测试过程解析_服务器其它

    这篇文章主要介绍了基于postman实现http接口测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 无意中发现了一个巨牛的人工智能教程, ...

  5. 接口测试用例设计思路_基于python语言的接口自动化demo小实战

    近期通过自己的学习以及实战,完成了一个关于测试接口的接口自动化demo. 下面想跟大家分享一下,主要的思路是根据接口文档确定测试用例,并将测试用例写在excel中. 01 因为只是小作demo,测试用 ...

  6. 基于springboot的支持http接口+dubbo接口的TestNG自动化测试框架

    一.背景 由于大多数公司都是使用Java作为后端开发语言,因此为了更好的与研发的框架对接.测试,掌握一套Java的自动化测试框架也逐渐成为测试人员的必修课. 同时随着现在微服务框架的流行,自动化测试框 ...

  7. 写服务器node实际项目,基于node搭建服务器,写接口,调接口,跨域的实例

    刚开始学node,今天做这个也是累死宝宝了,以后可以自己写接口自己用了,再也不用麻烦人家后台人员了,这些年我们欠他们的太多了,说多了都是泪,不多说,往下看吧... 服务端项目目录下: 1.npm in ...

  8. 基于php汇率接口调用实例,基于C#的汇率接口调用代码实例

    基于C#的汇率接口调用代码实例 代码描述:基于C#的汇率接口调用代码实例 代码平台:聚合数据 using System; using System.Collections.Generic; using ...

  9. 新华字典php版,基于php的新华字典接口调用代码实例

    基于php的新华字典接口调用代码实例 接口描述:基于php的新华字典接口调用代码实例 接口平台:聚合数据 // +------------------------------------------- ...

  10. 实习手册八(Python基于Tornado框架的接口响应服务)最终章

    目录 前言 Tornado_program common handler_base mysql_base sqlalchemy_base redis_base model log user serve ...

最新文章

  1. 甲骨文们是怎么被干掉的
  2. modbus报文解析工具_Linux下网络流量常用那些监控工具
  3. Java的知识点22——时间处理相关类、Date时间类(java.util.Date)、DateFormat类和SimpleDateFormat类、Calendar日历类
  4. 斯坦福大学深度学习视频(CS231n课程)
  5. springboot中获得app_在SpringBoot中读取环境变量
  6. KlayGE 3.10.0发布!
  7. 计算不定方程解的个数的方法汇总
  8. C语言auto、register、static、extern关键字
  9. 生产是什么意思_俗话说:“牛遇无春年,出力好耕田”是啥意思?有什么道理?...
  10. C# “配置系统未能初始化”
  11. python3.5安装PyHook3
  12. delphi 剪切板变量_Delphi操作剪贴板
  13. 《电路》邱关源 思维导图 第二章 电阻电路的等效变换
  14. 蠕虫病毒html,蠕虫病毒的防治
  15. 计算机磁盘检查,使用磁盘检查工具进行硬盘诊断
  16. ZOJ3987(二进制枚举+java大数)
  17. 【论文翻译】Mastering the game of Go with deep neural networks and tree search( 用深度神经网络和树搜索实现围棋游戏)
  18. 【LOJ#10064】黑暗城堡
  19. 单模连接器损耗与影响因素
  20. 关于本号,你想看的都在这里

热门文章

  1. mysql 批量插入 性能_MySQL批量插入数据性能比较
  2. euraka动态改变元数据无需重启服务
  3. 给mBlock添加扩展模块
  4. VMware Workstation 虚拟机中的 虚拟机访问物理机(仅主机模式)
  5. 笔记本安装黑苹果MacOS BigSur记录
  6. 基于高德地图api的热力图配置及显示调优
  7. 博客程序PHP,10个开源的PHP blog 博客程序推荐
  8. MAC表和ARP表的老化时间:
  9. IBM人工智能进入法律行业:推世界首位AI律师ROSS
  10. PMP课程笔记:第1-3章 引论 项目运行环境 项目经理