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. Tensorflow加载预训练模型和保存模型

    转载自:https://blog.csdn.net/huachao1001/article/details/78501928 使用tensorflow过程中,训练结束后我们需要用到模型文件.有时候,我 ...

  2. python设计购物车

    设计购物车 一需求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提 ...

  3. P3748 [六省联考2017]摧毁“树状图”

    传送门 显然是可以树形 $dp$ 的 对每个节点维护以下 $5$ 个东西 $1.$ 从当前节点出发往下的链的最大贡献 $2.$ 节点子树内不经过本身的路径最大贡献 $3.$ 节点子树内经过本身的路径的 ...

  4. Json-server在Vue 2.0中使用--build文件中没有dev-server文件

    跟大佬的视频使用json-server模拟后台数据调用,发现build文件中并没有dev-server.js. 新版的vue-cli取消了dev-server.js和dev-client.js   改 ...

  5. 1如何给devexpress的gridview控件绘制全选按钮

    1 首先注册gridview的this.edibandedGridView.CustomDrawColumnHeader += EdibandedGridView_CustomDrawColumnHe ...

  6. <(* ̄▽ ̄*)/低碳生活管理系统

    首次在博客园发布文章,都是个人理解,有很多不足,多多包涵. 下面是对做过的作业低碳生活管理系统的剖析: 一:(建类) 二:(在Program[或自己命名的类]里调用SQL命名空间) 三:(Main方法 ...

  7. linux递归查找目录下所有文件夹以及文件

    相对于ls或者ll,可能find在这个时候更加给力 先看我的目录结构 tree命令是查看目录的结构,而且最后会列出所有的directory的数目以及文件夹的数目...好像我们接下来要做的就没有必要了, ...

  8. MongoDB学习笔记,基础+增删改查+索引+聚合...

    一 基础了解 对应关系 -> https://docs.mongodb.com/manual/reference/sql-comparison/ database -> database ...

  9. 第八章·Logstash深入-通过TCP/UDP收集日志

    1.收集TCP/UDP日志 通过logstash的tcp/udp插件收集日志,通常用于在向elasticsearch日志补录丢失的部分日志,可以将丢失的日志通过一个TCP端口直接写入到elastics ...

  10. -bash: ls: No such file or directory 错误的原因及解决办法

    ubuntu出现如下错误: { Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-42-generic x86_64) * Documentation: ...