TI_DSP_SRIO - DirectIO操作-1

DirectIO: The SRIO DirectIO
transfer class is similar to a memcopy transfer between two SRIO devices. One of the devices is the master that initiates the transfer. The second deviceis
the slave that responds to the masters requests. The slave device application normallydoes not become aware of the access(被访问的salve DSP并不知道master DSP通过SRIO发起的访问). The master must know the destination memoryaddress
for running a DirectIO transfer(master必须知道他想要访问的salve端的访问地址,即如果master想write/read salve端的从0x80000000地址开始的若干字节的数据,必须知道0x80000000这个地址)。

Direct IO模式又可进一步分为以下几种传输格式(每种传输模式都有表示自己的传输包):

1, NWRITE: 普通写操作。可以直接往对端内存写数。一个包最大为256bytes,不要求接收端响应。

2, NWRITE_R: 带响应的NWRITE(NWRITE with Response),要求接收端响应。

3, SWRITE:流写(Stream Write),数据长度必须是8字节的整数倍,不要求接收端响应。

4, NREAD: 普通读操作。可以直接从对端内存取数。一包最大为256bytes,即master dsp要读取slave dsp的内存的数据。

上面讲到SRIO的direct IO包,其实C66x DSP的SRIO包有direct IO包、DOORBELL包、Message包以及Maintenance包等等。其中最重要的是直接direct
IO包和DOORBELL包的传输控制,对于direct IO包和DOORBELL包,它的传输控制模块分成LSU(Load/Store Unit)控制单元和MAU(Memo-ry Access Unit)控制单元。LSU用于实现Direct IO包、DOORBELL包的发送,MAU则负责Direct IO包的接收。

LSU单元其实是一系列寄存器,在msater端,master DSP要想通过SRIO访问(读/写)slave端DSP的内存数据,master需要配置LSU寄存器,硬件会把寄存器中的内容打包到包中(如做NWRITE操作时,),作为包的头。C66x DSP上提供了8组LSU来进行DirectIO数据发送,每个LSU有7个寄存器,当第五个寄存器写完后,数据会发送出去,第6个寄存器主要用于检测当前的LSU状态。

LSU寄存器(可参考SRIO Guide 3.8 LSU/MAU Registers)

读写操作和门铃操作主要由上图中的7个寄存器进行控制,这些寄存器里的值会自动加入到包中。在SRIO总线上,每个SRIO设备都有一个相应的设备地址,设备地址好比一个SRIO设备的ID,用于区别不同的SRIO设备。当SRIO总线上的一个SRIO设备进行读写访问时,它发送的包就含有设备地址,只有自身设备地址与包的设备地址符合的SRIO设备才会对此次传输做出响应。SRIO Address MSB和SRIO Address LSB共同构成64-bit寻址,指示的是被访问SRIO设备的地址。开发板上只用到32-bit寻址,因此,SRIO
Address MSB为0,SRIO Address LSB指示的是被访问的DSP的地址。DSP address指示的是本地DSP的地址,如当操作是NWRITE时,该地址处的数据将会写到slave DSP的SRIO Address LSB地址处。Byte_count这一项给出的是传输字节数,一次读写操作(可以是很多包)最多可以传送4Kbytes的数据,可以分为很多个包进行传输,因为每个包的payload的最大size为256字节。DestID是目标设备的ID号,用来区分SRIO总线上的设备。Drbll
Info用于门铃事件,通过此位段的设置,从而向目标DSP产生中断。Packet Type用来指示此次传输的类型,例如NREAD、NWRITE和DOORBELL等。

对DSP来说,初始化完SRIO后,master
DSP便可以通过SRIO来发送数据给slave DSP,但是要注意,slave并不知道什么时候master开始发数据,什么时候master发送完了数据,所以通常master会在数据传输完成后由硬件自动产生一个DoorBell(通过doorbell消息,即doorbell包)信息来告知slave,master数据已发送完毕,slave的SRIO硬件收到DoorBell消息后,可以触发中断,从而slave可以处理数据。这里数据完成后自动触发发送doorbell消息的机制,也是通过设置LSU寄存器实现,即当设置了LSU_Reg3的Drbll_val位为1(means:There
is doorbell information which needs to be sent out at the end of the packet),表示LSU_Reg5的Drbll_Info值是有效的,这样Drbll_Info(16bit,doorbell消息的payload仅有16bit)会通过doorbell包发送到slave
DSP。

TI_DSP_SRIO - DirectIO操作-1,布布扣,bubuko.com

时间: 2024-12-28 12:38:20

TI_DSP_SRIO - DirectIO操作-1的相关文章

TI_DSP_SRIO - DirectIO操作-LSU

The Direct I/O (Load/Store) module(即是LSU) serves as the source of all outgoing direct I/O packets(LSU用于配置发起数据读/写的SRIO设备端,发起端发送Direct IO包). With direct I/O, the RapidIO packet contains the specific address where the data should be stored or read in th

TI_DSP_SRIO - package type(包格式)

SRIO Packets: The RapidIOdata stream consists of data fields pertaining to the logical layer, thetransport layer, and the physical layer. ? The logical layer consists of the header (defining the type of access) and thepayload (if present). ? The tran

TI_DSP_SRIO - 两种SRIO操作模式

DSP SRIO协议的逻辑层定义了操作协议和相应的包格式.DSP上SRIO支持的逻辑层业务(数据发送方法)主要是直接IO/DMA(Direct IO/ Direct Memory Access)和消息传递(Message Passing). ?直接IO/DMA模式是最简单实用的传输方式,其前提是主设备知道被访问端的存储器映射.在这种模式下,主设备可以直接读写从设备的存储器.可以硬件直接实现. ?消息传递模式则类似于以太网的传输方式,它不要求主设备知道被访问设备的存储器状况.数据在被访问设备中的位

Nginx基础入门之文件操作优化及请求特殊处理介绍

本节的内容主要讲到关于nginx文件操作优化以及对客户端请求特殊处理(比如限速,不合法请求处理,是否注明nginx版本号) 一.通过nginx对客户端相关请求做特殊处理 1.1 按HTTP方法名限制用户请求 语法:limit_except method ... {...} 配置块:location Nginx通过limit_except后面指定的方法名来限制用户请求.方法名可取值包括:GET.HEAD.POST.PUT.DELETE.MKCOL.COPY.MOVE.OPTIONS.PROPFIN

TI_DSP_SRIO - 概述

随着高性能嵌入式系统的不断发展,芯片间及板间互连对带宽.成本.灵活性及可靠性的要求越来越高,传统的互连方式,如处理器总线.PCI总线和以太网,都难以满足新的需求 ,而串行RapidIO是针对高性能嵌入式系统芯片间和板间互连而设计. SRIO是一个硬件公共的接口,软件参与的少,大部分由硬件实现,不同的设备遵守这个接口,不同的设备就可以互联.串行SRIO接口比较少,传输的距离长.可靠性高.SRIO支持全双工,他的接受与发送时独立的.SRIO每个端口有四根信号线,标准的1x,4x  SRIO接口支持四

Nginx详解(二)操作

一.前言二.Nginx安装三.Nginx的配置文件详解四.nginx配置之http段五.其他模块六.实验 一.前言http://www.nginx.cn/doc/  nginx安装等各个操作界面介绍Nginx主要实现两个功能:Web服务器和反向代理Nginx的模块类型:    核心模块:core module    标准模块:        Stanard HTTP modules        Optional HTTP modules        Mail modules    第三方模块

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

ELK 学习笔记之 elasticsearch Mget操作

Mget操作: 查询多个文档: curl -XGET 'http://192.168.1.151:9200/_mget' -d '{"docs": [{"_index": "library","_type": "books", "_id": "1"}, {"_index": "library","_type"

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆