TMS320C6455EVM由两块板通过RapidIO接口互联,测试IO读写功能、DOORBELL功能正确,但maintenance read返回错误代码(“Transaction complete, non-posted response packet (type 8 and 13) contained ERROR status, or response payload length was in error”)。
通过LSU测试程序测试:仅修改包类型为0x80,偏移地址offset=0x0,长度为0x10。
srio_read(0x0, 0x900300, 0x10);
void srio_read(Uint32 src, Uint32 dst, Uint32 len)
{
Uint8 lsu_no;
CSL_SrioDirectIO_ConfigXfr lsu_conf = {0};
/* Create an LSU configuration */
lsu_conf.srcNodeAddr = dst; /* Local address */
lsu_conf.dstNodeAddr.addressHi = 0;
lsu_conf.dstNodeAddr.addressLo = src; /* Remote address */
lsu_conf.byteCnt = len;
lsu_conf.idSize = 1; /* 16 bit device id */
lsu_conf.priority = 2; /* PKT priority is 2 */
lsu_conf.xambs = 0; /* Not an extended
address */
lsu_conf.dstId = LARGE_DEV_ID;
lsu_conf.intrReq = 0; /* No interrupts */
lsu_conf.pktType = 0x80;
/* write with no
response */
lsu_conf.hopCount = 0; /* Valid for
maintainance pkt */
lsu_conf.doorbellInfo = 0; /* Not a doorbell pkt */
lsu_conf.outPortId = 0; /* Tx on Port 0 */
lsu_no = SELECTED_LSU;
CSL_srioLsuSetup (hSrio, &lsu_conf, lsu_no);
/* Wait for the completion of transfer */
response.index = lsu_no;
do {
CSL_srioGetHwStatus (hSrio, CSL_SRIO_QUERY_LSU_BSY_STAT, &response);
} while(response.data == 1);
}
Shine:
把byteCnt设成4试试。
bin wang3:
回复 Shine:
TI员工:你好!
bytecnt设置为4故障未变化。
后来测试Maintenance write,成功执行;通过IO读取写入数据内容,完全正确。但Maintenance read仍不成功。
在执行Maintenance read命令后,读取本地SP0_ERR_STAT(1158h)寄存器内容,寄存器内容为0x12,PORT_WRITE_PND位为1,表示:The port has encountered a condition which required it to initiate a Maintenance Port-write operation.
在执行Maintenance write命令后,读取本地SP0_ERR_STAT(1158h)寄存器内容,寄存器内容为0x2,PORT_WRITE_PND位为0。
qian cui:
回复 Shine:
你好,我使用的是C6678, 通过maintenance read读取SW的偏移为0的寄存器值,结果显示为0, 但是通过I2C读出来的是正确的。NWRITE都是成功的(DSP通过SW给FPGA发送数据)。maintenance read配置和MWRITE的配置基本一致,就是ftype和ttype以及hopcounter和byteCnt不一样。ftype=8, ttype=0, hop_counter=0, byteCnt = 4。请问还需要检查那个方面?