FLASH系列问题案例分析.docx
- 文档编号:11663466
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:12
- 大小:37.10KB
FLASH系列问题案例分析.docx
《FLASH系列问题案例分析.docx》由会员分享,可在线阅读,更多相关《FLASH系列问题案例分析.docx(12页珍藏版)》请在冰豆网上搜索。
FLASH系列问题案例分析
FLASH系列问题
案例分析
有线宽带事业部测试部:
宋丽风
目录
FLASH系列问题案例分析1
第一部分:
问题回顾2
问题12
问题22
问题32
问题42
第二部分:
案例分析3
问题13
问题分析与根因3
改善措施3
问题26
问题分析与根因6
改善措施6
问题39
问题分析与根因9
改善措施9
第三部分:
预防措施10
第四部分:
测试计划10
第五部分:
背景知识10
一些FLASH的小知识10
第六部分:
疑问解答:
11
第一部分:
问题回顾
问题1
问题描述:
2012-7-21,GAN5.CU17J-B(Nucom客户)产品,QA在抽检5pcs发现有1PCS页面里显示的PVC/无线名称/密钥与软件发部表不符,不良率20%;
问题2
问题描述:
2013-4,Telecom4.12软件,QA在抽检以上产品时发现1PCS板初始化失败。
问题3
问题描述:
2013-4,Teleplus4.12软件,产线上生产2%CPE出现初始化失败
问题4
问题描述:
升级的过程没有问题,在升级完成重新启动的过程中会提示,大系统无效,从小系统启动
问题描述:
升级成功后打开页面正常,进行操作CPE行为正常,一段时间后断电重启,从小系统启动
状态:
到现在此问题是跟踪状态,不知道根因,也没有规避措施。
第二部分:
案例分析
问题1
问题分析与根因
问题描述:
2012-7-21,GAN5.CU17J-B(Nucom客户)产品,QA在抽检5pcs发现有1PCS页面里显示的PVC/无线名称/密钥与软件发部表不符,不良率20%;不良产品的CPE复位不成功;
原因分析:
产品在启动1分钟内会写FLASH,如断电会造成部分内容丢失(配置丢失)为产品软件Bug导致;CPE启动时FLASH写保护未开启。
软件平台:
BRCM4.06
考虑2个问题:
a)CPE为什么会在1分钟内写FLASH?
1)CPE的默认配置存在一条静态WAN连接,当CPE连接上DSL线,且同步之后,WAN连接状态从disconnected变成了connected。
2)WAN连接UP后,TR069等业务就会发包出去,在这个软件中TR069发连接请求包出去;
3)在工厂的环境中,TR069的请求连接肯定收不到回应,TR069会根据RetryPolicy不断的发连接报文,并且会将Retry的次数记录起来保存到状态区;
4)在FLASH保存这个参数的时候,操作人员正好测试完成,对CPE断电,结果FLASH正在写的这个块区的配置丢失;
b)为什么在写FLASH的时候断电会丢失配置?
1)FLASH在写参数时,必先擦除整个块区(以BLOCK来擦除),然后再写值;当写FLASH的时候,原来的内容已经擦掉,写的内容又没有写进去,就会丢失配置;
改善措施
a)修正写FLASH的动作;
1)在PPPOE拨号连接不成功时,串口中不断打印e254savingpppsessioninfoppp0.1(00308810ee2d/0073;Telefonica版本上做了修改,就是拨上号之后再保存sessionid,不然写FLASH太频繁了;
2)TR069Retry次数记录,在前2次,发请求时间间隔短,5-10;10-20;不把retry的次数记录到状态区,从第3次开始记录;见示例1;
b)状态区与配置区分开;
1)配置区和状态区分在不同的块区保存;状态区是断电信息就丢失的区域。
防止软件因各个功能模块在写状态时断电,导致整个块区丢失。
因为BRCM在写参数时,先擦除掉整个块区,然后再写。
2)TR069Retry次数在记录到状态区的时候断电,导致配置也丢失的根本原因就是配置区和状态区在同一个块区;没有分开;
3)以下示例1是状态区的保存的打印信息;该例子的log信息在4.06平台上抓取的,可以看到状态区和配置的保存的块区不是一个;
示例1:
状态区与配置区分开的LOG打印信息:
-------------------------------------------------------------------------
unprotect_e127protect.//这行是配置TR069的打印信息,写到配置区;tr69c:
error:
561.251:
cancelPeriodicInform:
1505:
requestfailed,ret=9003
tr69c:
error:
561.251:
retrySessionConnection:
186:
ACSconnectfailed,retryCount=1,backOffTime=7000ms
tr69c:
error:
568.474:
cancelPeriodicInform:
1505:
requestfailed,ret=9003
tr69c:
error:
568.474:
retrySessionConnection:
186:
ACSconnectfailed,retryCount=2,backOffTime=11000ms
tr69c:
error:
579.702:
cancelPeriodicInform:
1505:
requestfailed,ret=9003
tr69c:
error:
579.703:
retrySessionConnection:
186:
ACSconnectfailed,retryCount=3,backOffTime=26000ms
tr69c:
error:
605.945:
cancelPeriodicInform:
1505:
requestfailed,ret=9003
unprotect_e126protect.//这行打印信息是把Retry保存到状态区;
tr69c:
error:
606.421:
retrySessionConnection:
186:
ACSconnectfailed,retryCount=4,backOffTime=77000ms
-------------------------------------------------------------------------
c)增加配置双备份功能;
1)在FLASH上分两个配置区,一个主配置区,一个备用配置区;
2)4.06平台采用非实时配置双备份;
示例2:
非实时备份:
-------------------------------------------------------------------------
unprotect_e127protect.//这行是配置TR069的打印信息,写到配置区127块区;但是只写了主配置区,没写备配置区;
tr69c:
error:
561.251:
cancelPeriodicInform:
1505:
requestfailed,ret=9003
//这里执行重启CPE的动作,在CPE驱动启动完成后,在启动配置时,会先进行配置备份的动作如下截取log;//
=====ReleaseVersion4.06L.01(buildtimestamp130708_1017)=====
FriOct100:
00:
00UTC2010
tryreadBPSI
tryreadMPSI
BPSIwillsyncfromMPSI//配置同步信息
MPSIvalid,loadintoMDM
writeconfigtoMPSI
unprotect_e125protect.//备份配置区:
125块区;
------------------------------------------------------------------------------------------------------------
3)4.12平台采用实时配置双备份;
示例3:
实时备份:
下图中可以看到配置一个参数时,会同时写到主备配置区中;
d)增加FLASH写保护;
FLASH写保护与配置双备份的区别?
i.写保护是指使FLASH的block处于保护状态,如果没有经过解保护的手续,对FLASH的擦和写都不会生效,相当于加了一把锁,特别针对于防止硬件杂波或程序混乱形成的擦写操作,保证数据安全。
保护的范围不光是配置,还可以是普通的代码等其他部分。
ii.配置备份,是使用两个配置区,当其中一个配置去因为进行写操作时,断电可能会导致损坏掉,这时候可以从另外一个配置区读出正确的配置,并同步到已损坏的配置区中去。
保证cpe在任何时候都能得到正确的配置,保证功能的正常使用。
问题2
问题分析与根因
问题描述:
2013-4,HeightsTelecom4.12软件,QA在抽检以上产品时发现2PCS板初始化失败。
原因定位分析过程:
a)初始化失败,CPE无法启动成功;
b)把破环了FLASH与CPE启动正常的FLASH里面的资料对比,有部分资料丢失;
c)在这单质量事故中未找到根本原因,FLASH厂商驻厂几日也未有任何进展;可能的原因为(并没有找到根因):
a)配置被破环,CPE读到错误配置的时候,导致SSK有可能死掉,CPE无法正常启动;但无法确定是否是这个原因导致;配置如何被破坏,也没有找到原因
d)FLASH写保护没生效;FLASH写保护代码使用宏CONFIG_FLASH_PROTECT控制,在代码中判断是否定义此宏,决定是否开启FLASH写保护。
原来代码中CONFIG_FLASH_PROTECT定义在文件的中间部位,判断宏是否开启的代码在定义宏之前,导致没有开启写保护。
改善措施
a)完善FLASH写保护的测试方法;
1)FLASH写保护定义的位置作了调整;将宏CONFIG_FLASH_PROTECT定义在头部,更符合编程规范;不易对软件工程师造成误导;
b)Image双备份
1)在用户升级fs_kernel文件时如果断电,FLASH将启动不了。
加入FLASH双备份,一个image损坏的情况下会从另外一个image启动
2)在烧录.w文件时,不烧双Image,再次升级的时候,会从另一个区开始升级;
3)升级的时候可以看到第一次升级从e1开始打印信息,第二次升级从e128开始
示例4:
4.06升级软件不从第0块(CFE块区)开始写4.06软件升级的打印信息:
-------------------------------------------------------------------------
BCM96328BroadbandRouter
Login:
MemTotal:
60112kB
MemFree:
24596kB
Buffers:
4468kB
Cached:
16604kB
SwapCached:
0kB
Active:
6956kB
Inactive:
18040kB
Active(anon):
3924kB
Inactive(anon):
0kB
Active(file):
3032kB
Inactive(file):
18040kB
SwapTotal:
0kB
SwapFree:
0kB
Dirty:
0kB
Writeback:
0kB
AnonPages:
3948kB
Mapped:
5456kB
Slab:
7816kB
SReclaimable:
592kB
SUnreclaim:
7224kB
PageTables:
352kB
NFS_Unstable:
0kB
Bounce:
0kB
WritebackTmp:
0kB
CommitLimit:
30056kB
Committed_AS:
7856kB
VmallocTotal:
1032148kB
VmallocUsed:
2132kB
VmallocChunk:
1006504kB
Allocating7039360bytebuffertoholdimage.
Memoryallocated.
Gotimageviahttp,totalimagesize:
7039189
enter
ModemMonitorSocketReceveMsg:
[undialok]
FLASHingrootfilesystemandkernel...
unprotect_e1.e2.e3.e4.e5.e6.e7.e8.e9.e10.e11.e12.e13.e14.e15.e16.e17.e18.
-------------------------------------------------------------------------
BCM96328BroadbandRouter
Login:
MemTotal:
60332kB
MemFree:
18812kB
Buffers:
5024kB
Cached:
18136kB
SwapCached:
0kB
Active:
8780kB
Inactive:
17904kB
Active(anon):
3524kB
Inactive(anon):
0kB
Active(file):
5256kB
Inactive(file):
17904kB
SwapTotal:
0kB
SwapFree:
0kB
Dirty:
0kB
Writeback:
0kB
AnonPages:
3548kB
Mapped:
5128kB
Slab:
11788kB
SReclaimable:
612kB
SUnreclaim:
11176kB
PageTables:
392kB
NFS_Unstable:
0kB
Bounce:
0kB
WritebackTmp:
0kB
CommitLimit:
30164kB
Committed_AS:
8248kB
VmallocTotal:
1032148kB
VmallocUsed:
2620kB
VmallocChunk:
1018244kB
Allocating7104225bytebuffertoholdimage.
Memoryallocated.
Gotimageviahttp,totalimagesize:
7104034
enter
ModemMonitorSocketReceveMsg:
[undialok]
FLASHingCFE...
unprotect_e0.e0protect.//特别说明:
如果升级软件命名中带有cfe后缀,说明这个软件会重写cfe,如灰掉的这段打印信息,现在要求升级软件不要带cfe;
FLASHingrootfilesystemandkernel...
unprotect_e128.e129.e130.e131.e132.e133.e134.e135.e136.e137.e138.e139.e14
-------------------------------------------------------------------------
c)配置双备份(在案例1中已经说明)
问题3
问题分析与根因
问题描述:
2013-4,Telplus4.12软件,QA在抽检以上产品时发现2PCS板初始化失败。
原因定位分析过程:
a)初始化失败,CFE无法启动;
b)在这两个站点跟踪,发现复位键过长,在装上外壳的时候,抵到了外壳;
c)操作人员拔掉电源时,碰到了外壳,按到了复位键(客户定义1s复位),导致在恢复出厂的过程中断电,破坏了CFE;按照一般原理,恢复出厂时没不需要修改CFE块区的任何参数;
d)跟踪软件发现:
恢复出厂默认配置时写nvram;
改善措施
a)出厂后不允许写nvram
a)软件升级不修改CFE,如以上升级时,打印信息;
b)恢复出厂等行为,不往nvram中写值,nvram和CFE在同一块区;
b)复位键:
全部剪短;
第三部分:
预防措施
所有的BRCM软件都要加FLASH写保护功能;
软件备份,FLASH大的可以做,FLASH小的做大小image;
配置备份,必须支持,并作为系统测试必测项。
第四部分:
测试计划
1、FLASH写保护的验证;
a)开关机测试:
目的:
辅助验证FLASH写保护功能;上电掉电过程中电压不稳,会形成擦写FLASH的动作;
b)直接的验证方法暂时没有。
2、配置备份测试;
3、软件备份测试;
4、针对NANDFLASH的配置备份测试,待完善;
第五部分:
背景知识
一些FLASH的小知识
我们目前使用的FLASH主要是NORFLASH和NANDFLASH两种;
1.NORFLASH:
有串行和并行两种;
a)串行和并行FLASH如何区别?
命名为:
s25是串行FLASH
命名为:
s29是并行FLASH
b)为什么串行不交换高低位字节?
串行FLASH,存储结构是8位,所以不存在交换高低自己的问题。
c)是不是所有的并行FLASH都需要交换高低位字节?
并行FLASH分为大端和小端,CPU会对FLASH有大端小端的要求,CPU中有一个硬件控制器设置大端还是小端模式;大端和小端FLASH的对比说明如下:
并行FLASH大端B
1、大端是:
高位在低地址;针对字节
eg:
一个数据为:
0X01020304,放入大端FLASH中为:
01020304
CPU16bit数据线读出的数据为:
02010403,和原来的数据不一样了,所以执行的结果也会不一样。
所以大端FLASH要交换高低字节,如果数据线为:
16位,则需交换2字节,32bit数据线要交换4字节.
并行FLASH小端L
1、小端是:
高位在高地址;针对字节
eg:
一个数据为:
0X01020304,放入小端FLASH中为:
04030201
小端存放数据的位置和地址位一致,低位在低字节,在存储器中的存储顺序是一样的。
CPU读取数据和原字节一致。
由此而知,如果数据线是8位的,也不需要交换字节。
d)常用芯片对大小端的要求:
BCM6开头大端;BCM5开头为小端;
RELTECK:
86XX,为大端;
MINDSPEED:
MARVELL是小端,
e)为什么杂波会造成FLASH丢失资料?
杂波可能会形成flash的写指令,如果刚好写配置区,就会丢配置,一般我们写指令只要一个字节
2.NANDFLASH
a)NANDFLASH的烧录文件后缀名.OOB;并非.w文件;
b)NANDFLASH数据容易损坏,通常除了数据区还有冗余区,linux系统通称为oob;
c)程序从nandflash启动就需要读取相关oob的信息,因此在烧录的时候必须要添加oob信息
d)NANDFLASH烧录器设置,烧录见附件;
第六部分:
疑问解答:
一、CPE为什么会在1分钟内写FLASH?
2)CPE的默认配置存在一条静态WAN连接,当CPE连接上DSL线,且同步之后,WAN连接状态从disconnected变成了connected。
3)WAN连接UP后,TR069等业务就会发包出去,在这个软件中TR069发连接请求包出去;
4)在工厂的环境中,TR069的请求连接肯定收不到回应,TR069会根据RetryPolicy不断的发连接报文,并且会将Retry的次数记录起来保存到状态区;
5)在FLASH保存这个参数的时候,操作人员正好测试完成,对CPE断电,结果FLASH正在写的这个块区的配置丢失;
二、为什么在写FLASH的时候断电会丢失配置?
6)FLASH在写参数时,必先擦除整个块区(以BLOCK来擦除),然后再写值;当写FLASH的时候,原来的内容已经擦掉,写的内容又没有写进去,就会丢失配置;
三、FLASH写保护与配置双备份的区别?
7)写保护是指使FLASH的block处于保护状态,如果没有经过解保护的手续,对FLASH的擦和写都不会生效,相当于加了一把锁,特别针对于防止硬件杂波或程序混乱形成的擦写操作,保证数据安全。
保护的范围不光是配置,还可以是普通的代码等其他部分。
8)配置备份,是使用两个配置区,当其中一个配置去因为进行写操作时,断电可能会导致损坏掉,这时候可以从另外一个配置区读出正确的配置,并同步到已损坏的配置区中去。
保证cpe在任何时候都能得到正确的配置,保证功能的正常使用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FLASH 系列 问题 案例 分析