按地址读取数据

FPGA逻辑验证不求人:用WinDriver 10.21快速调试PCI板卡(附VS2015工程) 本文详细介绍了如何使用WinDriver 10.21驱动开发工具快速调试FPGA的PCI板卡,无需编写复杂底层驱动即可完成硬件逻辑验证。通过环境搭建、设备识别、驱动框架生成和VS2015工程实现等步骤,帮助开发者高效完成PCIe接口验证,大幅提升FPGA开发效率。 阅读详情

对已知的地址进行数据读取,需要用到下面读取函数:

UInt32 wdc_lib_decl.WDC_ReadAddr8(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref byte val)   //1 byte
UInt32 wdc_lib_decl.WDC_ReadAddr16(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref ushort val)//2 bytes
UInt32 wdc_lib_decl.WDC_ReadAddr32(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref uint val)  //3 bytes
UInt32 wdc_lib_decl.WDC_ReadAddr64(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref ulong val) //4 bytes

Example:

<pre name="code" class="csharp">
private WDC_ADDR_MODE m_mode = WDC_ADDR_MODE.WDC_MODE_8;
private byte[] m_bData = new byte[1];//result
private WDC_ADDR_MODE m_mode = WDC_ADDR_MODE.WDC_MODE_16;
private byte[] m_wData = new byte[2];//result
private WDC_ADDR_MODE m_mode = WDC_ADDR_MODE.WDC_MODE_32;
private byte[] m_u32Data = new byte[4];//result
private WDC_ADDR_MODE m_mode = WDC_ADDR_MODE.WDC_MODE_64;
private byte[] m_u64Data = new byte[8];//result

private UInt32 m_dwOffset = 0x00;
private UInt32 m_dwBar = (UInt32)cmboBar.SelectedIndex;//PCI BAR

switch (m_mode)
{
    case WDC_ADDR_MODE.WDC_MODE_8:
        dwStatus = wdc_lib_decl.WDC_ReadAddr8(device.Handle, m_dwBar, m_dwOffset, ref m_bData[0]);
        break;
    case WDC_ADDR_MODE.WDC_MODE_16:
        dwStatus = wdc_lib_decl.WDC_ReadAddr16(device.Handle, m_dwBar, m_dwOffset, ref m_wData[0]);
        break;
    case WDC_ADDR_MODE.WDC_MODE_32:
        dwStatus = wdc_lib_decl.WDC_ReadAddr32(device.Handle, m_dwBar, m_dwOffset, ref m_u32Data[0]);
        break;
    case WDC_ADDR_MODE.WDC_MODE_64:
        dwStatus =dc_lib_decl.WDC_ReadAddr64(device.Handle, m_dwBar, m_dwOffset, ref m_u64Data[0]);
        break;
}

大量数据的读取,要用到


<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="csharp">
UInt32 DLLCALLCONV WDC_ReadAddrBlock(
    WDC_DEVICE_HANDLE hDev,
    UInt32 dwAddrSpace,
    KPTR dwOffset,
    UInt32 dwBytes,
    PVOID pData,//output data pointer; could be array of byte,UInt16,UInt32,UInt64
    WDC_ADDR_MODE mode,
    WDC_ADDR_RW_OPTIONS options);



Example:

private byte[] m_bData;
private UInt16[] m_wData;
private UInt32[] m_u32Data;
private UInt64[] m_u64Data;	
UInt32 dwFloorBytes = ((UInt32)(m_dwBytes / (UInt32)m_mode)) *(UInt32)m_mode;//number of bytes to be read
private bool m_bAutoInc = true;//Auto Increase
WDC_ADDR_RW_OPTIONS dwOptions = (m_bAutoInc ?WDC_ADDR_RW_OPTIONS.WDC_ADDR_RW_DEFAULT : WDC_ADDR_RW_OPTIONS.WDC_ADDR_RW_NO_AUTOINC);
switch (m_mode)
{
    case WDC_ADDR_MODE.WDC_MODE_8:
        dwStatus = wdc_lib_decl.WDC_ReadAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_bData, m_mode, dwOptions);
        break;
    case WDC_ADDR_MODE.WDC_MODE_16:
        dwStatus = wdc_lib_decl.WDC_ReadAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_wData, m_mode, dwOptions);
        break;

    case WDC_ADDR_MODE.WDC_MODE_32:
        dwStatus = wdc_lib_decl.WDC_ReadAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_u32Data, m_mode, dwOptions);
        break;

    case WDC_ADDR_MODE.WDC_MODE_64:
        dwStatus = wdc_lib_decl.WDC_ReadAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_u64Data, m_mode, dwOptions);
        break;
}


EEPROM 读取数据异常全为0xFF?I2C时序与地址宽度问题解析 本文针对EEPROM读取数据异常全为0xFF的经典问题,深入解析了其根本原因在于I2C通信中的地址宽度配置错误。文章通过对比不同容量EEPROM芯片的时序要求,指出操作24C64等大容量芯片时,必须使用16位地址宽度而非8位,并提供了使用示波器进行时序诊断与具体的代码修复方案,帮助开发者彻底解决这一常见陷阱。 阅读详情

相关推荐

别再只发首地址了!用51单片机读写AT24C02 EEPROM,连续读取数据避坑指南

本文深入探讨了51单片机与AT24C02 EEPROM的连续读写操作,揭示了常见错误背后的地址指针特性问题,并提供了经过验证的解决方案和优化代码。通过详细分析时序要求和调试技巧,帮助开发者避免数据读取错误,提升嵌入式系统的可靠性。

weixin_30552811的博客 359

驱动程序(11) Windriver下读写外部设备BAR内存资源的方法

前言 在利用windriver生成外部设备的驱动程序的时候,我们往往需要去访问外部设备上的内存资源,windriver提供了几种API接口(以下都以32位来介绍),只需要提供一些参数就可以访问到外部设备的内存资源了。 WDC_WriteAddr32/WDC_ReadAddr32 这两个API函数的定义如下: hDev:被访问的外部设备的句柄 dwAddrSpace:外部设备上的某个地址空间段,也就...

a4642313的博客 2644

【Pavia】遥感图像数据集下载地址和读取数据集代码

遥感系列第13篇.遥感图像处理方向的学习者可以参考或者复刻

rvdgdsva的博客 9651

Windriver驱动开发工具使用快速入门

平台:ise14.7,Win driver10.21,Visual Studio 2015操作系统:Windows7硬件设备:PCI板卡最近在开发过程中,作为一个逻辑开发人员,在有的的情况下需要自己快速验证逻辑正确性。我使用WinDriver来作为驱动开发软件进行简单调试硬件设备。适合我们这种初学者使用,我们不需要设计复杂的驱动程序,就可以验真硬件的正确性。今天我们使用WinDriver来进行PCI的简单访问,在使用WinDriver生成简单的驱动代码,来对硬件进行连续读写访问。这里省略FPGA关于PCI开

FPGA开发 | 高速接口与数字IC设计 6005

ABAP--如何读取地址信息

sap从4.0开始将地址信息数据存储到ADR*数据表中,其中ADRC为主表,其他为从表,如:ADR2 (Phone) and ADR3 (Fax) 。程序可以从这些数据表中直接读取数据,亦可使用ADDR_GET函数来提取数据。例如: 销售机构的地址  gv_fb_addr_get_selection-addrnumber = tvko-adrnr.             "SADR40A 

软件开发资料汇总 616

c#如何通过CH341读取数据的Demo,能够读取指定地址值的功能?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 1236

问题记录:关于WinDriver和CVI驱动PCI读写执行速度对比

平台:ise14.7,Win driver10.21,Visual Studio 2015,LabWindows CVI 2013操作系统:Windows7硬件设备:PCI板卡最近在开发过程中,作为一个逻辑开发人员。需要在PCI总线上映射其他接口时序。在写入周期期间将PCI总线上的写入接入其他接口上,在读取期间将PCI总线上的读取时序接入其他接口上并添加初始化延迟16个周期。在使用Windriver驱动开发,和CVI驱动开发测试硬件的读写时发现了一个现象。在CVI中插入读写BAR1空间代码。 下面说明一

FPGA开发 | 高速接口与数字IC设计 907

windriver for PCI/ISA/Card bus Rev10.21 中英文使用手册

此为未完成版,本人边看此英文手册,边翻译成中文。鉴于本人水平有限,如有错误,敬请大家指出。

WIN7 x64 VC6.0 环境,Windriver 10.21编译不通过的解决办法

在WIN7上,windriver产生的驱动文件在VC6上总是编译不过,VC6提示如下:test_lib.obj : error LNK2001: unresolved external symbol _WDC_ReadAddr32@16wdc_diag_lib.obj : error LNK2001: unresolved external symbol _WDC_ReadAddr32@16tes...

hayiji的专栏 2203

利用WinDriver开发PCI设备驱动程序

摘要:WinDriver是一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法与思路,极在地简化了驱动程序的编制;同时,又没有牺牲驱动程序的性能,是一套高效、快捷的PCI驱动程序开发软件包。特别适合专业硬件人员的使用。 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发。作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果。从目前国内的资料上来看,大多数设计人员还是在用DDK、Wtools开发设备驱动程序,因而作者觉得有必要向大家介绍与推荐这个软件。WinDriver是一套设备驱动程序开发组件,它的目的就

利用AI辅助工具Codex在30分钟内高效生成发明专利说明书草案

Codex 是什么?简单说,它是 OpenAI 推出的一个高级 AI 工作平台,最初定位是软件开发辅助工具,但现在它的能力边界已经远远超出了写代码。根据 OpenAI 官方信息,每周有超过 500 万人使用 Codex,其中 40% 的新用户是非开发者,包括分析师、营销人员、研究人员等。这意味着 Codex 正在从一个程序员专属工具,演变为一个面向广泛知识工作者的生产力中枢。 那么,它和我们今天要谈的“写发明专利”有什么关系?核心在于 Codex 的“角色专属插件”和“上下文构建”能力。它不再只是根据零散的

weixin_29053067的博客 320

CPU 发起内存读取请求,从地址 0x2000 读取数据的原理

CPU 从内存地址(如 0x2000)读取数据的过程涉及多个步骤,包括指令解码、有效地址计算、发起内存读取请求、内存控制器响应、数据传输和操作完成。这个过程是计算机系统中数据处理的基础,理解这一过程对于深入学习计算机体系结构和优化程序性能至关重要。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 385

拌合楼软件开发(24)接收微信消息生成车辆计划

【摘要】针对拌合站客户群体文化程度不高、习惯微信群沟通的业务场景,提出通过企业微信机器人实现微信对话下单的解决方案。核心是利用WorkTool工具的消息回调机制:1)配置接收消息的API接口;2)解析JSON格式的对话数据,筛选@机器人的有效消息;3)采用*号分隔符提取订单信息并进行校验;4)建立微信昵称与客户系统的映射关系。方案解决了传统系统登录门槛高的问题,但需注意群名唯一性、多系统对接及客户身份识别等关键问题。全文重点阐述技术实现逻辑而非具体代码。

morsth的博客 1045

python从内存中读取数据,python-从特定的内存地址读取数据/对对象的引用

如何读取(并放入新的变量中)存储在特定内存地址中的数据?例如,我知道: >我希望将数据存储在新变量中的0xabd2b00处,以便我可以工作和使用对象的所有功能.假设我无权访问创建此对象的原始变量.更新:以上问题已得到回答,所以我更新了我的问题.假设我有两个python文件:file1.py和file2.pyFile1.py:.... rest of the code ....class ne...

weixin_42366533的博客 2740

硬件测试之—纹波测试为什么不要使用接地夹子

示波器为什么不推荐使用接地夹

qq_19294353的博客 2988

Android OTA 升级实战指南:从原理到实现

本文详细解析了Android OTA升级的原理与实现方法,包括AB升级与Recovery升级的机制对比、OTA升级包制作流程以及应用层升级功能的实现。通过实战案例和常见问题排查指南,帮助开发者掌握Android系统无线升级技术,提升设备维护效率。

weixin_42652674的博客 199

交换机通过读取数据帧中的源MAC地址,自动记录端口与MAC地址的对应关系,形成“MAC地址表”

1. **带宽独享**:每个连接到交换机的设备(如电脑、服务器)都能独享端口带宽,不会像共享式集线器(HUB)那样所有设备争抢同一带宽。 2. **并发通信**:交换机可同时在多个端口之间建立独立的数据通道,例如端口1与端口2通信的同时,端口3能与端口4通信,互不干扰。 3. **减少冲突**:通过“存储-转发”机制,交换机会先接收完整数据帧再转发,从根本上避免了共享网络中常见的“数据冲突”问题。

[Blog][Domain] programb.blog.youkuaiyun.com 362

IntelliJ IDEA 2025.1 + Gradle 镜像配置避坑指南:解决依赖下载慢的终极方案

本文针对IntelliJ IDEA 2025.1开发环境中Gradle依赖下载缓慢的问题,提供了详细的镜像配置避坑指南。通过解析Gradle依赖解析机制,重点指导如何正确配置阿里云等国内镜像仓库,并分享验证配置生效、排查常见错误及高级优化技巧,旨在彻底解决依赖下载难题,提升开发效率。

weixin_28835551的博客 532

读取数据与地址对齐

读取数据与地址对齐   在chinaunix呆久了,便想在这里记录一些想法,也整理一下以前零散的记录,希望能和大家共进步。此篇文章也作为开博第一回吧。   今天翻看一本书,看到了代码移植需要注意的若干问题,其中提到数据对齐,让我想起遇到的x86和ARM平台一些小区别。 有时候我们需要强制转换类型以便得到我们期望的数据,例如

hunanchenxingyu的专栏 2259

Flutter SDK的删除与重装:一步步教你如何轻松搞定

在Flutter开发过程中,我们可能会遇到一些需要重新安装Flutter SDK的情况,例如升级Flutter版本、解决依赖冲突等。本文将详细介绍如何删除并重新安装Flutter SDK,让你轻松应对各种问题。

理论都是虚的,代码才是王道。 2247

【图像超分】论文复现:经典超分 | SAN的Pytorch源码复现,跑通源码,适配高版本的python/pytorch/cuda,使用EDSR-PyTorch进行训练和测试

本文介绍了单幅图像超分辨率重建方法SAN(二阶注意网络)的代码实现。文章详细说明了在高版本Python/Pytorch环境下适配SAN源码的方法,并提供了修改后的完整代码和预训练模型下载链接。 主要亮点包括: 将SAN模型实现整合到EDSR-Pytorch框架中,解决了高版本环境下的兼容性问题 提供了完整的数据集准备指南(DIV2K训练集和5个测试集) 给出了详细的测试命令,涵盖x2、x3、x4不同放大倍率 公开了预训练模型和可视化结果的下载资源 提供了修改后的适配高版本环境的代码。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1412

nand fllash的选中/取消,发地址、发命令、空闲等待、读取数据功能的程序编写

1、所有相关的nand flash寄存器构成一个结构体,便于操作 typedef struct {     S3C24X0_REG32   NFCONF;     S3C24X0_REG32   NFCONT;     S3C24X0_REG32   NFCMD;     S3C24X0_REG32   NFADDR;     S3C24X0_REG32   NFDATA;

qingkongyeyue的博客 1008

硬件工程师学习-硬件的单元测试(UT)(1)电源与时钟的测试

我们在设计的时候,通过控制电源的上电使能管脚或者通过MOSFET、或者专用的电源上电控制芯片,控制不同电源的上电时序,以确保每个芯片的电源上电时序是满足芯片的要求的。我们在测试的时候,需要对相关的要求一一测试,以确认每个上电时序满足要求的。在维基百科中,相位噪声的定义是“时域不稳定性(抖动)导致波形在相位上发生快速、短期、随机的波动,这种波动在频域中的表现即为相位噪声”。单元测试,一般是指基于开发人员自行开展的功能测试及各个功能单元的单元测试,是硬件信号级的测试,分为基本测试和信号完整性测试。

qq_43416206的博客 4034

java 读取文件 地址,读取数据文件地址(Java)

I have this code for reading data and works fine but I want to change the start point that the data is read from - My DataFile.txt is "abcdefghi"and the output is1)972)983)994)100I want to start at th...

weixin_35453718的博客 274

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HBase读取数据【内含hbase API常见操作地址仅供参考】

文章来源:http://www.yiibai.com/hbase/hbase_read_data.html【hbase API常见操作】 get命令和HTable类的get()方法用于从HBase表中读取数据。使用 get 命令,可以同时获取一行数据。它的语法如下: get ’table name>’,’row1’ 下面的例子说明如何使用get命令。扫描emp表的第一行。 hb

Thinking 1370

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

在由高速缓存、主存和硬盘构成的三级存储体系中,CPU执行指令时需要读取数据,DMA控制器和中断CPU发出的数据地址是**主存地址

在计算机存储体系中,**主存物理地址(Main Memory Physical Address)** 是主存(内存)中每个物理存储单元的唯一标识,相当于内存芯片上“存储单元的门牌号”。CPU或DMA控制器要读取/写入主存数据时,必须通过物理地址精准定位到具体的存储单元,是实现主存数据存取的“底层地址基础”。

[Blog][Domain] programb.blog.youkuaiyun.com 1126

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 打开,关闭设备
下一篇: 向给定地址写入数据
WavesLine
博客等级 码龄12年 18粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值