精华内容
下载资源
问答
  • 设计了一种基于背板总线的继电保护装置平台架构。...该设计方案在110 kV智能变电站主变保护测控一体化装置中得到应用,满足装置面向过程总线的功能及性能要求,现场运行结果表明该设计方案的有效性和实用性。
  • 根据实际项目需要,文中基于80C51F040单片机SPI总线和AD7891芯片,设计实现了多路数据的高速采集。文中给出了系统主要硬件电路和对时序控制软件编程。  1 系统硬件实现  本数据采集系统功能是能对多路...
  • 虽然PCI总线也经历了从PCI、...笔者在学习了相关设计资料的基础上,设计了基于PCI总线的数据采集卡,可以完成8路数字量I/O及4路差分14位A/D采集功能。本文将根据笔者的实际经验,介绍PCI接口扩展卡的软硬件设计流程。
  • 根据MAR中地址找到指令送往MDR中 MARout,MDRin,MemR 3 (MDR)->IR 将MDR中指令送往IR进行解析,解析完操作送往CU中进行分析 MDRout,IRin 4 解析指令 5 (R0)->MAR 将R0中形式地址送往MA

    ADD(R0),R1的指令流程和控制信号

    时序 微操作 说明 有效控制信号
    1 (PC)->MAR 将PC中的指令送往MAR中 PCout,MARin
    2 PC = PC+1,M(MAR)->MDR 根据MAR中的地址找到指令送往MDR中 MARout,MDRin,MemR
    3 (MDR)->IR 将MDR中的指令送往IR进行解析,解析完操作送往CU中进行分析 MDRout,IRin
    4 解析指令
    5 (R0)->MAR 将R0中的形式地址送往MAR中 R0out,MARin
    6 M(MAR)->MDR 将内存中MAR的地址对应的数据送往MDR中 MARout,MDRin
    7 (MDR)->Y 数据送往Y中 MDRout,Yin
    8 (R1)+(Y)->Z 将R1,Y中的寄存器内容加法送往寄存器Z中 R1out,ALUin,CU向ALU发送ADD信号
    9 (Z)->MDR 将Z中的内容送往MDR中 Zout,MDRin
    10 (MDR)->M(MAR) 将计算的结果存回内存 MemW,MDRoutE,MARout

    如果是#数字,代表是立即寻址,直接获取操作数。计算的结果需要存回前者

    ALU需要配合暂存器使用

    展开全文
  • 制限速的功能。在此基础上,为解决在开发过程中因对控制程序进行更新而需多 次拆卸的问题,本系统增加了在线升级功能—Flash BootLoader。对控制程序更 新时,不需将强制限速器从车身上拆下,通过OBD接口的CAN总线就...
  • 它应能接受来自主机命令,按不同模式控制A/D转换器采集数据,暂存于数据缓冲区,再根据主机命令发给主机。这部分功能由一个单片机及接口来实现是最优方式。  数据通信部分应包含:简单、高效、通用的数据通信...
  • 本文根据研究课题实用化被动毫米波雷达,结合项目背景和需求,设计开发了基于PCI总线的高速数据采集系统,该数据卡以FPGA为核心器件,其它外围接口的控制逻辑、芯片控制逻辑均由FPGA实现,与上位机之间的通信通过PCI...
  • 通信总线测试方案

    2021-05-11 09:51:33
    对于数据总线的功能异常,包括数据线与地址线,一般有 4 种: 数据线、地址线固定为高,也就是必能传输表示 1 。 数据线、地址线固定为低,也就是必能传输表示 0 。 数据线、地址线的两条或多条短路。 数据总线...

    概述

    本文档说明针对数据总线的测试方案。测试要点包括:

    • 数据线的功能测试。
    • 地址线的功能测试。
    • 数据总线的带宽性能测试。
    • 数据总线的压力性能测试。

    对于数据总线的功能异常,包括数据线与地址线,一般有 4 种:

    • 数据线、地址线固定为高,也就是必能传输表示 1 。
    • 数据线、地址线固定为低,也就是必能传输表示 0 。
    • 数据线、地址线的两条或多条短路。
    • 数据总线位宽异常。

    本方案根据以上需求与经验设计整理出对应的具体方法。在各平台具体开发中可以直接参考采用。

    注意,本方案不包含对存储芯片的读写验证。

    数据线功能测试

    测试数据线的功能,简单来说就是确认处理器把数据通过数据线写入对端,然后读取回来是一样的数据。所以需要对每一条数据线进行独立测试,这里我们采用了一些预置的数据,以实现对每条数据线进行测试。

    以下分别列出 32、16、8 位数据总线的预设读写测试数据,测试时根据实际情况对应选择。注意,后续的测试函数中的 uint32_t 数据类型需要与选择的预设测试数据类型保持一致。

    32 位数据总线预置读写测试数据:

    // Select a data type to suit data bus width. Take 32 bit data bus for example:

    static uint32_t data_pattern[] = {

       0x55555555,

       0xAAAAAAAA,

       0x00000000,

       0xFFFFFFFF,

       0x5555AAAA,

    };

    16 位数据总线预置读写测试数据:

    static uint16_t data_pattern[] = {

       0x5555,

       0xAAAA,

       0x0000,

       0xFFFF,

       0x55AA,

    };

    8 位数据总线预置读写测试数据:

    static uint8_t data_pattern[] = {

       0x55,

       0xAA,

       0x00,

       0xFF,

       0x5A,

    };

    进行先写后读确认测试:

    // The address only need one element space.
    bool data_bus_test(volatile uint32_t *address) {
        int i = 0;
        uint32_t data = 0;
        // Test data pattern one by one.
        for (i = 0; i < sizeof(data_pattern) / sizeof(uint32_t); i++) {
            // Write data to address.
            *address = data_pattern[i];
            // Read data from address.
            data = *address;
            if (data != data_pattern[i]) {
                printf("Test failed! expect: %x actual: %x\n", data_pattern[i], data);
                return false;
            }
        }
        return true;
    }

    注意,当该测试方法用于测试内存数据总线时,由于预设测试数据也是要存放于内存,读进来再进行写入-读取比较测试,将无法发现对比出数据总线错误。应采用如下移位方式生成数据的方式进行测试:

    // The address only need one element space.
    bool mem_data_bus_test(volatile uint32_t *address) {
        uint32_t pattern;
        uint32_t data = 0;
        for (pattern = 1; pattern != 0; pattern <<= 1) {
            // Write data to address.
            *address = pattern;
            // Read data from address.
            data = *address;
            if (data != pattern) {
                printf("Test failed! expect: %x actual: %x\n", pattern, data);
                return false;
            }
        }
        return true;
    }

    地址线功能测试

    对地址线的测试,关键在于检测是否有地址线出故障只能固定为 0 或者 1 了,以及是否有不同地址线短路的情况。所以我们需要对每一条地址线进行验证测试。采用的方法是使用地址为 2 的 N 次方的值进行数据访问测试。即(以 32 bit 地址线为例):

    0x00000000,0x00000001,0x00000002 …… 0x40000000,0x80000000 共 33 个地址。

    测试分两轮进行,分别测试排查地址线固定为0、1 的情况和地址线短路的情况。

    1)对这 33 个地址空间,我们全部写入数据0xAAAAAAAA,然后设置 0x0000000 地址空间为 0x55555555,逐个读取全部其他地址的数据回来,与 0x00000000 比较,如果发现有数据一致,则测试出该地址的位为 1 对应的地址线出现固定为 0 或 1 的故障。示例:

    0x00001000 地址空间读取回来的是 0x55555555,说明第 17 条地址线故障了,其值固定为 0 或者固定为 1 。

    2)在通过上面的测试后,同样设置 33 个地址空间为 0xAAAAAAAA 后,逐个设置地址对应空间为 0x55555555,检查其余地址的数据是否为 0x55555555,若有,则这个设置为 0x55555555 地址的数值为 1 的地址线与其他线发生了短路故障。

    参考代码:

    //  base_addr + bytes_cnt is the testing address space.
    bool test_addr_bus(volatile uint8_t *base_addr, uint32_t bytes_cnt) {
        uint32_t offset;
        uint32_t test_offset;
        uint32_t addr_mask = bytes_cnt - 1;
        uint8_t pattern = 0x55;
    uint8_t antipattern = 0xAA;
        // Write the default pattern at each of the power-of-two offsets.
        for (offset = 1; (offset & addr_mask) != 0; offset <<= 1) {
            base_addr[offset] = pattern;
    }
        // Check for address bits stuck high or low.
        test_offset = 0;
        base_addr[test_offset] = antipattern;
        for (offset = 1; (offset & addr_mask) != 0; offset <<= 1) {
            if (base_addr[offset] != pattern) {
                printf("Test failed! expect: 0x%02x actual: 0x%02x\n", pattern, base_addr[offset]);
                return false;
            }
    }
        /* Check for address bits shorted. */
        base_addr[0] = pattern;
        for (test_offset = 0; (test_offset & addr_mask) != 0; test_offset <<= 1) {
            base_addr[test_offset] = antipattern;
            for (offset = 1; (offset & addr_mask) != 0; offset <<= 1) {
                if ((base_addr[offset] != pattern) && (offset != test_offset)) {
                    printf("Test failed! expect: 0x%02x actual: 0x%02x\n", pattern, base_addr[offset]);
                    return false;
                }
            }
            base_addr[test_offset] = pattern;
    }
        return true;
    }

    数据总线带宽性能测试

    测试数据生成

    通过数据读写实现对总线的输出传输带宽测试。测试的数据可以通过重复预设的 data_pattern 来构建。最小数据量应根据系统计时的精度以及总线的理论带宽来计算得出。用于传输测试的数据量应保证传输耗时比计时精度高两个数量级,以提高统计结果的精确性。示例:

    假设当前系统的计时精度为 1 微秒,数据总线的理论带宽为 128 MBps,那么用于传输的数据量至少应为:128 MBps * 1E-6 * 1E2,为 12800 bytes。

    数据生成函数:

    bool gen_test_data(void *buf, uint32_t size) {
        int i = 0;
        uint32_t offset = 0;
        uint32_t pattern_size;
        uint32_t separated_count;
        uint32_t remain_bytes = 0;
        if (buf == NULL || size == 0) {
            printf("Invalid memory address or size!\n");
            return false;
        }
        pattern_size = sizeof(data_pattern);
        separated_count = size / pattern_size;
        for (i = 0; i < separated_count; i++) {
            memcpy(buf + offset, data_pattern, pattern_size);
            offset += pattern_size;
        }
        remain_bytes = size % pattern_size;
        memcpy(buf + offset, data_pattern, remain_bytes);
        return true;
    }

    测试数据校验

    通过统计传输生成的数据的耗时以及数据量,可以计算得出实测带宽值。但只有确保传输的数据都是正确的,统计出的带宽值才有意义。所以需要对传输的数据进行全部校验。需要注意的是,数据校验的耗时不能统计到传输耗时里面去,否则将计算出偏差的带宽值。

    两组数据的校验函数:

    // Return data element count on error.
    int verify_test_data(void *buf1, void *buf2, uint32_t size) {
        int i = 0;
        int err_cnt = 0;
        // Select a data type of buf to suit the process's bit width.
        uint32_t *buf[2] = {buf1, buf2};
        if (buf1 == NULL || buf2 == NULL || size == 0) {
            printf("Invalid memory address or size!\n");
            return -1;
    }
        for (i = 0; i < size; i++) {
            if (buf[0][i] != buf[1][i]) {
                ++err_cnt;
            }
        }
        return err_cnt;
    }

    数据总线压力测试(待补充)

    压力测试应当在两个方面注意考虑设计。

    其一,保证传输了足够大量的数据或足够长的时间。

    其二,传输过程确保是满负载。

    输出打印

    作为友好的测试程序,在发现数据检验异常时,应当以十六进制方式打印数据,方便调试:

    void hex_print(void *buffer, int size) {
        assert(buffer);
        assert(size > 0);
        int i, j;
        unsigned char *p = (unsigned char *)buffer;
        for (i = 0; i < size / 16; i++) {
            printf("%08x", i);
            for (j = 0; j < 16; j = j + 2) {
                printf(" %02x%02x", p[i * 16 + j], p[i * 16 + j + 1]);
            }
            printf("\n");
        }
        /* Print the last row. */
        if (size - i * 16 > 0) {
            printf("%08x", i);
            for (j = 0; j < size - i * 16; j = j + 2) {
                printf(" %02x%02x", p[i * 16 + j], p[i * 16 + j + 1]);
            }
        }
        printf("\n");
    }

    参考

    Software Base Memory Test:http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/software-based-memory-testing.html

    展开全文
  • PCI总线的信号采集

    2020-06-26 17:12:28
    为实现行波监测及其早期故障在线诊断,根据行波特性设计了一种基于PCI总线、以现场可编程逻辑器件FPGA为核心控制单元的数据采集系统。系统充分利用了PC机高性能的总线资源和大容量存储深度,采用"乒乓"缓存技术...
  • 根据CAN协议,一个节点发送数据时,CAN网络上其它任何节点都可以收到数据,而如果不进行滤波和屏蔽,则节点MCU需要处理每一个收到的数据,这就导致了MCU需要更多时间来处理接收到的数据,因此,为节省MCU处理...
     
    

    滤波寄存器与屏蔽寄存器的作用:

    根据CAN协议,一个节点发送数据时,CAN网络上的其它任何节点都可以收到数据,而如果不进行滤波和屏蔽,则节点的MCU需要处理每一个收到的数据,这就导致了MCU需要更多的时间来处理接收到的数据,因此,为节省MCU处理时间和节省资源,MCP2515(其它CAN器件亦是如此)具有硬件屏蔽和滤波功能。

    屏蔽寄存器的功能:决定接收报文中的某位是否与滤波寄存器中的相应位进行严格匹配,1有效。

     

    信息标识符的分配:

    CAN协议,只是定义了物理层和数据链路层,因此需要用户根据应用需求定义自己的应用层协议,即设计或分配通讯报文的信息标识符。

     

    在应用层协议设计的过程中,要充分考虑信息标识符的制定,这与系统的性能有直接关系。

        信息标识符的分配原则:

          (1)       在同一系统中,每条信息必须标以唯一的信息标识符。

          (2)       具有相同标识符且数据长度码不为0的数据帧仅可由一个节点启动,防止仲裁失效。

          (3)       相同标识符的远程帧不能同时发送。

          (4)       规划信息标识符,规定每一部分的功能。

     

        优先权的分配原则:

         (1)       实时性要求高的优先级分配要求高。

         (2)       具有相同标识符的帧,数据帧优先权高于远程帧。

     

    为了实现各厂家可以实现相互通讯,一些行业领导者,定义了一些标准的基于CAN的协议,如DeviceNet、CANopen等CAN协议。

     

    工程布线:

    采用双绞线,总线形;

    长距离通讯时,要接上匹配终端电阻;

    双绞线的屏蔽线最好接大地。

    展开全文
  • 分析了目前国内外多功能车辆总线的发展状况及自主研制MVB总线控制器及MVB网络接口卡对于我国轨道交通的 现实意义,介绍了基于CRC循环冗余校验和偶校验的基本原理,并根据TCN协议,在MVB总线中设计了一个由7位CRC校 验码...
  • Vehicle Spy3软件常用功能总线负载率 什么是负载率? 定义: 单位时间内(通常为1秒)网络...我们整车can遵循SAE J1939协议,根据J1939-21数据链路层协议,CAN总线报文都必须是扩展帧格式。 报文..

    Vehicle Spy3软件常用功能之总线负载率

    什么是负载率?

    定义: 单位时间内(通常为1秒)网络总线传输数据所占带宽的百分比。

    什么是带宽?

    我们说一条网络的波特率是250K(完整的单位应该是250Kbps),也就是说这个网络上能够传输的信息的速率是250000 bit/s,这就是我们这条网络的带宽。

     

    CAN总线上有哪些报文?它们分别是什么格式?

    我们整车的can遵循SAE J1939协议,根据J1939-21数据链路层协议,CAN总线上的报文都必须是扩展帧格式。

     

    报文的格式如下,每帧报文128bit。

     

    波特率的计算

    根据前面几小节的知识了解了总线的带宽,报文的结构以及负载率的概念,我们可以得到总线负载率为不同周期的报文总条数乘以单条报文所占的负载率。

    单条报文总线负载率计算公式如下:

    Rate = (1000/T)*128/(1000*Baud) = 128/(Baud*T)*100%

    总线负载贡献率Rate -%

    报文周期T-ms

    总线速率:Baud-Kbps

    周期(ms)

    250K

    500K

    10

    5.12%

    2.56%

    20

    2.56%

    1.28%

    50

    1.28%

    0.64%

    100

    0.64%

    0.32%

    200

    0.32%

    0.16%

    500

    0.16%

    0.08%

    1000

    0.08%

    0.04%

    表一 单条不同周期的报文的总线负载负载率

    使用Vehicle Spy查看总线负载率

    我们在实际使用过程中,我们不可能自己去计算负载率,在Vehicle Spy软件中可以实时查看总线的负载率,还可以记录负载率的峰值。

    Step1: Spy Networks -> Networks

     

    Step 2: 点击Networks页面下Statistics,可以查看当前的总线负载率及总线负载率的峰值。

     

    展开全文
  • 摘 要:以自行开发的PCI总线存储卡为背景,详细论述了PCI总线的信号定义和命令操作,以及总线上的数据传输过程。介绍了所用芯片的基本情况,给出了采用CPLD实现数据存储功能的主要编程设计。 关键词:PCI;CPLD...
  • 介绍了一种基于Xilinx V5芯片硬件板卡上,利用Verilog硬件编程语言,来实现DDR2对数据文件解析目的:分析了CPCI总线与FPGA之间通信特点;然后根据收到的数据文件要求,介绍了DDR2使用方法;最后介绍了对信号...
  • CAN具有下下列主要特性:①低成本;②远距离传输(长达lOKm);③高速的数据传输速率(高达1Mbit/s);④可根据报文的ID决定接收或屏蔽该报文;⑤可靠的错误处理和...⑦节点在错误严重的情况下具有自动退出总线的功能
  • 介绍了两种CAN总线中继器即硬中继器和软中继器...软中继器通过CPU中转数据,升级方便,且具有数据滤波功能,可降低总线负载,但不适用于时序要求较高CAN总线系统。这两种中继器均在现场得到验证,可根据实际需要选用。
  • 利用FPGA内部嵌入式系统提供的高性能数据传输接口完成AXI4时序控制模块的功能验证。实际应用表明,依据提出的设计方法实现的读写时序控制模块能够满足AXI4总线协议规定的时序关系,实现数据的高速正确传输,总线数据...
  • 摘要:介绍了采用ALTERA公司的可编程器件EPF10K10LC84-3实现IIC总线的通讯接口的基本原理,并给出了部分的VHDL语言描述。该通讯接口与专用的接口芯片相比,具有使用灵活、系统配置方便的特点。 关键词:IIC总线...
  • 八十年代以后,随着微处理器芯片应用不断渗透,“智能化”传感器、开关、执行机构等工业现场控制器件不断涌现,但各厂商根据所生产元器件特点而开发的数据通讯协议也是五花八门、种类繁多,单个元器件似乎...
  • 上位机和下位机以及下位机之间采用CAN现场总线进行通信,对该方案的硬件系统尤其是下位机系统进行了详细的设计,给出了软件系统需完成的各种具体功能,并根据CAN总线的通信协议规定了数据通信格式及地址的分配。...
  •  本调制器是一种基于PC104总线的嵌入式系统的外围设备,嵌入式计算机系统通过PC104总线将数据发送到端口,调制器接收数据并进行调制后,将信号输出到受控设备,从而对相应设备起到控制的功能。在本调制器的硬件电路...
  • 根据航电总线ICD特点,采用面向对象程序设计、虚拟仪器和数据库编程技术,实现了总线信息与设备功能的关联。应用结果表明,该设备能够监控1553B总线信息与波形,具有抗干扰性强、扩展性好、应用前景广阔等特点。
  • 为实现行波监测及其早期故障在线诊断,根据行波特性设计了一种基于PCI总线、以现场可编程逻辑器件FPGA为核心控制单元的数据采集系统。系统充分利用了PC机高性能的总线资源和大容量存储深度,采用“乒乓”缓存技术...
  • 为实现PCIe总线的DMA功能根据Xilinx的PCIe IP核以及相关参考例程,介绍一种PCIe总线及其 DMA功能的设计方法。硬件验证与测试表明:该设计具有较高的带宽,DMA读、写带宽可分别达到554 MB/s和881 MB/s,目前已在...
  • 摘要: 在详细研究了数控系统及CAN总线的基础上,根据特定的系统需求,提出并成功开发了以微型计算机为上位机、以CAN总线为现场设备通信平台的开放式数控系统。  1. 引言:  随着微电子技术、计算机技术、自动...
  • PCI总线是一种与CPU无关的32/64位地址数据复用...这里主要介绍根据工程背景开发的基于PCI总线的实时测频卡的WDM驱动程序设计。  1实时测频卡硬件系统结构  实时测频卡的主要功能是实时测定信号频率,实时识别信
  • 摘要:根据VME总线规范和协议要求,基于GAL芯片进行了VME总线地址译码、数据读写及中断控制接口电路设计,完成了电路板设计和研制,试验研究表明其功能满足要求,文中所提出设计思路方法合理可行。  1 引言  VME...
  • 3 外设总线在一个系统中光... (3)Wishbone 总线的所有信号都与总线的时钟同步;  (4)支持大小端模式,用户可以根据自己的需求配置成不同的模式;  (5)Wishbone总线接口区分明确,分为主(Master)/从(Slave
  • 摘 要:根据开发具有I2C总线接口的立体声音频处理芯片TDA7313的设计实践,介绍了I2C串行总线的组成及数据格式,给出了发送地址数据的实现过程以及部分程序清单。 关键词:单片机;I2C串行总线;音频处理;TDA7313 ...
  • 摘要: 在详细研究了数控系统及CAN总线的基础上,根据特定的系统需求,提出并成功开发了以微型计算机为上位机、以CAN总线为现场设备通信平台的开放式数控系统。  1. 引言:  随着微电子技术、计算机技术、自动...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 496
精华内容 198
关键字:

根据数据总线的功能