算法0x01:芯片测试

有n=2^k块芯片(好芯片至少比坏芯片多1片),从中挑出一片好芯片。
已知有如下的测试情形:
A测试 B测试 结论
坏的 坏的 至少一片是坏的
坏的 好的 至少一片是坏的
好的 坏的 至少一片是坏的
好的 好的 都好或都坏

采用分治策略,伪码如下:

k = n;
while k > 3
{
把当前所有芯片分为[k/2]组; // 这里[k/2]表示取k/2下界,下同
for(i = 1; i <= [k/2]; ++i)
{
if(两块都是好的)
任取一块留下;
else
两块都丢弃;
}
if (2*[k/2] < k) // 最后一组有3片
{
找出3块中测试结果为都好的那两块中的一块,与其它留下来的芯片再分别一起
测试一次,如果结果中为都好的超过一半,留下当前这块,否则留下3块中另外一块
}

k = 留下的芯片数;
}

if (k == 3)
{
任取两块,如它们都好,任取一块,否则取剩下的那一块;
}
else
{
任取一块;
}


时间复杂度:
T(n) = T(n/2) + O(n)
由Master定理,知T(n) = O(n)

分析:
1:由抽屉原理:分组时两个好芯片在一组的级数大于两个坏芯片在一组的组数。
2:每次丢弃丢弃时,丢弃的坏芯片的数目一定大于等于丢弃的好芯片的数目,留下的芯片中的好芯片的数目一定大于坏芯片的数目。
3:如当前留下的芯片数目为奇数,在丢弃时要保证最后一组留下的是好芯片,通过前面的芯片来投票决定。
DR V1.13 25cee80c4f cym 23/08/11-09:31:58 LPDDR4X, 1866MHz channel[0] BW=16 Col=10 Bk=8 CS0 Row=17 CS=1 Die BW=16 Size=2048MB channel[1] BW=16 Col=10 Bk=8 CS0 Row=17 CS=1 Die BW=16 Size=2048MB channel[2] BW=16 Col=10 Bk=8 CS0 Row=17 CS=1 Die BW=16 Size=2048MB channel[3] BW=16 Col=10 Bk=8 CS0 Row=17 CS=1 Die BW=16 Size=2048MB Manufacturer ID:0xff ch:1 dq0 fail,write:0x1,read:0x0 ch:1 dq1 fail,write:0x2,read:0x0 ch:1 dq2 fail,write:0x4,read:0x0 ch:1 dq3 fail,write:0x8,read:0x100000 ch:1 dq4 fail,write:0x10,read:0x200000 ch:1 dq5 fail,write:0x20,read:0x400000 ch:1 dq6 fail,write:0x40,read:0x800000 ch:1 dq7 fail,write:0x80,read:0x0 ch:1 dq8 fail,write:0x100,read:0x2000000 ch:1 dq9 fail,write:0x200,read:0x4000000 ch:1 dq10 fail,write:0x400,read:0x8000000 ch:1 dq11 fail,write:0x800,read:0x10000000 ch:1 dq12 fail,write:0x1000,read:0x20000000 ch:1 dq13 fail,write:0x2000,read:0x0 ch:1 dq14 fail,write:0x4000,read:0x80000000 ch:1 dq15 fail,write:0x8000,read:0x0 ch:1 dq0 fail,write:0xfffffffe,read:0xfffffffd ch:1 dq1 fail,write:0xfffffffd,read:0xfffbffff ch:1 dq2 fail,write:0xfffffffb,read:0xfff7fffd ch:1 dq3 fail,write:0xfffffff7,read:0xffefffff ch:1 dq4 fail,write:0xffffffef,read:0xffdffffd ch:1 dq5 fail,write:0xffffffdf,read:0xffbfffff ch:1 dq6 fail,write:0xffffffbf,read:0xff7ffffd ch:1 dq7 fail,write:0xffffff7f,read:0xfffd ch:1 dq8 fail,write:0xfffffeff,read:0xfdfffffd ch:1 dq9 fail,write:0xfffffdff,read:0xfbffffff ch:1 dq10 fail,write:0xfffffbff,read:0xf7fffffd ch:1 dq11 fail,write:0xfffff7ff,read:0xefffffff ch:1 dq12 fail,write:0xffffefff,read:0xdffffffd ch:1 dq13 fail,write:0xffffdfff,read:0xbfffffff ch:1 dq14 fail,write:0xffffbfff,read:0x7ffffffd ch:1 dq15 fail,write:0xffff7fff,read:0xfffd error ERR RK3588平台出现这个日志的原因是什么
08-06
1032芯片的系统命令表如下所示: 命令描述:芯片从预备状态到测量状态,命令码:0x2A,CRC值:0x16 命令描述:清除状态寄存器,命令码:0x22,CRC值:0x2E 命令描述:清除库仑寄存器ISENSE_ACC和ISENSE_COUNT,命令码:0x23,CRC值:0x29 命令描述:清除ADC测量结果,命令码:0x24,CRC值:0x3C 命令描述:重启ADC测量,命令码:0x2E,CRC值:0x0A 命令描述:重新加载FUSE,命令码:0x30,CRC值:0x50 命令描述: CFG和FUSE自检,需要5ms时间后自检结果才会更新到状态寄存器,命令码:0x31,CRC值:0x57 命令描述:写寄存器CFG0,命令码:0x40,CRC值:0x07 命令描述:读配置寄存器CFG0,命令码:0xC0,CRC值:0x8E 命令描述:读状态寄存器STS0,命令码:0xC9,CRC值:0xB1 命令描述:读Cell1-3电压,命令码:0xD0,CRC值:0xFE 命令描述:读DIS1-3电压,命令码:0xD6,CRC值:0xEC 当CSN信号为低时,SPI 数据传输有效,按极性CPOL=1;相位CPHA=1方式通信。 GMD1032 的命令包括读命令,写命令及系统命令。所有命令及数据传输总是高位先传,低位在后。命令传输方式有广播方式和菊花链方式。GMD1032 的命令格式为16位,前8位命令码,后8位为命令码的CRC,CRC8。CRC8缺省值为0x41,CRC的算法公式如下: CRC_8 = X^8 +X^2 +X+1 GMD1032 读写格式包括16 位命令段和数据段。每颗 GMD1032 数据段由 48 位数据 + 6 位Rolling Count + 10 位 CRC10 组成。CRC10 是 48位数据和6位RollingCount的CRC校验码。CRC10缺省值为0x10,CRC的算法公式如下: CRC_10 = X^10 +X^7 +X^3 +X^2 +X+1
最新发布
09-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值