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. 【计数dp】Array Without Local Maximums

    参考博客:[CF1068D]Array Without Local Maximums(计数DP) [题意] n<=1e5 dp[i][j][k]表示当前第i个数字为j,第i-1个数字与第i个之间 ...

  2. 修改源码去除zblog博客分类目录的RSS图标

    zblog博客的所建立的分类默认前面是有一个RSS图标的,如下图所示: 其实这个图标的存在并不能起到太大的美化作用,增加用户订阅数量的作用.那么应该如何去掉这个RSS图标呢? 这个RSS图标的生成在z ...

  3. XML转换成DataTable

    #region XML转dataset //str 是xml字符串 public static DataTable GetResultXMLToDataTable (string str,string ...

  4. centos7--web项目使用远程mysql数据库

    07-django项目连接远程mysql数据库   比如电脑a(ip地址为192.168.0.aaa)想要连接访问电脑b(ip地址为192.168.0.bbb)的数据库: 对电脑a(ip地址为192. ...

  5. vue中params-解决换路由不刷新问题

    因为依赖路由的params参数获取写在created生命周期里面,因为相同路由二次甚至多次加载的关系 没有达到监听,退出页面再进入另一个文章页面并不会运行created组件生命周期,导致文章数据还是第 ...

  6. linux常用命令(4)

    linux常用命令(4) --- Vim编辑器与Shell命令脚本 如何使用vim编辑器来编写文档.配置主机名称.网卡参数以及yum仓库: 通过vim编辑器将Linux命令放入合适的逻辑测试语句(if ...

  7. 2.OR Mapping 介绍

    定义: ORM(Object Relational Mapping) -- 是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术. 简单说:ORM是通过使用描述对象和数据库之间的映射的元数据 ...

  8. hadoop-2.7.3安装kafka_2.11-2.1.0

    软件下载: http://mirrors.shu.edu.cn/apache/kafka/2.1.0/kafka_2.11-2.1.0.tgz 把下载好的包kafka_2.11-2.1.0.tgz 上 ...

  9. Delphi WaitCommEvent函数

  10. 《python解释器源码剖析》第9章--python虚拟机框架

    9.0 序 下面我们就来剖析python运行字节码的原理,我们知道python虚拟机是python的核心,在源代码被编译成字节码序列之后,就将有python的虚拟机接手整个工作.python虚拟机会从 ...