做这个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);
                }
            }

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐