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. Java实现的基础数据结构

    Java实现的基础数据结构 0,常用的基础数据结构 图1 基础数据结构&相关特性 图2 Java自带的类集框架&继承关系图 1,数组[Array] 特点:长度固定.查找方便[直接使用i ...

  2. Linux Too many open files

    Linux Too many open files 查看系统资源限制信息: sudo -s -u root -H id sudo -s lsof | awk '{ print $2 " &q ...

  3. logback替换log4j

    1.新建logback.xml放在src目录下(放在src下会自动加载,不需要再web.xml配置) 2.引入必要的jar包:

  4. 实现双向绑定Proxy比defineproperty优劣如何?

    前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素之一. Vue三要素 响应式: 例如如何监听数据变化,其中的实现方法就是我们提到的双向绑定 ...

  5. HTML之美化盒子

    1.    美化盒子 1.1.          美化文本 1.1.1.  字体大小[font-size]: 字符框的高度,可继承,默认值medium,16px.基准字号:浏览器设置的默认字体大小,通 ...

  6. Caffe测试单独的算子

    最近有一个需求是测试单独算子在CPU.Caffe使用的GPU.cuDNN上的性能,一个是使用caffe的time问题,还有一个是使用单独的test功能. time选项的使用,大家都比较熟悉,单独的te ...

  7. Matplotlib 随机漫步图

    import matplotlib.pyplot as plt from random import choice class Randomwalk(): def __init__(self,num_ ...

  8. 第九章、import 和from ...import

    目录 第九章.import 和from ...import 一.import和 from ...import ... 二.import模块名 第九章.import 和from ...import 一. ...

  9. 2.java多线程_synchronized(Lock)同步

    1.synchronized同步关键词 线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同 操作共享数据.因此为 ...

  10. 8.2.ZooKeeper应用场景

    7.ZooKeeper应用举例 为了方便大家理解ZooKeeper,在此就给大家举个例子,看看ZooKeeper是如何实现的他的服务的,我以ZooKeeper提供的基本服务分布式锁为例. 7.1 分布 ...