1.配置EEPROM. 使用PlxMon打开9030,基本修改Spacex(0,1,2,3), Chip selectx(0,1,2,3), 中断状态INTCSR(0x74), 其他(0x78),详细说明一下。

(1)Spacex、Chip Selectx

首先明确使用哪几个本地地址空间(9030本地端几个RAM?硬件连接几根CS信号线?),例如硬件将CS0信号连接RAM1,CS2信号连接RAM2,那么你需要配置Space0和Space2. 4个Space的配置方法一样,看你需要哪个就配置哪个,不需要的禁用之。

举例:我的硬件CS0挂了一片16KB的RAM1,本地总线8数据位宽,CS1挂了4K的RAM2,数据读写采用突发模式(burst mode)。

Descriptor0(0x50): 0x00002081, 置bit[0]指示内存映射,任意32bit PCI空间,置Enable prefecth(跟速度有点关系,不过实际没感觉出来),其余的不管。

Range0(0x28):0xFFFFC000, 16KB. PCI memory. memory的效率和速度要比IO快。

Remap0(0x3C):0x00000001, 置bit[0],启用Space0.

CS0 Bace(0x64):0x00002001, 16Kb(为什么不是0x4000,看9030db), Bace,0x000000

Descriptor1(0x54): 0x00002081, 置bit[0]指示内存映射,任意32bit PCI空间,置Enable prefecth(跟速度有点关系,不过实际没感觉出来),其余的不管。

Range1(0x2C):0xFFFFF000, 4KB. PCI memory. memory的效率和速度要比IO快。

Remap1(0x40):0x00000001, 置bit[0],启用Space0.

CS1 Bace(0x68):0x00004801, 4Kb, Bace,0x004000(CS0已经将0x4000一下占用)。

(2)INTCSR(0x74)

使能Lint1,使能PCI中断。

(3)其他(0x78),可选,可不配置。这里可以配置PCI操作配置空间的IO/MEM资源诉求,这样在PCI设备枚举阶段,系统就会分配响应的资源。例如你选择IO和MEM,那么就分配了2种操作配置寄存器的地址段。

2.inf文件,前几篇文章中已经对这部分学习过。

3.编写驱动及功能接口

(1)选择实现方案

有2种方案:a.是plx官方的sys文件,使用plx SDK提供的API再次封装我们的功能接口;b.Driver Studio+DDK的开发策略。

我一开始就选择了a方案,不过b方案也可行,只是b方案需要理解一下DriverWorks生成的代码框架,注意处理windows内核开发的关键点。

(2)a方案

看SDK下的Samples,重点理解设备打开函数、内存映射函数、中断使用。这几个函数理解明白后,可以写自己的应用层程序,读写硬件。

(3)b方案

需要明白几个事情后,再写代码。

i.应用程序CreateFile、WriteFile、ReadFile、CloseHandle时,分别调用哪些IRP分派函数?

ii.应用程序怎么向CreateFile传设备连接符参数?如果是多个设备呢?

iii.isr,isr_DPC是怎么回事?运行在什么IRQL上?

iv.分页内存和非分页内存区别,哪一种堆可以用在较高级别的IRQL上,为什么?

v.系统上电后,怎么给PCI设备分配资源(地址资源、中断资源),在驱动中怎么读写寄存器,读写pci本地RAM空间?

vi.中断后怎么处理,缓存数据(FIFO)?给应用程序发信号?DPC具体怎么处理?

vii.调试查看驱动程序执行信息,简单点的工具是driver monitor, 打印。

如果这些问题,在心中已经较明确,那么就开始准备动手吧。我先罗列出这些问题,日后一点点回答。

4.写代码的思维方式

写代码之前,把关键点想明白。写代码的过程,需要你集中精力和细节细心,认真思考,尽量早的避免明显的漏洞,Debug是件态痛苦的事情了。写代码不是写散文,更不是聊天,而是思考。

在处理有逻辑顺序的模块时,一定要记着使用状态机的思想,这样能让你的思路清晰。不过,写完状态机后,要认真的多捋几遍,这里是最容易出问题的地方。

5.克服一个个的技术难题

在你解决技术问题时,记着今天解决的事情,不要明天就忘记啦。总结你犯过错误和走过的误区,才是你做这件事本身对你的收获。

9030PCI CAN驱动开发点滴的更多相关文章

  1. WDK驱动开发点滴

    老程序员做新方向,老树发新芽,作为菜鸟的我,写点心得,用以记录并与同行交流 1对一些概念的理解: KMDF与UMDF.两者的框架,及使用VS生成的初始代码基本相同,只有所包含的头文件不同,链接的系统库 ...

  2. 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC

    一.[前言] (1)本文将用到IOC框架Unity,可参照<Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备>(2)本文的解决方案是基于前述<使用I ...

  3. 使用IdleTest进行TDD单元测试驱动开发演练(2)

    [前言] 1. 有关上篇请参见<使用IdleTest进行TDD单元测试驱动开发演练(1)>,有关本篇用到Entity Framework Code First请参见<使用NuGet助 ...

  4. 使用IdleTest进行TDD单元测试驱动开发演练(1)

    [前言] 开发工具:Visual Studio 2012 测试库:Visual Studio 2012自带的MSTest DI框架:Unity 数据持久层:Entity Framework 前端UI: ...

  5. 行为驱动开发iOS <收藏>

    前段时间在design+code购买了一个学习iOS设计和编码在线课程,使用Sketch设计App,然后使用Swift语言实现Designer News客户端.作者Meng To已经开源到Github ...

  6. TDD测试驱动开发

    TDD测试驱动开发 一.概念 TDD故名思意就是用测试的方法驱动开发,简单说就是先写测试代码,再写开发代码.传统的方式是先写代码,再测试,它的开发方式与之正好相反. TDD是极限编程的一个最重要的设计 ...

  7. Linux驱动开发概述

    原文出处:http://www.cnblogs.com/jacklu/p/4722563.html Linux设备分类 设备的驱动程序也要像裸机程序那样进行一些硬件操作,不同的是驱动程序需要" ...

  8. Android驱动开发5-8章读书笔记

    Android驱动开发读书笔记                                                              第五章 S5PV210是一款32位处理器,具有 ...

  9. 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤

    一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...

随机推荐

  1. .Net面试题三

    1..Net中类和结构的区别? 2.死锁地必要条件?怎么克服? 3.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类? 4.构造器COnstructor是否可以被继承?是否可以被 ...

  2. 客户端相关知识学习(八)之Android“.9.png”

    参考 Android中.9图片的含义及制作教程 .9.png Android .9.png 的介绍

  3. luogu题解 P2184 【贪婪大陆】

    题目链接: https://www.luogu.org/problemnew/show/P2184 思路: 首先我想吐槽一下为什么现有题解中的做法都是一样的,而且还比较难以理解; 我就讲下我的做法,本 ...

  4. vue+ element table如何给指定的单元格添加点击事件?

    今天使用vue,以及element-ui这个框架时,发现业务需要在表格里加一个连接跳转,当时立刻打开element的官网,进行查看http://element-cn.eleme.io/#/zh-CN/ ...

  5. RedisCluster 添加/删除节点

    一,redis cluster命令行 //集群(cluster) CLUSTER INFO 打印集群的信息 CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息. ...

  6. KTV歌曲播放原理

    歌曲播放原理 一开始要有一个Song类,在类外面定义枚举,在里面放四种状态, 为:已播放,未播放,重唱,切歌 在类里把歌曲名称和路径封装成字段 起初每首歌的状态默认为未播放 通过MadeSongPla ...

  7. Invalid property value

    又见这个错误!头几天同事遇到这个问题,我查到去年写的并按此解决了,原文在这里,查了半天,才查出是ftShortInt造成的这个错误. 当我们在设计期将ClientQuery.Active设置为True ...

  8. https和http的post发送总结

    本文为转贴内容,感谢作者阿进! 需要转发数据到客户的https的服务器上出现一系列问题总结如下: 1.因为是https首先考虑到用最新的控件NetHTTPClient(只有在XE8以上才有). 2.客 ...

  9. MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)

    五.数据查询语言(DQL) (重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...

  10. 《python解释器源码剖析》第2章--python中的int对象

    2.0 序 在所有的python内建对象中,整数对象是最简单的对象.从对python对象机制的剖析来看,整数对象是一个非常好的切入点.那么下面就开始剖析整数对象的实现机制 2.1 初识PyLongOb ...