请教:
使用SRIO/PCIE在两个设备间(C6678间,或C6678与FPGA、PC机)传输数据时,如果两者大小端模式不匹配时,进行下列操作:
uint32_t p= 0x12345678; dest_addr = xxx;
srio_dio_send( &p, dest_addr, 4);
接收方收到的数据是0x12345678还是0x78563412呢?
Zhan Xiang:
数据如何排列完全取决于目标memory对数据流的识别,在SRIO总线上传输的数据都是byte流,对于大端设备会将该byte流按照大端规则存储,小端则按小端规则存储,外设是没有大小端的概念的,只是会按照byte把数据存到对应的地址,而CPU取数据则是按照大小端进行区分。
你的问题可以这样理解,memory 中数据存储为 0x12 0x34 0x56 0x78,那么写到对端memory中应该也是0x12 0x34 0x56 0x78,如果是大端系统则认为数据是0x12345678,小端系统是0x78563412.
YUCHAO WANG:
回复 Zhan Xiang:
您好:
也就是说,通信过程能够保证memory中的byte顺序不变是吗?
但是我后来看C6678外设的"endianess"部分时,里面提到“SRIO协议要求数据流必须是大端排列,所有小端设备必须进行必要的端转换操作”,这个具体指的是什么过程呢?对传输会有什么影响吗?
Zhan Xiang:
回复 YUCHAO WANG:
C6678的SRIO会自动识别目标memory的大小端,所以如果是两个6678之间互通,不需要手动转换。但是如果和其他厂商的芯片对通,需要和厂商确认他们的实现。
TI中文支持网