本应用笔记介绍了利用ds31256的接收bert (误码率测试)功能实现分数级t1 (ft1)上环回或下环回检测(v.54)的方法,并给出了示例代码。
概述这篇应用笔记介绍了利用ds31256的接收bert功能实现分数级t1 (ft1)上环回或下环回检测(v.54)的方法,详细说明请参考分数级t1.403附录b规范。所提供的算法和示例代码简化了ds31256最终用户的设计。
ds31256只有一个bert引擎,但有16个v.54引擎(每端口一个)。因此,当测试端口多于一个时,软件带宽必须能够处理多路复用技术。
算法图1和图2所示流程图详细说明了上环回、下环回的操作流程。假设只有端口0查找ft1模板。基本算法设置bert查询上环回模板。同步后,这个算法检测并确保bert同步于可编程周期(例程中为0.6秒),然后查找一个全“1”模板。下环回例程中采用相同的同步、检验,随后是全“1”模板。
本例中选择0.6秒周期确保bert同步,但这个时间周期必须根据sync_loop函数运行的快慢进行调整。
图1. ft1 (上环回与下环回)检测流程
图2. ft1 (上环回与下环回)检测流程(续)
示例代码中函数调用定义在进入特定程序前,必须了解一些假设条件,程序中需要下列函数。
write_reg (addr, data)—将特定数值写入指定的ds31256寄存器:addr = ds31256寄存器相对于芯片基地址的偏移量data = 需要写入寄存器的数据read_reg (addr)—读取ds31256特定地址的寄存器并返回值:addr = ds31256寄存器相对于芯片基地址的偏移量write_ind_reg (addr, data)—将特定数据写入指定的ds31256间接寻址寄存器,然后在返回前等待寄存器的“忙”位被清除:addr = 要写入数据的间接寻址寄存器data = 写入指定的间接寻址寄存器的数据read_ind_reg (addr, i)—读取指定地址的ds31256间接寻址寄存器并返回数值:addr = ds31256寄存器相对于芯片基地址的偏移量i = 索引标准的c语言打印函数printf函数示例代码ft1测试函数void ft1test(){ int status = 0; ft1setting(0, 0); -- configure the device for bertstatus = sync_loop(1, 300, 5000); -- ft1 loop-up testif(status == 1) -- return status is synced{ status = sync_loop(3, 300, 5000); -- ft1 all ones test if(status == 1) { loopbacksetup(1); -- place channelized in network loopback status = sync_loop(2, 300, 5000); -- ft1 loop-down test if(status == 1) {status = sync_loop(3, 300, 5000); -- ft1 all ones test if(status == 1)loopbacksetup(0); -- take out from channelized loopback elsecheckstatus(3); -- print out test status } else {checkstatus(2); -- print out test status } } else {checkstatus(3); -- print out test status }} else { checkstatus(1); -- print out test status}}1. 打印测试状态信息函数void checkstatus(int type){ switch(type) { case 1: printf(loopup pattern not found); break; case 2: printf(loopdown pattern not found); break; case 3: printf(all 1's pattern not found); break; }}2. 配置ft1函数该例程假设端口0用于ft1检测。
void ft1setting(int dev, int port){int mc = 0; -- variables to be usedint ds0 = 0;int rcfg = 0; mc = read_reg (0x10); -- read master control(mc) 0x00 registermc = mc & 0xf07f; -- mask out the read-back value from mc write_reg (0x10, mc); -- assign the bert to port 0 (mc.bps4-0) write_reg(0x0304, 0x4000); -- configure port 0 in receive port for(ds0 = 0; ds0 < 128; ds0 = ds0 + 1) -- configure register { --assign timeslot r[0]cfg[ds0].rbert bit write_ind_reg(0x0300, 0x0100 + ds0); -- assign all 128 ds0’s to rbert } printf(ft1 configuration completed.); }3. 执行ft1测试函数int sync_loop(int pattern, int sync_cnt, int timeout) { int timecnt = 0; -- variables will be usedint cnt = 0;int status = 0;int temp = 0;int sync = 0; int bertc0 = 0; int bertec0 = 0;bertsetup(pattern); -- set up the bertbertc0 = read_reg (0x500); -- toggle resyncbertc0 = bertc0 | 0x0001; -- mask the read bertc0 value write_reg (0x500, bertc0); -- write a 1 into bertc0.resyncbertc0 = bertc0 & 0xfffe; -- mask out read-back valuewrite_reg (0x500, bertc0); -- write 0 into bertc0.resyncbertc0 = read_reg (0x500); -- read bertc0bertec0 = read_reg (0x518); -- read bertec0sync = ((bertec0 & 0x0001) == 0x0001); timecnt = timecnt + 1;while(cnt4. 在bert寄存器中建立模板void bertsetup(int pattern) { switch (pattern) { case 1:write_reg (0x500, 0x0 & 0x003c); -- disable bertc0.rinv break; -- set 2e7-1 patterncase 2:write_reg (0x500, 0x0020 & 0x003c);--enable bertc0.rinv break; -- set 2e7-1 pattern default:write_reg (0x508, 0xffff); -- set bert repetitive pattern set write_reg (0x50c, 0xffff); -- in bertbrp0-1write_reg (0x500, 0x0010 & 0x003c);-- disable bertc0.rinv break; -- set to repetitive pattern }}5. 建立环回模式函数该例程假设将端口0置于环回模式。
void loopbacksetup(int val){ int a = 0; int tmp = 0; tmp = val< <11; write_reg(0x0304, tmp); -- set port and channel 0 for (a = 0; a < 128; a++) -- set t[0]cfg[a].cnlb to place channel in { -- loopback write_ind_reg(0x0300, 0x0200 + a); } if(val ==1) {write_reg(0x0200, 0x0008); -- enable tp[0]cr.tfda1 to allow data to printf(loopup detected); -- be transmitted normallyprintf(channel placed in loopback); } else {write_reg(0x0200, 0x0000); -- disable tp[0]cr.tfda1 bit printf(loopdown detected); printf(channel taken out from loopback); } }结论本应用笔记介绍了如何使用ds31256的接收bert功能,从例程和软件算法可以看出实施ft1上回环和下回环检测非常简单。
长江存储在3DNAND存储工艺上去的重大突破
如何通过代码导航来快速编码?
三星痛失芯片大单
浅谈安防工程“防雷与接地”设计中的漏洞
抢先看!比特币被盗“黑历史”大集锦
DS31256的分数级T1 (FT1)环回检测
HUAWEInova2s体验 一款极具特色的手机
天津研究团队提出了一种“硫模板法” 使锂离子电池变得“更小”成为可能
一加刘作虎:今年力争做到影像功能全球第一
激光位移传感器有机器人控制上的应用
苹果计划收购迪士尼?联合创始人还预测未来
全球区块链游戏领域的综合服务平台Hellokimi介绍
HTC VIVE Cosmos智能VR眼镜下月初发货,支持inside-out追踪技术
索尼新专利看起来像是一副用于PSVR等VR头显的处方眼镜
集成电路可测性设计中网表的解析与实现
光伏电站直流系统接地故障的判断和处理方法
鸿蒙系统正式版本于6月2号全面上线
印制电路板的一般布局原则_印制电路板前景
仪器租赁助力企业轻松应对经济危机
协作是物联网创新的关键