半导体测试map文件格式-TSK解析
做这个tsk解析的起因是一个需求,当时我公司只开发的64以内的bincode,如何突然处理一个128的bincode文件,超过64的就解析错误了,全都mod64了。因为我公司没有这方面的文档说明,当时俺也是靠自己摸索出来的,首先打开全是16进制的文件,找到解析64的部分,发现这块并无64以上的bin数据存储,对上索引之后,发现解析完全部map后还剩余一大半未解析的部分,开始解析,因为无文档说明,我自己就先从找到bincode开始,这里记住一定要计算索引,计算到指定位置,千万不能算错,最后成功找到第一个bincode,往下继续找,发现每隔6个16进制会出现一个bin,找到规律,但是碍于不知道其他5个16进制是什么,我只能把这个bincode抓出来直接替换64以下解析出来的bincode。
后来有文档,我就写了一个完整的解析程序,支持9999bin以内文件的读写
这里只列几个重点解析:
51--mapversion
带有扩展头的测试数量解析:
TotalTestedDie--[die.Length * 6 + 236+55]+[die.Length * 6 + 236+54]*256+[die.Length * 6 + 236+53]*256*256+[die.Length * 6 + 236+52]*256*256*256
TotalPassDie--[die.Length * 6 + 236+59]+[die.Length * 6 + 236+58]*256+[die.Length * 6 + 236+57]*256*256+[die.Length * 6 + 236+56]*256*256*256
TotalFailDie--[die.Length * 6 + 236+63]+[die.Length * 6 + 236+62]*256+[die.Length * 6 + 236+61]*256*256+[die.Length * 6 + 236+60]*256*256*256
注:[]里为数组索引
mapversion有2,3,4,5,7这几个版本
对于2,3版本:
只能解析256以下的bin
dut--i * 4 + die.Length * 6 + 236 + 172
bincode--i * 4 + die.Length * 6 + 236 + 172+1
对于4版本:
只能包含1024以下的bin
dut--[i * 4 + die.Length * 6 + 236 + 172+1]+[i * 4 + die.Length * 6 + 236 + 172]*256 此dut扩展到512
bincode -- -[i * 4 + die.Length * 6 + 236 + 172+2]*256+[i * 4 + die.Length * 6 + 236 + 172+3] 此bin扩展到1024
对于5版本:
能包含2048以下的bin
dut与bin同4版本
对于7版本:
只能包含9999以下的bin
dut与bin同4版本
for (int ii = 0; ii <= die.Length - 1; ii++)
{
if (mapversion == "2" || mapversion == "3")
{
if (die[ii].CategoryData > 256)
{
return "此map只能包含256以下的bin";
}
aryRead[ii * 4 + die.Length * 6 + 236 + 172 ] = Convert.ToByte(die[ii].TestSiteNo); // dut扩展到256
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 1] = Convert.ToByte(die[ii].CategoryData); // bincode扩展到256
}
else if (mapversion == "4")
{
if (die[ii].CategoryData > 1024)
{
return "此map只能包含1024以下的bin";
}
aryRead[ii * 4 + die.Length * 6 + 236 + 172 ] = Convert.ToByte(die[ii].TestSiteNo/ 256); //dut扩展到512
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 1] = Convert.ToByte(die[ii].TestSiteNo % 256);
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 2] = Convert.ToByte(die[ii].CategoryData / 256); //bincode扩展到1024
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 3] = Convert.ToByte(die[ii].CategoryData % 256);
}
else if (mapversion == "5")
{
if (die[ii].CategoryData > 2048)
{
return "此map只能包含2048以下的bin";
}
aryRead[ii * 4 + die.Length * 6 + 236 + 172 ] = Convert.ToByte(die[ii].TestSiteNo/ 256); //dut扩展到512
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 1] = Convert.ToByte(die[ii].TestSiteNo % 256);
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 2] = Convert.ToByte(die[ii].CategoryData / 256); //bincode扩展到2048
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 3] = Convert.ToByte(die[ii].CategoryData % 256);
}
else if (mapversion == "7")//3位
{
if (die[ii].CategoryData > 9999)
{
return "此map只能包含9999以下的bin";
}
aryRead[ii * 4 + die.Length * 6 + 236 + 172] = Convert.ToByte(die[ii].TestSiteNo / 256); //dut扩展到512
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 1] = Convert.ToByte(die[ii].TestSiteNo % 256);
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 2] = Convert.ToByte(die[ii].CategoryData / 256); //bincode扩展到9999
aryRead[ii * 4 + die.Length * 6 + 236 + 172 + 3] = Convert.ToByte(die[ii].CategoryData % 256);
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)