2009-2014MicrochipTechnologyInc.
DS01229C_CN第1页AN1229引言该应用笔记介绍了B类安全软件库程序,该程序用于测试单通道CPU中是否发生故障.
这些程序是根据IEC60730标准开发的,能够支持B类认证过程.
这些程序可被直接集成到最终用户应用程序中,以测试和验证控制器的关键功能,而不会影响最终用户应用程序的执行.
该应用笔记还介绍了B类安全软件库中的应用程序接口(ApplicationProgrammingInterface,API)函数.
在启动或运行时,周期性调用B类安全软件程序来测试以下组件:CPU寄存器CPU程序计数器非易失性存储器易失性存储器时钟中断处理和执行该应用笔记也概括地介绍了多种不属于B类安全软件库的技术,以测试诸如以下组件:外部通信、时序、I/O外设、模拟I/O以及模拟多路开关.
IEC60730标准概述IEC60730标准定义了确保家用电器中使用的受控设备安全运行的测试和诊断方法.
IEC60730标准的附录H将安全软件分成以下三类(见附录B:"IEC60730-1表H.
11.
12.
7"):A类B类C类B类安全软件库执行属于B类的重要测试和诊断方法.
这些方法采用各种措施来检测与软件相关的故障和错误并作出响应.
根据IEC60730标准,采用B类函数进行的控制应具有以下结构之一:具有功能测试的单通道在此结构中,功能测试在应用程序固件执行之前执行.
具有周期性自检功能的单通道在此结构中,周期性测试被嵌入在固件中,且在固件处于执行模式时进行周期性自检.
不具备比较功能的双通道在此结构中,有两种不同的方法来执行指定的操作.
注:该文档中使用的术语"IEC60730标准"是指"IEC60730-1ed.
3.
2"版权所有2007IEC,瑞士日内瓦.
www.
iec.
ch.
作者:VeenaKudva和AdrianAurMicrochipTechnologyInc.
注:"感谢国际电工委员会(InternationalElectrotechnicalCommission,IEC)允许我们复制IEC60730-1ed.
3.
2(2007)国际标准内的信息.
所有这类摘要的版权为瑞士日内瓦IEC组织所有.
保留所有权利.
更多关于IEC的信息,请登录www.
iec.
ch.
IEC对作者引用的摘要及内容的编排和上下文不承担任何责任,IEC也不对文中其他任何内容及其精确性承担任何责任.
PICMCU和dsPICDSC的B类安全软件库AN1229DS01229C_CN第2页2009-2014MicrochipTechnologyInc.
系统要求要运行B类安全软件库,建议满足以下系统要求:因为测试需要独立时隙监视,所以系统硬件必须至少有两个独立的时钟源(例如:晶振和线频率).
在执行B类安全软件库期间,允许还是禁止中断由用户应用程序决定.
在执行B类安全软件库程序期间,如果产生了中断,那么任何寄存器内都可能产生不可预知的改变.
因此,在执行中断服务程序(InterruptServiceRoutine,ISR)时,寄存器的内容就不是预期的内容,ISR将返回不正确的结果.
B类安全软件库B类安全软件库适用于8位、16位和32位器件,有多个API,它们通过故障检测最大限度地提高应用程序的可靠性.
这些API有助于应用程序符合IEC60730标准.
使用该库可以实现以下测试:CPU寄存器测试程序计数器测试易失性存储器测试非易失性存储器(闪存/EEPROM)测试中断测试时钟测试下面的部分将讨论每种测试及其实现细节.
另外,每部分也分别列出了执行支持架构的相应测试所需的API.
CPU寄存器测试CPU寄存器测试用于实现IEC60730标准定义的H.
2.
16.
5功能测试.
该测试用来检测CPU寄存器中是否存在固定故障,即确保寄存器内的位不是一直为0或1;它是一种无损测试.
该测试执行以下主要任务:1.
在执行此程序之前,应将需要测试的CPU寄存器内容存入堆栈.
2.
首先向需要测试的寄存器依次写入二进制序列010101.
.
.
和101010.
.
.
(长度取决于架构),然后再读取寄存器内容来进行验证.
3.
如果返回值与先前存入的值不匹配,那么测试会返回一个错误代码.
API函数下面的API函数用于实现CPU寄存器测试:SSL_8bit_CPU_RegisterTest(PIC10/12/16)SSL_8bitsFamily_CPU_RegisterTest(PIC18)SSL_16bitsFamily_CPU_RegisterTestSSL_32bitsFamily_CPU_RegisterTest注:在执行CPU寄存器测试期间应禁止中断,以始终保持寄存器的完整性.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第3页AN1229程序计数器测试程序计数器(ProgramCounter,PC)测试用于实现IEC60730标准定义的H.
2.
16.
5功能测试.
PC中保存下一条将要执行的指令的地址.
该测试执行以下主要任务:1.
PC测试调用位于闪存内不同地址处的函数.
2.
这些函数返回一个唯一值.
3.
使用PC测试函数验证返回值.
4.
如果所有函数返回的值均正确,表明PC已跳转到正确的位置.
定制的链接描述文件定义了这些函数在闪存中的存放地址.
这些地址处的函数返回一个唯一值,该值为被调用函数的起始地址.
例1显示了如何修改链接描述文件以将函数放置到闪存中.
实际闪存地址空间取决于处理器.
请参见提供的具体处理器链接描述文件示例.
API函数下面的API函数用于实现PC测试:SSL_8bit_PCtest(PIC10/12/16)SSL_8bitsFamily_PCtest(PIC18)SSL_16bitsFamily_PCtestSSL_32bitsFamily_PCtest例1:链接描述文件的修改注1:用户应用程序定义了PC跳转到的地址.
2:程序存储器的大小根据器件的不同而有所不同.
欲知更多详细信息请参见特定器件的数据手册.
/*修改后的链接描述文件*/SslTestSection10x900:{*(.
SslTestSection1);}program/*SSL_TestFunction1函数*/long__attribute__((__section__(".
SslTestSection1")))SSL_TestFunction1(){return((long)&SSL_TestFunction1);}AN1229DS01229C_CN第4页2009-2014MicrochipTechnologyInc.
非易失性存储器(闪存/EEPROM)测试非易失性存储器(闪存/EEPROM)测试用于实现IEC60730标准定义的周期性修改的校验和H.
2.
19.
3.
1功能测试.
该测试用来检测非易失性存储器中是否存在单个位故障.
不希望系统内的非易失性存储器(例如:闪存和EEPROM存储器)内保存的数据在程序执行期间发生变化.
闪存/EEPROM非易失性存储器测试使用循环冗余校验(CyclicRedundancyCheck,CRC)计算周期性校验和.
目前CRC计算采用了几套标准.
CRC除数的宽度在8到32位之间,具体取决于所使用的多项式.
除数的宽度决定着检测错误的能力.
下面给出了一些常用的CRC除数:CRC-16=11000000000000101=8005(十六进制)CRC-CCITT=10001000000100001=1021(十六进制)CRC-32=100000100110000010001110110110111=04C11DB7(十六进制)图1给出了非易失性存储器测试的流程图.
CRC16计算函数返回最终CRC值,该值用于执行以下操作:1.
在系统启动时,如果CRC_Flag设置为0x00,那么计算得到的CRC校验和可用作参考校验和.
2.
参考校验和保存在闪存或EEPROM存储器内,CRC标志设置为0xFF.
3.
CRC标志设置为0xFF时,将周期性地调用CRC16计算函数.
4.
将从第3步计算得到的校验和与参考校验和进行比较.
5.
如果两个值相匹配,用户应用程序将置1状态位,以指示非易失性存储器已通过了测试并且没有检测到错误.
API函数下面的API函数用于实现非易失性存储器测试:SSL_8bit_EEPROMtest_CRC16(PIC10/12/16)SSL_8bitsFamily_EEPROMtest_CRC16(PIC18)SSL_8bitsFamily_Flashtest_CRC16(PIC18)SSL_16bitsFamily_Flashtest_CRC16SSL_16bitsFamily_EEPROMtest_CRC16SSL_32bitsFamily_Flashtest_CRC16图1:非易失性存储器测试流程图注:16位EEPROM测试仅适用于dsPIC30F器件.
计算CRC参考CRC==计算得到的CRC是是否否通过/未发现错误失败/发现错误CRC标志==0把参考CRC校验和保存到闪存/EEPROM存储器中开始设置CRC标志=0xFF结束计算参考CRC校验和2009-2014MicrochipTechnologyInc.
DS01229C_CN第5页AN1229易失性存储器测试易失性存储器测试用于实现IEC60730标准定义的周期性静态存储器H.
2.
19.
6功能测试.
该测试用来检测易失性存储器中是否存在单个位故障.
易失性存储器内的数据在程序执行期间可能会改变.
RAM存储器测试用于确定RAM存储器的某位是否一直为1或0.
March存储器测试和Checkerboard测试是两种广泛用于检查直流故障的静态存储器算法.
使用B类安全软件库可以实现以下测试:March测试-MarchC测试-MarchC-测试-MarchB测试MARCH测试March测试在存储器阵列内的每个存储单元上执行一组限定数量的操作.
每个操作均执行以下任务:1.
向存储单元内写入0(w0).
2.
向存储单元内写入1(w1).
3.
从存储单元内读取预期值0(r0).
4.
从存储单元内读取预期值1(r1).
March测试符号图2说明了用在March测试中的符号:图2:MARCH测试符号注:March存储器函数不对RAM的堆栈区域进行测试.
提供下列特殊函数进行堆栈区域测试:SSL_8bitsFamily_RAM_STACKtest_MarchC(PIC18)SSL_16bitsFamily_RAM_STACKtest_MarchCSSL_32bitsFamily_RAM_STACKtest_MarchC地址序列按升序排列.
地址序列按降序排列.
地址序列按升序或降序排列.
表示读操作(从存储单元内读取0).
表示读操作(从存储单元内读取1).
表示写操作(向存储单元内写入0).
表示写操作(向存储单元内写入1).
1010wwrr:::::::AN1229DS01229C_CN第6页2009-2014MicrochipTechnologyInc.
MARCHC测试MarchC测试用于检测易失性存储器内的以下类型的故障:固定故障寻址故障转换故障耦合故障该测试的复杂度为11n,其中n表示存储器内的位数.
该测试是一种破坏性测试(即:不保存存储器内容).
因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
例2给出了用于演示实现MarchC测试的伪代码.
API函数下面的API函数用于实现MarchC测试:SSL_8bit_RAMtest_MarchC(PIC10/12/16)SSL_8bitsFamily_RAMtest_MarchC(PIC18)SSL_8bitsFamily_RAM_STACKtest_MarchC(PIC18)SSL_16bitsFamily_RAMtest_MarchCSSL_16bitsFamily_RAM_STACKtest_MarchCSSL_32bitsFamily_RAMtest_MarchCSSL_32bitsFamily_RAM_STACKtest_MarchC图3给出了一个MarchC算法.
图3:MARCHC算法例2:MARCHC测试的伪代码})0();0,1();1,0();0();0,1();1,0();0({rwrwrrwrwrwCMarchfor(i=0;i=0;i--){if(x(i)==0)x(i)=1;elsereturnfail;}for(i=(n-1);i>=0;i--){if(x(i)==1)x(i)=0;elsereturnfail;for(i=(n-1);i>=0;i--){if(x(i)==0){}elsereturnfail}returnpass;2009-2014MicrochipTechnologyInc.
DS01229C_CN第7页AN1229MARCHC-测试MarchC-测试用于检测易失性存储器内的以下类型的故障:固定故障寻址故障转换故障耦合故障该测试的复杂度为10n,其中n表示存储器内的位数.
该测试是一种破坏性测试.
因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
API函数下面的API函数用于实现MarchC-测试:SSL_8bit_RAMtest_MarchC_Minus(PIC10/12/16)SSL_8bitsFamily_RAMtest_MarchC_Minus(PIC18)SSL_16bitsFamily_RAMtest_MarchC_MinusSSL_32bitsFamily_RAMtest_MarchC_Minus图4给出了一个MarchC-算法.
图4:MARCHC-算法});0,1();1,0();0();0,1();1,0();0({wrwrrwrwrwCMinusMarchAN1229DS01229C_CN第8页2009-2014MicrochipTechnologyInc.
MARCHB测试MarchB测试是一种非冗余测试,它用于检测以下类型的故障:固定故障链接的幂等耦合故障跳变耦合故障该测试的复杂度为17n,其中n表示存储器内的位数.
图5给出了一个MarchB算法.
图5:MARCHB算法例3给出了用于演示实现MarchB测试的伪代码.
API函数下面的API函数用于实现MarchB测试:SSL_8bit_RAMtest_MarchB(PIC10/12/16)SSL_8bitsFamily_RAMtest_MarchB(PIC18)SSL_16bitsFamily_RAMtest_MarchBSSL_32bitsFamily_RAMtest_MarchBBMarch);1,,0();01,();0,,1();1,,0();0(wrwrwrwrw1,r0,w0,r1w1w0,ww1,w0{}注1:在执行任何March测试前,用户应用程序应当为堆栈分配适当的存储空间(详情请参见具体API函数说明).
必须为堆栈分配合适的地址,以避免其在测试期间被覆盖.
2:根据架构,建议堆栈位于数据存储器的开始或者末尾.
用户应用程序应当为其指定一个地址,使得堆栈不会与其他静态分配的资源(例如:MPLABICD2RAM空间或其他调试器使用的RAM空间)重叠.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第9页AN1229例3:MARCHB测试的伪代码for(i=0;i=0;i--){if(x(i)=1){x(i)=0;x(i)=1;x(i)=0;}elsereturnfail;}for(i=(n-1);i>=0;i--){if(x(i)==0){x(i)=1;x(i)=0;}elsereturnfail;}returnpass;AN1229DS01229C_CN第10页2009-2014MicrochipTechnologyInc.
CHECKERBOARDRAM测试CheckerboardRAM测试向一系列相邻存储单元写入棋盘格图样.
该测试以具体架构大小为单位(存储块)(8位架构为2字节,16位架构为4字节,32位架构为64字节)执行.
该测试是一种非破坏性存储器测试.
该测试执行以下主要任务:1.
保存将要被测试的存储单元的内容到CPU寄存器中.
2.
向存储单元"N"写入二进制值(长度取决于架构)101010.
.
.
,向存储器位置"N+1"写入取反后的二进制值010101.
.
.
,以此类推,直到写满整个存储块.
3.
读取当前块内所有存储单元的内容,并进行验证.
如果值匹配,则函数继续执行;否则,函数停止执行,并返回一个错误.
4.
重复执行第2步和第3步,以分别向"N"和"N+1"单元写入翻转后的图样.
5.
测试完一个存储块后,则开始测试下一个存储块,直到所有要求的存储区域均已测试.
API函数下面的API函数用于实现CheckerboardRAM测试:SSL_8bit_RAMtest_CB(PIC10/12/16)SSL_8bitsFamily_RAM_CB_test(PIC18)SSL_16bitsFamily_RAMtest_CheckerBoardSSL_32bitsFamily_RAMtest_CheckerBoard中断测试中断测试用于实现IEC60730标准定义的独立时隙监视H.
2.
18.
10.
4功能测试.
该测试用来检查发生的中断数是否在预先定义的范围之内.
中断测试的目的是验证中断是否经常发生.
中断测试函数可按指定的时间间隔调用.
它由定时器或线频率中断触发,用于监视和验证中断操作.
为了跟踪经常发生的中断,每个ISR内的专用计数器应能够在产生中断时自动递减1.
例如,如果串行外设接口(SerialPeripheralInterface,SPI)配置为每2ms产生一次中断,那么SPI将在10ms内至少产生5次中断.
当产生SPI中断时,专门用于跟踪SPI中断的计数器就递减1.
因此,如果计数器初始化为5,那么计数器在10ms内将递减为0.
这由中断测试函数验证,此函数在每10ms后触发一次.
为了跟踪很少发生的中断,中断测试函数内的专用计数器应在指定中断未在上一时间间隔内发生时递减1.
请参考示例代码,该代码可从Microchip网站下载(有关详细信息,请参见附录A:"源代码").
时钟测试根据IEC60730标准,只需测试时钟的谐波和次谐波.
时钟测试用于实现IEC60730标准定义的独立时隙监视H.
2.
18.
10.
4功能测试.
它验证系统时钟的可靠性(即系统时钟不应太快也不应太慢).
根据选择的参考时钟,可以采用以下时钟测试方法之一进行测试:使用辅助振荡器(SOSC)进行时钟测试使用线频率(50Hz或60Hz)进行时钟测试使用SOSC进行时钟测试在将SOSC用作参考时钟时,使用时钟测试函数来验证CPU时钟是否正常运行.
该测试执行以下主要任务:1.
LP辅助振荡器用作独立时钟源或者参考时钟源.
此32kHz的振荡器用作硬件Timer1的时钟源.
2.
带锁相环(Phase-LockedLoop,PLL)的主振荡器(POSC)通常是CPU的时钟源.
测试使用运行在CPU时钟频率下的硬件定时器(8位架构使用Timer0,16位架构使用Timer2,32位架构使用CPU内核定时器).
3.
配置Timer1以按指定时间间隔(例如:1ms)溢出并产生中断.
4.
当Timer1溢出时,将保存用于CPU时钟计数的硬件定时器的值.
此值代表着在1ms的SOSC周期内经过的CPU时钟周期数.
如果时钟周期数超出了规定的范围,那么该函数将返回一个错误代码.
API函数下面的API函数用于实现时钟测试:SSL_8bitsFamily_CLOCKtest(PIC18)SSL_16bitsFamily_CLOCKtestSSL_32bitsFamily_CLOCKtest2009-2014MicrochipTechnologyInc.
DS01229C_CN第11页AN1229使用线频率(50Hz或60Hz)进行时钟测试使用时钟测试函数来验证CPU时钟是否正常运行.
50Hz/60Hz的线频率用作独立时钟源或者参考时钟源.
输入捕捉模块用于周期测量.
50Hz/60Hz的线频率提供给各个器件的输入捕捉引脚(IC1).
该测试执行以下主要任务:1.
IC1CON寄存器配置如下:a)选择硬件Timer2作为IC1的时基(PIC18使用Timer1).
b)在线频率的每个上升沿产生一次捕捉操作.
c)每两次捕捉事件产生一次捕捉完成事件(中断).
2.
配置Timer2预分频器,以使定时器在20ms/16.
66ms内不会超时(PIC18使用Timer1).
3.
在线频率的每个上升沿执行一次捕捉.
对于周期测量,在捕捉两个时间标记之后产生一次捕捉完成事件(中断)(见图6).
4.
两个时间标记(V1和V2)的差值确定定时器周期值.
在线频率20ms/16.
66ms内,CPU周期数的计算如下:时钟周期数=((V1–V2)*Timer2预分频值)API函数下面的API函数用于实现时钟测试:用于8位PICMCU(PIC18)的API函数SSL_16bitsFamily_CLOCKtest_LineFreqSSL_32bitsFamily_CLOCKtest_LineFreq图6:捕捉定时器值V1V1xxxxxxxxxxxx第1次捕捉捕捉FIFOV1V2xxxxxxxxV3V2xxxxxxxxV3V4xxxxxxxxV2V3V4TMR2或TMR3ICX捕捉事件捕捉中断(ICI=01)在ISR内读已捕捉到的值在ISR内读已捕捉到的值第2次捕捉第3次捕捉第4次捕捉注:在此图例中,定时器斜率未按比例显示.
AN1229DS01229C_CN第12页2009-2014MicrochipTechnologyInc.
易失性及非易失性存储器的寻址及内部数据路径对于单片机或数字信号控制器(例如:PICMCU和dsPICDSC),周期性静态存储器测试用于测试易失性存储器,而周期性校验和用于测试非易失性存储器.
这些测试检测内部地址总线和内部数据路径内的任何固定故障.
错误地址寻址具有外部存储器的单片机才需要进行此测试.
外部通信IEC60730的B类规范建议执行以下测量以确保组件之间的可靠通信:传输冗余传输冗余是一种故障/错误控制技术,它保护输入和输出信息避免出现同步和/或系统错误.
通过在发送器和接收器之间传送数据来实现此技术.
数据应至少连续传输两次,然后进行比较.
协议测试协议测试是一种故障/错误控制技术,通过向/从计算机组件传输数据来检测内部通信协议的错误.
CRC单字CRC多项式用于计算被发送消息的CRC校验和.
在发送端,将CRC校验和添加到消息中之后再发送出去.
在接收端,接收器使用相同的CRC多项式计算CRC校验和,并把计算得到的值与接收到的值进行比较.
时序PICMCU和dsPICDSC有多个专用通信接口,例如:UART、I2C和SPI模块.
IEC60730的B类规范建议这些模块应使用时隙监视,以确保通信发生在正确的时刻.
似真性检查I/O外设、模拟多路开关和A/D转换器的似真性检查执行如下:I/O外设I/O引脚的似真性检查可通过翻转I/O引脚状态并检查引脚状态来执行.
模拟多路开关为了验证模拟多路开关的工作是否正确,应向所有通道上施加一个已知的电压值.
读取这些值,并把这些值与所施加电压进行比较以进行验证.
A/D转换器为了测试A/D转换器的模拟功能,应向模拟输入引脚上施加一个已知的外部电压.
然后把转换结果与施加电压进行比较.
用于8位PICMCU(PIC10/12/16)的API函数本部分列出并介绍了B类安全软件库中可用于8位架构(PIC10/12/16)的API函数.
下面列出了这些API函数,下文还将对其进行详细描述:SSL_8bit_CPU_RegisterTestSSL_8bit_PCtestSSL_8bit_EEPROMtest_CRC16SSL_8bit_RAMtest_MarchCSSL_8bit_RAMtest_MarchC_MinusSSL_8bit_RAMtest_MarchB2009-2014MicrochipTechnologyInc.
DS01229C_CN第13页AN1229SSL_8bit_CPU_RegisterTest说明该函数执行CPU寄存器测试.
此测试首先向寄存器依次写入值0x55和0xAA,然后再读取寄存器内容来进行验证.
如果返回值与先前存入的值不匹配,该函数会返回一个错误代码.
不保存返回错误代码的寄存器(W0)的内容.
在执行此程序之前,将需要测试的CPU寄存器的内容存入临时寄存器,并在完成测试时恢复寄存器的内容.
头文件无.
原型intSSL_8bit_CPU_RegisterTest(void);参数无.
返回值REGISTER_TEST_FAIL返回值=0REGISTER_TEST_PASS返回值=1注解无.
源文件无.
表1:资源需求参数需求程序存储器77个字堆栈无执行时间81个周期AN1229DS01229C_CN第14页2009-2014MicrochipTechnologyInc.
SSL_8bit_PCtest说明该函数执行PC测试,它是PC的功能测试.
此测试调用位于闪存内不同地址处的函数.
SSL_ProgCounterTest.
h头文件定义了这些函数在闪存中的存放地址.
这些地址处的函数返回一个唯一值,该值为被调用函数的起始地址.
使用SSL_8bit_PCtest函数验证返回值.
头文件SSL_ProgCounterTest.
h原型unsignedintSSL_8bit_PCtest(void);参数无.
返回值PC_TEST_FAIL返回值=0PC_TEST_PASS返回值=1注解无.
表2:资源需求参数需求程序存储器107个字堆栈1个字节执行时间92个周期2009-2014MicrochipTechnologyInc.
DS01229C_CN第15页AN1229SSL_8bit_EEPROMtest_CRC16说明该函数执行非易失性存储器测试.
它计算地址位于EEPROM_STARTADDRESS和EEPROM_ENDADDRESS之间的数据的CRC.
该函数返回最终CRC值.
头文件SSL_EEPROM_CRC.
h原型unsignedintSSL_8bits_EEPROMtest_CRC16(unsignedcharstartAddress,unsignedcharendAddress)参数startAddress表示待测数据的起始地址endAddress表示待测数据的结束地址返回值crc_Result保存CRC的结果注解无.
源文件无.
表3:资源需求参数需求程序存储器149个字堆栈1个字节执行时间1091个周期(1)注1:此处指定的执行时间是针对三个EEPROM单元的.
AN1229DS01229C_CN第16页2009-2014MicrochipTechnologyInc.
SSL_8bit_RAMtest_MarchC说明该函数执行MarchC测试.
该测试从RAM存储器内存取一个8位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_8bit_RAMtest_MarchC函数返回时,存储器将清零.
头文件SSL_MarchCRamTest.
h原型unsignedcharSSL_8bit_RAMtest_MarchC(void);参数无.
返回值MARCHC_RAM_TEST_FAIL返回值=0MARCHC_RAM_TEST_PASS返回值=1注解无.
源文件SSL_MarchCRamTest.
c表4:资源需求参数需求程序存储器388个字节堆栈15个字节执行时间3834个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第17页AN1229SSL_8bit_RAMtest_MarchC_Minus说明该函数执行MarchC-测试.
该测试从RAM存储器内存取一个8位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_8bit_RAMtest_MarchCMinus函数返回时,存储器将清零.
头文件SSL_MarchCMInusRamTest.
h原型unsignedcharSSL_8bit_RAMtest_MarchCMinus(void);参数无.
返回值MARCHC_RAM_TEST_FAIL返回值=0MARCHC_RAM_TEST_PASS返回值=1注解无.
源文件SSL_MarchCMinusRamTest.
c表5:资源需求参数需求程序存储器269个字节堆栈10个字节执行时间3834个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
AN1229DS01229C_CN第18页2009-2014MicrochipTechnologyInc.
SSL_8bit_RAMtest_MarchB说明该函数执行MarchB测试.
该测试从RAM存储器内存取一个8位(即一个字节)字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_8bit_RAMtest_MarchB函数返回时,存储器将清零.
头文件SSL_MarchBRamTest.
h原型unsignedcharSSL_8bit_RAMtest_MarchB(void);参数无.
返回值MARCHB_RAM_TEST_FAIL返回值=0MARCHB_RAM_TEST_PASS返回值=1源文件SSL_MarchBRamTest.
c表6:资源需求参数需求程序存储器453个字节堆栈执行时间2761个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第19页AN1229用于8位PICMCU(PIC18)的API函数本部分列出并介绍了B类安全软件库中可用于8位架构的API函数.
下面列出了这些函数,下文还将对其进行详细描述:SSL_8bitsFamily_CPU_RegisterTestSSL_8bitsFamily_PCtestSSL_8bitsFamily_Flashtest_CRC16SSL_8bitsFamily_EEPROMtest_CRC16SSL_8bitsFamily_RAM_STACKtest_MarchCSSL_8bitsFamily_RAMtest_MarchC_MinusSSL_8bitsFamily_RAMtest_MarchBSSL_8bitsFamily_RAMtest_CheckerBoardSSL_8bitsFamily_CLOCKtestSSL_8bitsFamily_CLOCKtest_LineFreqAN1229DS01229C_CN第20页2009-2014MicrochipTechnologyInc.
SSL_8bitsFamily_CPU_RegisterTest说明该函数执行CPU寄存器测试.
此测试首先向寄存器依次写入值0x55和0xAA,然后再读取寄存器内容来进行验证.
如果返回值与先前存入的值不匹配,该函数会返回一个错误代码.
不保存返回错误代码的寄存器(W0)的内容.
在执行此程序之前,将需要测试的CPU寄存器的内容存入临时寄存器,并在完成测试时恢复寄存器的内容.
头文件无.
原型voidSSL_8bitsFamily_CPU_RegisterTest(void);参数无.
返回值REGISTER_TEST_FAIL返回值=0x86REGISTER_TEST_PASS返回值=0x00注解无.
源文件无.
表7:资源需求参数需求程序存储器77个字堆栈无执行时间81个周期2009-2014MicrochipTechnologyInc.
DS01229C_CN第21页AN1229SSL_8bitsFamily_PCtest说明该函数执行PC测试,它是PC的功能测试.
此测试调用位于闪存内不同地址处的函数.
SSL_PcTest.
h头文件定义了这些函数在闪存中的存放地址.
这些地址处的函数返回一个唯一值,该值为被调用函数的起始地址.
使用SSL_8bitsFamily_PCtest函数验证返回值.
头文件SSL_PcTest.
h原型intSSL_8bitsFamily_PCtest(void);参数无.
返回值PC_TEST_FAIL返回值=0PC_TEST_PASS返回值=1注解无.
表8:资源需求参数需求程序存储器107个字堆栈1个字节执行时间92个周期AN1229DS01229C_CN第22页2009-2014MicrochipTechnologyInc.
SSL_8bitsFamily_Flashtest_CRC16说明该函数执行非易失性存储器测试.
它计算地址位于FLASH_STARTADDRESS和FLASH_ENDADDRESS之间的数据的CRC.
该函数返回最终CRC值.
头文件SSL_Flash_CRC.
h原型unsignedintSSL_8bitsFamily_Flashtest_CRC16(word32startAddress,word32endAddress,unsignedintcrc_Result);参数startAddress表示待测数据的起始地址endAddress表示待测数据的结束地址crc_Result表示CRC的初始值返回值crc_Result保存CRC的结果注解无.
表9:资源需求参数需求程序存储器489个字节堆栈70个字节执行时间446个周期(1)注1:此处指定的执行时间是针对单个闪存单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第23页AN1229SSL_8bitsFamily_EEPROMtest_CRC16说明该函数执行非易失性存储器测试.
它计算地址位于EEPROM_STARTADDRESS和EEPROM_ENDADDRESS之间的数据的CRC.
该函数返回最终CRC值.
头文件SSL_EEPROM_CRC.
h原型unsignedintSSL_8bitsFamily_EEPROMtest_CRC16(uReg32startAddress,uReg32endAddress,unsignedintcrc_Result);参数startAddress表示待测数据的起始地址endAddress表示待测数据的结束地址crc_Result表示CRC的初始值返回值crc_Result保存CRC的结果注解无.
源文件无.
表10:资源需求参数需求程序存储器149个字堆栈1个字节执行时间1091个周期(1)注1:此处指定的执行时间是针对三个EEPROM单元的.
AN1229DS01229C_CN第24页2009-2014MicrochipTechnologyInc.
SSL_8bitsFamily_RAMtest_MarchC说明该函数执行MarchC测试.
该测试从RAM存储器中存取一个8位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_8bitsFamily_RAMtest_MarchC函数返回时,存储器将清零.
头文件SSL_MarchC.
h原型intSSL_8bitsFamily_RAMtest_MarchC(char*ramStartAddress,intramSize);参数ramStartAddress表示起始地址,MarchC算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数返回值MARCHC_RAM_TEST_FAIL返回值=0MARCHC_RAM_TEST_PASS返回值=1注解无.
源文件SSL_MarchCRamTest.
c表11:资源需求参数需求程序存储器388个字节堆栈15个字节执行时间3834个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第25页AN1229SSL_8bitsFamily_RAM_STACKtest_MarchC说明该函数在RAM存储器和堆栈上执行MarchC测试.
该测试从RAM存储器内存取一个8位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
首先测试RAM存储器,然后通过传送堆栈内容到已测RAM区域来测试堆栈区域.
在测试完堆栈之后恢复堆栈内容.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_8bitsFamily_RAM_STACKtest_MarchC函数返回时,存储器将清零.
头文件SSL_MarchC_RamAndStackTest.
h原型intSSL_8bitsFamily_RAM_STACKtest_MarchC(char*ramStartAddress,unsignedintramSize);参数ramStartAddress表示起始地址,MarchC算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数返回值MARCHC_RAM_STACK_TEST_FAIL返回值=0MARCHC_RAM_STACK_TEST_PASS返回值=1注解无.
源文件SSL_MarchCRamAndStackTest.
c表12:资源需求参数需求程序存储器890个字节堆栈88个字节执行时间1576个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
AN1229DS01229C_CN第26页2009-2014MicrochipTechnologyInc.
SSL_8bitsFamily_RAMtest_MarchC_Minus说明该函数在RAM存储器和堆栈上执行MarchC测试.
该测试从RAM存储器内存取一个8位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
首先测试RAM存储器,然后通过传送堆栈内容到已测RAM区域来测试堆栈区域.
在测试完堆栈之后恢复堆栈内容.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_8bitsFamily_RAM_STACKtest_MarchCMinus函数返回时,存储器将清零.
头文件SSL_MarchC_Minus.
h原型intSSL_8bitsFamily_RAMtest_MarchC_Minus(char*ramStartAddress,intramSize);参数ramStartAddress表示起始地址,MarchC算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数返回值MARCHC_RAM_TEST_FAIL返回值=0MARCHC_RAM_TEST_PASS返回值=1注解无.
源文件SSL_RamTest_MarchCMinus.
c表13:资源需求参数需求程序存储器124个字节堆栈15个字节执行时间1402个周期2009-2014MicrochipTechnologyInc.
DS01229C_CN第27页AN1229SSL_8bitsFamily_RAMtest_MarchB说明该函数执行MarchB测试.
该测试从RAM存储器内存取一个8位(即一个字节)字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_8bitsFamily_RAMtest_MarchB函数返回时,存储器将清零.
头文件SSL_MarchB.
h原型intSSL_8bitsFamily_RAMtest_MarchB(char*ramStartAddress,intramSize);参数返回值MARCHB_TEST_FAIL返回值=0MARCHB_TEST_PASS返回值=1源文件SSL_MarchBRamTest.
c表14:资源需求ramStartAddress表示起始地址,MarchB算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数参数需求程序存储器453个字节堆栈执行时间2761个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
AN1229DS01229C_CN第28页2009-2014MicrochipTechnologyInc.
SSL_8bitsFamily_RAMtest_CheckerBoard说明该函数在RAM存储器上执行Checkerboard测试.
该测试在变量SIZE指定的存储空间内执行.
从变量START_RAM定义的地址开始执行.
指定的单元数必须为偶数.
头文件SSL_CheckerBoardTest.
INC原型unsignedcharSSL_8bitsFamily_Ram_CB_test(void);参数无.
返回值RAM_Test_Fail返回值=0x86RAM_Test_Pass返回值=0x00注解无.
源文件SSL_CheckerBoard.
asm表15:资源需求参数需求程序存储器321个字节堆栈68个字节执行时间43个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第29页AN1229SSL_8bitsFamily_CLOCKtest说明该函数执行时钟测试.
它用于验证CPU时钟是否正常运行.
在Timer1中断处理程序内保存Timer0的TMR0值.
此值代表着在1ms的SOSC周期内经过的CPU时钟周期数.
如果时钟周期数超出了定义的边界范围,那么该函数将设置错误标志.
该测试执行以下主要任务:1.
LP辅助振荡器用作独立时钟源或者参考时钟源.
此32kHz振荡器用作Timer1的时钟源.
2.
带锁相环(PLL)的POSC通常是CPU的时钟源.
Timer0运行在CPU时钟频率下.
3.
配置Timer1以按指定时间间隔(例如:1ms)产生中断.
4.
在Timer1中断处理程序内保存Timer0的TMR0值.
此值代表着在1ms的SOSC周期内经过的CPU时钟周期数.
如果时钟周期数超出了定义的边界范围,那么该函数将设置错误标志.
例如,以下参数用于计算PIC18F器件的CLK_MIN_TIME和CLK_MAX_TIME值:主振荡器:INTOSCFOSC:8MHzFCY:FOSC/4:(8*10^6)/4FCY:2000000辅助振荡器:32kHzTimer1周期:31因此,若容差为4%,则在1ms内的CPU时钟周期数(2000个周期)为:CLK_MIN_TIME:1920CLK_MAX_TIME:2080头文件SSL_ClockTest.
h原型unsignedintSSL_8bitsFamily_CLOCKtest(void);参数无.
返回值CLOCK_NO_ERROR返回值=1CLOCK_ERROR返回值=0注解无.
AN1229DS01229C_CN第30页2009-2014MicrochipTechnologyInc.
SSL_8bitsFamily_CLOCKtest(续)源文件SSL_ClockTest.
c表16:资源需求参数需求程序存储器堆栈执行时间2009-2014MicrochipTechnologyInc.
DS01229C_CN第31页AN1229SSL_8bitsFamily_CLOCKtest_LineFreq说明该函数执行线频率时钟测试.
它用于验证CPU时钟是否正常运行.
它通过执行以下步骤对IC1CON寄存器进行配置:1.
选择Timer1模块作为IC1的时基.
2.
每两个捕捉事件产生一次中断.
3.
在线频率的每个上升沿产生一次捕捉事件.
如果线频率为50Hz,那么IC1引脚在每20ms之后产生一次中断;如果线频率为60Hz,那么IC1引脚在每16.
66ms之后产生一次中断.
配置Timer1,以使定时器在20ms/16.
66ms内不会超时.
在线频率的每个上升沿产生一次捕捉事件.
对于周期测量,产生两次捕捉中断,在第二个中断程序内保存Timer1计数.
如果时钟周期数超出了定义的边界范围,那么该函数将设置错误标志.
例如,以下参数用于计算PIC18F器件的CLK_MIN_TIME和CLK_MAX_TIME值:主振荡器:INTOSCFOSC:8MHzFCY:FOSC/4:(8*10^6)/4FCY:200000020ms内的计数=0.
02*2000000=40000.
若容差为4%:CLK_MIN_TIME:38400CLK_MAX_TIME:41600头文件SSL_ClockTest_LineFreq.
h原型intSSL_8bitsFamily_CLOCKtest_LineFreq(void);参数无.
返回值CLOCK_NO_ERROR返回值=1CLOCK_ERROR返回值=0注解无.
源文件SSL_ClockTest_LineFreq.
c表17:资源需求参数需求程序存储器堆栈执行时间AN1229DS01229C_CN第32页2009-2014MicrochipTechnologyInc.
用于16位PICMCU和dsPICDSC的API函数本部分列出并介绍了B类安全软件库中可用于16位架构的API函数.
下面列出了这些API函数,下文还将对其进行详细描述:SSL_16bitsFamily_CPU_RegisterTestSSL_16bitsFamily_PCtestSSL_16bitsFamily_Flashtest_CRC16SSL_16bitsFamily_EEPROMtest_CRC16SSL_16bitsFamily_RAMtest_MarchCSSL_16bitsFamily_RAMtest_MarchC_MinusSSL_16bitsFamily_RAMtest_MarchBSSL_16bitsFamily_RAMtest_CheckerBoardSSL_16bitsFamily_CLOCKtestSSL_16bitsFamily_CLOCKtest_LineFreq2009-2014MicrochipTechnologyInc.
DS01229C_CN第33页AN1229SSL_16bitsFamily_CPU_RegisterTest说明该函数执行CPU寄存器测试.
此测试首先向CPU寄存器依次写入0x5555和0xAAAA,然后再读取寄存器内容来进行验证.
如果返回值与先前存入的值不匹配,该函数会返回一个错误代码.
不保存返回错误代码的寄存器(W0)的内容.
在执行此程序之前,将需要测试的CPU寄存器的内容存入堆栈,并在完成测试时恢复寄存器的内容.
头文件无.
原型intSSL_16bitsFamily_CPU_RegisterTest();参数无.
返回值CPU_REGISTER_TEST_FAIL返回值=0CPU_REGISTER_TEST_PASS返回值=1注解无.
源文件无.
表18:资源需求参数需求程序存储器1364个字节(dsPIC30F/dsPIC33F)684个字节(PIC24H/PIC24F)1404个字节(dsPIC33E)724个字节(PIC24E)堆栈58个字节(dsPIC30F/dsPIC33F/dsPIC33E)24个字节(PIC24H/PIC24F/PIC24E)执行时间351个周期(dsPIC30F/dsPIC33F)181个周期(PIC24H/PIC24F)363个周期(dsPIC33E)193个周期(PIC24E)AN1229DS01229C_CN第34页2009-2014MicrochipTechnologyInc.
SSL_16bitsFamily_PCtest说明该函数执行PC测试,它是PC的功能测试.
此测试调用位于闪存内不同地址处的函数.
定制的链接描述文件定义了这些函数在闪存中的存放地址.
这些地址处的函数返回一个唯一值,该值为被调用函数的起始地址.
使用SSL_16bitsFamily_PCtest函数验证返回值.
头文件SSL_PcTest.
h原型SSL_16bitsFamily_PCtest();参数无.
返回值PC_TEST_FAIL返回值=0PC_TEST_PASS返回值=1注解无.
表19:资源需求参数需求程序存储器258个字节堆栈28个字节执行时间32个周期2009-2014MicrochipTechnologyInc.
DS01229C_CN第35页AN1229SSL_16bitsFamily_Flashtest_CRC16说明该函数执行非易失性存储器测试.
它计算地址位于FLASH_STARTADDRESS和FLASH_ENDADDRESS之间的数据的CRC.
该函数返回最终CRC值.
头文件SSL_Flash_CRC.
h原型unsignedintSSL_16bitsFamily_Flashtest_CRC16(uReg32startAddress,uReg32endAddress,unsignedintinit_CrcValue);参数startAddress表示待测数据的起始地址endAddress表示待测数据的结束地址init_CrcValue表示CRC的初始值返回值crc_Result保存CRC的结果注解无.
表20:资源需求参数需求程序存储器489个字节堆栈70个字节执行时间446个周期(1)注1:此处指定的执行时间是针对单个闪存单元的.
AN1229DS01229C_CN第36页2009-2014MicrochipTechnologyInc.
SSL_16bitsFamily_EEPROMtest_CRC16说明该函数执行非易失性存储器测试.
它计算地址位于EEPROM_STARTADDRESS和EEPROM_ENDADDRESS之间的数据的CRC.
该函数返回最终CRC值.
头文件SSL_EEPROM_CRC.
h原型unsignedintSSL_16bitsFamily_EEPROMtest_CRC16(uReg32startAddress,uReg32endAddress,unsignedintinit_CrcValue);参数startAddress表示待测数据的起始地址endAddress表示待测数据的结束地址init_CrcValue表示CRC的初始值返回值crc_Result保存CRC的结果注解无.
源文件无.
表21:资源需求参数需求程序存储器492个字节堆栈70个字节执行时间348个周期(1)注1:此处指定的执行时间是针对单个EEPROM单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第37页AN1229SSL_16bitsFamily_RAMtest_MarchC说明该函数执行MarchC测试.
该测试从RAM存储器内存取一个16位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_16bitsFamily_RAMtest_MarchC函数返回时,存储器将清零.
头文件SSL_MarchC.
h原型intSSL_16bitsFamily_RAMtest_MarchC(int*ramStartAddress,intramSize);参数ramStartAddress表示起始地址,MarchC算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数返回值MARCHC_RAM_TEST_FAIL返回值=0MARCHC_RAM_TEST_PASS返回值=1注解无.
源文件SSL_MarchCRamTest.
c表22:资源需求注1:在执行任何March测试之前,用户应用程序应当为堆栈分配0x50字节的存储空间.
必须为堆栈分配合适的地址,以避免其在测试期间被改写.
2:建议堆栈位于数据存储器的开始或者末尾.
用户应用程序应当为其指定一个地址,使得堆栈不会与其他静态分配的资源(例如:起始地址为0x800的MPLABICD2RAM空间)重叠.
3:在执行MarchB或MarchC测试之前,应对.
gld文件进行如下更改:.
stack0x850:/*堆栈起始地址\*{__SP_init=.
;.
+=0x50;/*堆栈长度*/__SPLIM_init=.
;.
+=8;}>data参数需求程序存储器585个字节堆栈88个字节执行时间1254个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
AN1229DS01229C_CN第38页2009-2014MicrochipTechnologyInc.
SSL_16bitsFamily_RAM_STACKtest_MarchC说明该函数在RAM存储器和堆栈上执行MarchC测试.
该测试从RAM存储器内存取一个16位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
首先测试RAM存储器,然后通过传送堆栈内容到已测RAM区域来测试堆栈区域.
在测试完堆栈之后恢复堆栈内容.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_16bitsFamily_RAM_STACKtest_MarchC函数返回时,存储器将清零.
头文件SSL_MarchC.
h原型intSSL_16bitsFamily_RAM_STACKtest_MarchC(int*ramStartAddress,intramSize);参数ramStartAddress表示起始地址,MarchC算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数返回值MARCHC_RAM_STACK_TEST_FAIL返回值=0MARCHC_RAM_STACK_TEST_PASS返回值=1注解无.
源文件SSL_MarchCRamAndStackTest.
c表23:资源需求注1:在执行任何March测试之前,用户应用程序应当为堆栈分配0x50字节的存储空间.
必须为堆栈分配合适的地址,以避免其在测试期间被改写.
2:建议堆栈位于数据存储器的开始或者末尾.
用户应用程序应当为其指定一个地址,使得堆栈不会与其他静态分配的资源(例如:起始地址为0x800的MPLABICD2RAM空间)重叠.
3:在执行MarchB或MarchC测试之前,应对.
gld文件进行如下更改:.
stack0x850:/*堆栈起始地址\*{__SP_init=.
;.
+=0x50;/*堆栈长度*/__SPLIM_init=.
;.
+=8;}>data参数需求程序存储器890个字节堆栈88个字节执行时间1576个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第39页AN1229SSL_16bitsFamily_RAMtest_MarchC_Minus说明该函数在RAM存储器和堆栈上执行MarchC测试.
该测试从RAM存储器内存取一个16位字.
地址必须按数据类型对齐且长度必须为数据宽度的整数倍.
首先测试RAM存储器,然后通过传送堆栈内容到已测RAM区域来测试堆栈区域.
在测试完堆栈之后恢复堆栈内容.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_16bitsFamily_RAMtest_MarchC_Minus函数返回时,存储器将清零.
头文件SSL_MarchC_Minus.
h原型intSSL_16bitsFamily_RAMtest_MarchC_Minus(int*ramStartAddress,intramSize);参数ramStartAddress表示起始地址,MarchC算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数返回值MARCHC_RAM_TEST_FAIL返回值=0MARCHC_RAM_TEST_PASS返回值=1注解无.
源文件SSL_MarchC_MinusRamTest.
c表24:资源需求参数需求程序存储器381个字节堆栈30个字节执行时间122个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
AN1229DS01229C_CN第40页2009-2014MicrochipTechnologyInc.
SSL_16bitsFamily_RAMtest_MarchB说明该函数执行MarchB测试.
该测试从RAM存储器内存取一个16位字.
地址必须按数据类型正确对齐且长度必须为数据宽度的整数倍.
该测试为破坏性测试;因此,应在系统启动时在初始化存储器和运行时库之前进行该测试.
当控制从SSL_16bitsFamily_RAMtest_MarchB函数返回时,存储器将清零.
头文件SSL_MarchB.
h原型intSSL_16bitsFamily_RAMtest_MarchB(int*ramStartAddress,intramSize);参数ramStartAddress表示起始地址,MarchB算法从此地址开始读取数据ramSize表示测试的字节数;大小必须是偶数返回值MARCHB_TEST_FAIL返回值=0MARCHB_TEST_PASS返回值=1注解无.
源文件SSL_MarchBRamTest.
c表25:资源需求注1:在执行任何March测试之前,用户应用程序应当为堆栈分配0x50字节的存储空间.
必须为堆栈分配合适的地址,以避免其在测试期间被改写.
2:建议堆栈位于数据存储器的开始或者末尾.
用户应用程序应当为其指定一个地址,使得堆栈不会与其他静态分配的资源(例如:起始地址为0x800的MPLABICD2RAM空间)重叠.
3:在执行MarchB或MarchC测试之前,应对.
gld文件进行如下更改:.
stack0x850:/*堆栈起始地址\*{__SP_init=.
;.
+=0x50;/*堆栈长度*/__SPLIM_init=.
;.
+=8;}>data参数需求程序存储器630个字节堆栈88个字节执行时间1183个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第41页AN1229SSL_16bitsFamily_RAMtest_CheckerBoard说明该函数在RAM存储器上执行Checkerboard测试.
该测试在变量RamSize指定的存储空间内执行.
从变量RAMSTARTADDRESS定义的地址开始执行.
指定的单元数必须为偶数.
头文件SSL_CBram.
h原型intSSL_16bitsFamily_RAMtest_CheckerBoard(int*ramStartAddress,intRamSize);参数RamStartAddress表示起始地址,从此地址开始执行Checkerboard测试RamSize表示测试的单元数;大小必须是偶数返回值CB_TEST_FAIL返回值=0CB_TEST_PASS返回值=1注解无.
源文件SSL_CheckerBoard.
s表26:资源需求参数需求程序存储器321个字节堆栈68个字节执行时间43个周期(1)注1:此处指定的执行时间是针对单个RAM单元的.
AN1229DS01229C_CN第42页2009-2014MicrochipTechnologyInc.
SSL_16bitsFamily_CLOCKtest说明该函数执行时钟测试.
它用于验证CPU时钟是否正常运行.
在Timer1中断处理程序内保存Timer2的TMR2值.
此值代表着在1ms的SOSC周期内经过的CPU时钟周期数.
如果时钟周期数超出了定义的边界范围,那么该函数将设置错误标志.
该测试执行以下主要任务:1.
LP辅助振荡器用作独立时钟源或者参考时钟源.
此32kHz振荡器用作Timer1的时钟源.
2.
带锁相环(PLL)的POSC是CPU的时钟源.
Timer2运行在CPU时钟频率下.
3.
配置Timer1以按指定时间间隔(例如:1ms)产生中断.
4.
Timer2模块内的PR2寄存器用于保存时间周期值.
此周期必须初始化为大于1ms的值,以使Timer2在Timer1中断之前不会超时.
5.
在Timer1中断处理程序内保存Timer2的TMR2值.
此值代表着在1ms的SOSC周期内经过的CPU时钟周期数.
如果时钟周期数超出了定义的边界范围,那么该函数将设置错误标志.
例如,以下参数用于计算dsPIC30F器件的CLK_MIN_TIME和CLK_MAX_TIME值:POSC:XT_PLL8FOSC:7.
37MHz*8FCY:FOSC/4:(7.
37*10^6*8)/4FCY:14740000SOSC:32kHzTimer1周期寄存器(PR1):31因此,若容差为4%,则在1ms内的CPU时钟周期数(14740个周期)为:CLK_MIN_TIME:14150CLK_MAX_TIME:15330头文件SSL_ClockTest.
hSSL_ClockSwitch.
h只有在使用PIC24F器件时才需要此文件原型unsignedintSSL_16bitsFamily_CLOCKtest(void);参数无.
返回值CLOCK_NO_ERRORCPU时钟在指定范围内工作CLOCK_ERRORCPU时钟未在指定范围内工作注解无.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第43页AN1229SSL_16bitsFamily_CLOCKtest(续)源文件SSL_ClockTest.
c表27:资源需求参数需求程序存储器387个字节堆栈8个字节执行时间30个周期AN1229DS01229C_CN第44页2009-2014MicrochipTechnologyInc.
SSL_16bitsFamily_CLOCKtest_LineFreq说明该函数执行线频率时钟测试.
它用于验证CPU时钟是否正常运行.
它通过执行以下步骤对IC1CON寄存器进行配置:1.
选择Timer2模块作为IC1的时基.
2.
每两个捕捉事件产生一次中断.
3.
在线频率的每个上升沿产生一次捕捉事件.
如果线频率为50Hz,那么IC1引脚在每20ms之后产生一次中断;如果线频率为60Hz,那么IC1引脚在每16.
66ms之后产生一次中断.
配置Timer2预分频器工作在1:8模式下,以使定时器在20ms/16.
66ms内不会超时.
在线频率的每个上升沿产生一次捕捉事件.
对于周期测量,在捕捉到两个时间标记(V1和V2)之后产生一次捕捉中断(见图6).
使用以下公式计算时钟周期总数:时钟周期总数=定时器计数值*定时器预分频值.
如果时钟周期数超出了定义的边界范围,那么该函数将设置错误标志.
头文件SSL_ClockTest_LineFreq.
hSSL_ClockSwitch.
h只有在使用PIC24F器件时才需要此文件原型intSSL_16bitsFamily_CLOCKtest_LineFreq();参数无.
返回值CLOCK_NO_ERRORCPU时钟在指定范围内工作CLOCK_ERRORCPU时钟未在指定范围内工作注解无.
源文件SSL_ClockTest_LineFreq.
c表28:资源需求参数需求程序存储器447个字节堆栈12个字节执行时间25个周期2009-2014MicrochipTechnologyInc.
DS01229C_CN第45页AN1229用于32位PICMCU的32位API函数本部分列出并介绍了PIC32MXB类安全软件库中可用于32位架构的API函数.
下面列出了这些函数,下文还将对其进行详细描述:SSL_32bitsFamily_CPU_RegisterTestSSL_32bitsFamily_PCtestSSL_32bitsFamily_Flashtest_CRC16SSL_32bitsFamily_RAMtest_MarchCSSL_32bitsFamily_RAM_STACKtest_MarchCSSL_32bitsFamily_RAMtest_MarchC_MinusSSL_32bitsFamily_RAMtest_MarchBSSL_32bitsFamily_RAMtest_CheckerBoardSSL_32bitsFamily_CLOCKtestSSL_32bitsFamily_CLOCKtest_LineFreqAN1229DS01229C_CN第46页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_CPU_RegisterTest说明该函数执行CPU寄存器测试.
首先测试寄存器0,将所有位清零.
对于所有其他寄存器(1-31),此测试向相应CPU寄存器依次写入值0x55555555和0xAAAAAAAA,然后再读取寄存器内容来进行验证.
如果返回值与先前存入的值不匹配,该函数会返回一个错误代码.
头文件SSL_CpuRegisterTest.
h原型intSSL_32bitsFamily_CPU_RegisterTest(void);参数无.
返回值CPU_REGISTER_TEST_FAIL测试失败.
某些CPU寄存器被检测到有固定位CPU_REGISTER_TEST_PASS测试通过.
CPU寄存器未检测到固定位注解该测试是一种非破坏性测试.
在调用该测试函数时,应禁止中断.
寄存器用法遵守标准C语言调用约定(请参见《MPLABC32C编译器用户指南》(DS51686A_CN)中的第5.
6节"函数调用约定").
在进入函数时,需要保存的所有寄存器内容将保存在堆栈中.
这些寄存器在完成测试时恢复.
在函数返回时,寄存器v0将包含返回代码.
源文件SSL_CPURegisterTest.
S表29:资源需求参数需求程序存储器2156个字节堆栈44个字节执行时间922个周期(11.
5s)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
2:协处理器0(CP0)寄存器未用该函数测试.
这些寄存器是配置和状态寄存器,修改其值可能对运行时的系统行为造成不良影响.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第47页AN1229SSL_32bitsFamily_PCtest说明该函数执行PC测试,它是PC的功能测试.
此测试检查PC寄存器是否固定且正确保存了要执行的下一条指令的地址.
此测试调用位于闪存内不同地址处的函数.
这些地址处的函数返回一个唯一值,该值为被调用函数的起始地址.
使用SSL_32bitsFamily_PCtest函数验证返回值.
提供的定制链接描述文件elf32pic32mx.
ld定义了这些函数在闪存中的存放地址.
头文件SSL_PcTest.
h原型intSSL_32bitsFamily_PCtest(void);参数无.
返回值PC_TEST_FAIL测试失败.
PC寄存器被检测到保存了错误的地址.
PC_TEST_PASS测试通过.
PC寄存器保存了正确的地址.
注解该测试使用三个不同函数:SSL_TestPCFunction1()SSL_TestPCFunction2()SSL_TestPCFunction3()用于运行时PC测试的这些函数的ROM单元可通过修改提供的elf32pic32mx.
ld文件来更改.
elf32pic32mx.
ld链接描述文件应添加到项目中.
源文件表30:资源需求参数需求程序存储器332个字节(调试编译)212个字节(-O3-fomit-frame-pointer)堆栈48个字节(调试编译)执行时间90个周期(1.
125s)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
AN1229DS01229C_CN第48页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_Flashtest_CRC16说明该函数利用标准线性反馈移位寄存器(LinearFeedbackShiftRegister,LFSR)实现来计算所提供存储区的16位CRC.
它计算起始地址和结束地址之间存储区的CRC,并返回CRC值.
使用提供的生成多项式和初始种子来计算16位CRC.
可选择不同的生成多项式.
头文件SSL_Flash_CRC.
h原型unsignedintSSL_32bitsFamily_Flashtest_CRC16(char*startAddress,char*endAddress,unsignedintcrcPoly,unsignedintcrcSeed);参数startAddress要计算CRC的存储区的起始地址endAddress要计算CRC的结束地址crcPoly要使用的生成多项式.
可以使用提供的标准多项式之一,也可使用其他用户定义的多项式.
crcSeedCRCLFSR的初始值.
通常建议值为0xFFFF.
返回值指定存储区计算得到的CRC值.
注解该测试对于其应用的存储区来说为非破坏性测试.
计算CRC值的起始地址和结束地址取决于具体PIC32器件和应用程序.
它们是运行时参数.
源文件SSL_FlashTest_CRC16.
c表31:资源需求参数需求程序存储器348个字节(调试编译)196个字节(-O3-fomit-frame-pointer)堆栈48个字节(调试编译)执行时间对于1024个字节的闪存CRC,为99264个周期(1240.
8s)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第49页AN1229SSL_32bitsFamily_RAMtest_MarchC说明该函数执行MarchC测试.
该测试执行32位字RAM存取.
待测RAM区域的地址必须为32位对齐,测试的RAM区域的大小必须为4的整数倍.
当控制从SSL_32bitsFamily_RAMtest_MarchC函数返回时,测试的RAM存储器将清零.
头文件SSL_MarchC.
h原型intSSL_32bitsFamily_RAMtest_MarchC(int*ramStartAddress,intramSize);参数ramStartAddress要执行MarchC测试的起始地址.
必须为32位正确对齐.
ramSize要执行测试的连续字节单元数.
大小必须是4的整数倍.
返回值MARCHC_TEST_PASS测试通过.
测试的RAM区域未检测到故障MARCHC_TEST_FAIL测试失败.
某些RAM区域单元检测到故障.
注解该测试是一种破坏性存储器测试.
不得对要保存的RAM区域执行测试;否则,在进行测试前/后,必须保存/恢复这些RAM区域.
另外,应在系统启动时在初始化存储器和运行时库之前进行该测试;然而,堆栈必须初始化.
应至少有100个字节可用于堆栈以执行MarchC测试.
测试的RAM区域不得覆盖堆栈.
该测试不应包括其他静态分配的资源,如MPLABICD或REALICE分配的RAM缓冲区.
执行MarchC测试的起始地址以及RAM区域的大小取决于具体PIC32器件和应用程序.
它们是运行时参数.
源文件SSL_MarchCRamTest.
c表32:资源需求参数需求程序存储器1304个字节(调试编译)724个字节(-O3-fomit-frame-pointer)堆栈100个字节(调试编译)执行时间对于1024个字节的RAM测试,为602228个周期(7.
52785ms)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
AN1229DS01229C_CN第50页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_RAM_STACKtest_MarchC说明该函数在RAM和堆栈区域上执行MarchC测试.
首先对RAM区域进行标准MarchC测试.
如果测试成功,则将要求测试的堆栈区域的内容复制到刚进行过测试的RAM区域,然后对堆栈区域进行MarchC测试,就好像它是一个正常的RAM区域一样.
恢复保存的堆栈区域的内容,测试结果返回给用户.
该测试执行32位字RAM存取.
待测RAM区域和堆栈区域的地址必须为32位对齐,测试区域的大小必须为4的整数倍.
当控制从SSL_32bitsFamily_RAM_STACKtest_MarchC函数返回时,测试的RAM存储器将清零.
头文件SSL_MarchC.
h原型intSSL_32bitsFamily_RAM_STACKtest_MarchC(int*ramStartAddress,intramSize,int*stackTopAddress,intstackSize);参数ramStartAddress要执行MarchC测试的RAM区域的起始地址.
不得覆盖堆栈区域!
必须为32位正确对齐.
ramSize要执行测试的连续字节单元数.
大小必须是4的整数倍.
测试的RAM区域的大小必须大于100个字节.
stackTopAddress要执行MarchC测试的堆栈区域顶部的地址.
请注意,假设堆栈向下增长.
这不得覆盖RAM区域.
必须为32位正确对齐.
stackSize要执行测试的堆栈区域的连续字节单元数.
大小必须是4的整数倍,且必须小于RAM大小.
返回值MARCHC_TEST_PASS测试通过.
测试的RAM和堆栈区域未检测到故障.
MARCHC_TEST_FAIL测试失败.
某些RAM或堆栈区域单元检测到故障.
MARCHC_TEST_FAIL_SIZE测试失败.
RAM区域没有足够空间来保存堆栈区域的内容.
MARCHC_TEST_FAIL_STACK测试失败.
要求测试的堆栈区域实际上没有包括当前硬件SP寄存器.
注解RAM和堆栈区域不得重叠.
堆栈向下增长,因此,测试区域为:[stackTopAddress-stackSize,stackTopAddress]在测试堆栈区域时,处理器SP寄存器改为指向RAM区域.
待测堆栈区域大小必须小于RAM区域的大小.
由于进行MarchCRAM和堆栈测试需要至少128字节的堆栈,这意味着测试的RAM区域的大小至少应为128字节长.
在测试完堆栈区域后,SP寄存器恢复.
该测试是一种破坏性存储器测试.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第51页AN1229SSL_32bitsFamily_RAM_STACKtest_MarchC(续)不得对要保存的RAM区域执行测试;否则,在进行测试前/后,必须保存/恢复这些RAM区域.
另外,应在系统启动时在初始化存储器和运行时库之前进行该测试;然而,堆栈必须初始化.
应至少有128个字节可用于堆栈以执行MarchC测试.
测试的RAM区域不得覆盖堆栈.
该测试不应包括其他静态分配的资源,如MPLABICD或REALICE分配的RAM缓冲区.
待测RAM和堆栈区域的起始地址和这些区域的大小取决于具体PIC32MX器件和应用程序.
它们是运行时参数.
寄存器用法遵守标准C语言调用约定(请参见《MPLABC32C编译器用户指南》(DS51686A_CN)中的第5.
6节"函数调用约定").
在函数返回时,寄存器v0将包含返回代码.
源文件SSL_MarchCStackTest.
S表33:资源需求参数需求程序存储器1572个字节(调试编译)992个字节(-O3-fomit-frame-pointer)堆栈128个字节(调试编译)执行时间对于1024个字节的RAM+1024个字节的堆栈测试,为1208616个周期(15.
1077ms)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
AN1229DS01229C_CN第52页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_RAMtest_MarchC_Minus说明该函数执行MarchC-测试.
该测试执行32位字RAM存取.
待测RAM区域的地址必须为32位对齐,测试的RAM区域的大小必须为4的整数倍.
当控制从SSL_32bitsFamily_RAMtest_MarchC_Minus函数返回时,测试的RAM存储器将清零.
头文件SSL_MarchC.
h原型intSSL_32bitsFamily_RAMtest_MarchC_Minus(int*ramStartAddress,intramSize);参数ramStartAddress要执行MarchC-测试的起始地址.
必须为32位正确对齐.
ramSize要执行测试的连续字节单元数.
大小必须是4的整数倍.
返回值MARCHC_TEST_PASS测试通过.
测试的RAM区域未检测到故障.
MARCHC_TEST_FAIL测试失败.
某些RAM区域单元检测到故障.
注解该测试是一种破坏性存储器测试.
不得对要保存的RAM区域执行测试;否则,在进行测试前/后,必须保存/恢复这些RAM区域.
另外,应在系统启动时在初始化存储器和运行时库之前进行该测试;然而,堆栈必须初始化.
应至少有100个字节可用于堆栈以执行MarchC-测试.
测试的RAM区域不得覆盖堆栈.
该测试不应包括其他静态分配的资源,如MPLABICD或REALICE分配的RAM缓冲区.
执行MarchC-测试的起始地址以及RAM区域的大小取决于具体PIC32器件和应用程序.
它们是运行时参数.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第53页AN1229SSL_32bitsFamily_RAMtest_MarchC_Minus(续)源文件SSL_MarchCRamTest.
c表34:资源需求参数需求程序存储器1304个字节(调试编译)724个字节(-O3-fomit-frame-pointer)堆栈100个字节(调试编译)执行时间对于1024个字节的RAM测试,为526956个周期(6.
58695ms)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
AN1229DS01229C_CN第54页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_RAMtest_MarchB说明该函数执行MarchB测试.
该测试执行32位字RAM存取.
待测RAM区域的地址必须为32位对齐,测试的RAM区域的大小必须为4的整数倍.
当控制从SSL_32bitsFamily_RAMtest_MarchB函数返回时,测试的RAM存储器将清零.
头文件SSL_MarchB.
h原型intSSL_32bitsFamily_RAMtest_MarchB(int*ramStartAddress,intramSize);参数ramStartAddress要执行MarchB测试的起始地址.
必须为32位对齐.
ramSize要执行测试的连续字节单元数.
大小必须是4的整数倍.
返回值MARCHB_TEST_PASS测试通过.
测试的RAM区域未检测到故障.
MARCHB_TEST_FAIL测试失败.
某些RAM区域单元检测到故障.
注解该测试是一种破坏性存储器测试.
不得对要保存的RAM区域执行该测试;否则,在进行测试前/后,必须保存/恢复这些RAM区域.
另外,应在系统启动时在初始化存储器和运行时库之前进行该测试;然而,堆栈必须初始化.
应至少有100个字节可用于堆栈以执行MarchB测试.
测试的RAM区域不得覆盖堆栈.
该测试不应包括其他静态分配的资源,如MPLABICD或REALICE分配的RAM缓冲区.
执行MarchB测试的起始地址以及RAM区域的大小取决于具体PIC32器件和应用程序.
它们是运行时参数.
源文件SSL_MarchBRamTest.
c表35:资源需求参数需求程序存储器1540个字节(调试编译)612个字节(-O3-fomit-frame-pointer)堆栈100个字节(调试编译)执行时间对于1024个字节的RAM测试,为737622个周期(9.
220275ms)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第55页AN1229SSL_32bitsFamily_RAMtest_CheckerBoard说明该函数在RAM存储器上执行Checkerboard测试.
它将棋盘格图样(0x55555555后跟0xAAAAAAAA)写入从ramStartAddress开始的相邻存储单元.
它执行下列步骤:1.
将待测64字节存储块的内容保存到临时CPU寄存器中.
2.
将图样0x55555555后跟0xAAAAAAAA写入相邻存储单元,直到填满64字节存储块.
3.
它读取存储块相邻单元,检查读回的值是否与写入的图样匹配.
如果值匹配,则设置成功结果,转到第4步;否则,设置错误结果,转到第6步.
4.
将翻转后的图样0xAAAAAAAA后跟0x55555555写入相邻存储单元,直至填满64字节存储块.
5.
它读取存储块相邻单元,检查读回的值是否与写入的图样匹配.
如果值匹配,则设置成功结果;否则,设置错误结果.
6.
从临时CPU寄存器恢复测试的64字节存储块的内容.
7.
如果结果显示错误,则测试完成并返回.
8.
地址指针递增1,指向下一个顺序64字节存储块,从第1步重复测试,直到所有要求的存储单元完成测试.
头文件SSL_CBram.
h原型intSSL_32bitsFamily_RAMtest_CheckerBoard(int*ramStartAddress,intramSize);参数ramStartAddress要执行Checkerboard测试的起始地址.
必须为32位正确对齐.
ramSize要执行测试的连续字节单元数.
大小必须是64的整数倍.
返回值CB_TEST_PASS测试通过.
测试的RAM区域未检测到固定位.
CB_TEST_FAIL测试失败.
某些RAM区域单元检测到固定位.
注解该测试是一种非破坏性存储器测试.
可保存和恢复测试存储区的内容.
测试每次在64字节长的存储块内进行.
应至少有32个字节可用于堆栈以执行RAMCheckerBoard测试.
测试的RAM区域不得覆盖堆栈.
执行Checkerboard测试的起始地址以及RAM区域的大小取决于具体PIC32器件和应用程序.
它们是运行时参数.
程序每次从RAM存取一个4字节字.
寄存器用法遵守标准C语言调用约定(请参见《MPLABC32C编译器用户指南》(DS51686A_CN)中的第5.
6节"函数调用约定").
AN1229DS01229C_CN第56页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_RAMtest_CheckerBoard(续)在进入函数时,需要保存的所有寄存器内容将保存在堆栈中.
这些寄存器在完成测试时恢复.
在函数返回时,寄存器v0将包含返回代码.
源文件SSL_CheckerBoardTest.
S表36:资源需求参数需求程序存储器776个字节堆栈32个字节执行时间对于1024个字节的RAM测试,为3412个周期(42.
65s)(1)注1:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第57页AN1229SSL_32bitsFamily_CLOCKtest说明CPU时钟测试用于验证系统时钟是否在规定限值内.
SOSC用作参考时钟.
该函数监视运行在CPU系统时钟下的CPU内核定时器.
该测试执行以下主要步骤:1.
SOSC用作独立时钟源/参考时钟源,与硬件Timer1相连.
2.
该测量中监视的CPU内核定时器每隔1个CPU系统时钟递增1.
3.
系统通常运行在作为CPU时钟源的带PLL的POSC下.
然而,除作为参考时钟源的SOSC本身外的任何CPU时钟源对该测试有效.
4.
Timer1配置为在指定的时间间隔(如10ms)后超时.
5.
Timer1启动后,在测量开始时保存内核定时器的内容.
6.
当硬件Timer1超时时,获得内核定时器的另一个读数,并取其与初始值的差.
该差值代表着内核定时器在SOSC周期内计数的CPU时钟周期数.
7.
如果该值超出了定义的边界限值,该函数返回一个相应的错误值,指明违反了哪个具体限值(上限/下限).
头文件SSL_ClockTest.
h原型intSSL_32bitsFamily_CLOCKtest(unsignedintsysClk,intnMs,inthiClkErr,intloClkErr);参数sysClk当前系统运行频率(Hz)nMs用于CPU时钟监视的毫秒数(1≤nMs≤1000)hiClkErr系统时钟误差上限(Hz).
监视值大于(sysClk+hiClkErr)时将触发返回CLOCK_TEST_FAIL_HI错误代码.
loClkErr系统时钟误差下限(Hz).
监视值小于(sysClk-loClkErr)时将触发返回CLOCK_TEST_FAIL_LOW错误代码.
返回值CLOCK_TEST_PASS测试通过.
监视的CPU时钟在要求的限值内.
CLOCK_TEST_FAIL_HI测试失败.
监视的CPU时钟大于规定的上限.
CLOCK_TEST_FAIL_LOW测试失败.
监视的CPU时钟小于规定的下限.
注解该测试使用硬件Timer1.
它根据需要初始化定时器,在测试完成后,关闭定时器.
不保存/恢复Timer1的先前状态.
该测试假设,使能内核定时器,并像正常系统操作中那样线性向上计数.
如果应用程序代码明确禁止内核定时器,应在调用测试前使能该定时器.
另外,如果内核定时器的值作为ISR的一部分发生更新/更改,则应禁止该ISR.
在执行该测试时,应禁止中断,因为ISR花费的时间将影响该程序的准确时序.
AN1229DS01229C_CN第58页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_CLOCKtest(续)SOSC用作参考时钟.
与该输入相连的信号/晶振的频率通过CLOCK_TEST_SOSC_FREQ符号定义.
由于使用硬件Timer1(16位定时器),CPU时钟监视时间的值nMs受限.
因此,装入该Timer1寄存器的值不应超过216-1.
源文件SSL_ClockTest.
c表37:资源需求参数需求程序存储器768个字节(调试编译)528个字节(-O3-fomit-frame-pointer)堆栈100个字节(调试编译)执行时间对于100ms测量,为16012192个周期(200.
1524ms)(1,2)注1:最大执行时间是程序执行时间+2个SOSC信号周期(1个周期为测量时间+同步时间).
2:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
2009-2014MicrochipTechnologyInc.
DS01229C_CN第59页AN1229SSL_32bitsFamily_CLOCKtest_LineFreq说明CPU时钟线测试用于验证系统时钟是否在规定限值内.
施加在输入捕捉1引脚(IC1)上的外部频率用作参考时钟.
运行在系统外设总线(PeripheralBus,PB)时钟下的硬件Timer2用于监视CPU时钟和外设总线分频器.
该测试执行以下主要步骤:1.
IC1输入用作独立时钟源/参考时钟源,以捕捉硬件Timer2.
外部参考频率(通常是线频率)必须施加到IC1输入引脚上.
2.
输入捕捉1配置如下:选择Timer2作为IC1的时基.
在每个上升沿进行捕捉每两次捕捉产生一个捕捉完成事件3.
硬件Timer2预分频值尽可能按最小的分频值计算(根据输入参考频率和当前PB频率),以使16位Timer2在输入参考信号周期内不会溢出.
这样,就可在给定条件下获得最佳分辨率.
如果未获得有效的预分频值,则返回一个错误值(Timer2的最大分频值是256).
4.
IC1在输入参考频率的每个上升沿执行捕捉.
对于周期测量,在IC1模块捕捉两个时间标记之后(即每个输入参考周期之后(如果参考频率为50Hz,则为20ms,如果参考频率为60Hz,则为16.
66ms))产生一次捕捉完成事件.
5.
在产生捕捉完成事件后,获取两个Timer2捕捉读数,并通过两个读数之差乘以Timer2预分频值来计算经过的PB时钟数.
如果该值超出了定义的边界限值,该函数将返回一个相应的错误值,指明违反了哪个具体限值(上限/下限).
计算示例1:系统时钟=80MHzPB时钟=80MHz(PB分频比=1:1)输入参考=50HzT2最小分频值=floor(PBclk/(65536*RefClk))+1=25实际T2分频值=32Timer2在参考时钟周期内计数的周期数=(80,000,000/32)/50=50,000.
计算示例2:系统时钟=80MHzPB时钟=10MHz(PB分频值=1:8)输入参考=60HzT2最小分频值=floor(PBclk/(65536*RefClk))+1=3实际T2分频值=4Timer2在参考时钟周期内计数的周期数=(10,000,000/4)/60=41,666.
头文件SSL_ClockTest_LineFreq.
h原型intSSL_32bitsFamily_CLOCKtest_LineFreq(unsignedintsysClk,unsignedintlineRefClk,inthiClkErr,intloClkErr);AN1229DS01229C_CN第60页2009-2014MicrochipTechnologyInc.
SSL_32bitsFamily_CLOCKtest_LineFreq(续)参数sysClk当前系统运行频率(Hz)lineRefClk施加在IC1输入引脚上的参考频率(Hz).
常用值为50/60HzhiClkErr系统时钟误差上限(Hz).
监视值大于(sysClk+hiClkErr)时将触发返回CLOCK_TEST_FAIL_HI错误代码.
loClkErr系统时钟误差下限(Hz).
监视值小于(sysClk-loClkErr)时将触发返回CLOCK_TEST_FAIL_LOW错误代码.
返回值CLOCK_TEST_PASS测试通过.
监视的CPU时钟在要求的限值内.
CLOCK_TEST_FAIL_HI测试失败.
监视的CPU时钟大于规定的上限.
CLOCK_TEST_FAIL_LOW测试失败.
监视的CPU时钟小于规定的下限.
CLOCK_TEST_FAIL_LOW_REF测试失败.
提供的参考频率太低,不能使用.
注解该测试使用硬件输入捕捉1模块.
它根据需要初始化模块,在测试完成后,关闭模块.
不保存/恢复IC1的先前状态.
该测试使用硬件Timer2.
它根据需要初始化定时器,在测试完成后,关闭定时器.
不保存/恢复Timer1的先前状态.
用作Timer2输入的PB频率值通过使用PB分频器将系统CPU时钟分频得到.
该测试不改变PB分频器的值,它使用当前值.
在执行该测试时,应禁止中断,因为ISR花费的时间将影响该程序的准确时序.
用作IC1输入参考的信号频率通常应为线频率.
然而,任何频率均可使用,只要能获得有效的Timer2分频值(关于16位Timer2,请参见下面的计算示例).
如果参考频率太低,就不可能获得Timer2的有效分频值(Timer2的最大分频值是256).
在这种情况下,必须选择较大的PB分频值.
如果选择的参考频率太高,Timer2捕捉计数将太小,测量的分辨率将不够.
源文件SSL_ClockTest_LineFreq.
c2009-2014MicrochipTechnologyInc.
DS01229C_CN第61页AN1229表38:资源需求参数需求程序存储器796个字节(调试编译)488个字节(-O3-fomit-frame-pointer)堆栈48个字节(调试编译)执行时间对于50Hz参考频率,为4198140个周期(52.
47675ms)(1,2)注1:最大执行时间是程序执行时间+3个参考信号周期(2个周期为测量时间+同步时间).
2:根据系统设置和编译参数,CPU周期数的值可能会有很大变化.
所有执行时间测量均是在以下设置下完成:80MHz,两个闪存等待状态,零RAM等待状态,使能预取和高速缓存,禁止PBDIV=1:1中断和DMA.
编译:MPLABC32V1.
10(b)发行版-O3-fomit-frame-pointer.
AN1229DS01229C_CN第62页2009-2014MicrochipTechnologyInc.
总结该应用笔记介绍了如何实现IEC60730标准提出的各种诊断测量.
这些测量确保了B类受控设备的安全运行.
另外,该应用笔记也介绍了B类安全软件库中可用的各种API.
这些API可被直接集成到最终用户应用程序中以测试和验证控制器的关键功能,并旨在通过故障检测最大限度地提高应用程序的可靠性.
当在dsPICDSC或PICMCU单片机上执行时,这些API有助于应用程序满足IEC60730标准的要求.
Microchip已经开发了B类安全软件库来帮助您实现安全软件程序.
如果需要更多的支持,请联系Microchip销售代表或应用工程师.
参考文献IEC60730标准,"AutomaticElectricalControlsforHouseholdandSimilarUse",IEC60730-13.
2版本,2007年3月Bushnell,M.
,Agarwal,V.
"EssentialsofElectronicTestingforDigital,Memory,andMixed-SignalVLSICircuits"NewYork:Springer,2000年第一版,2005年第2次印刷修订版Wu,C.
"MemoryTesting"Wu,C.
"RAMFaultModelsandMemoryTesting"Suk,D.
S.
和Reddy,S.
M.
"AMarchTestforFunctionalFaultsinSemiconductorRandom-AccessMemories",lEEETrans.
Computers,Vol.
C-30,No.
12,1981,pp.
982-9852009-2014MicrochipTechnologyInc.
DS01229C_CN第63页AN1229附录A:源代码本应用笔记中的所有软件均以单个WinZip压缩文件的形式提供.
可从如下Microchip公司的网站下载此压缩文件:www.
microchip.
com软件许可协议MicrochipTechnologyIncorporated(以下简称"本公司")在此提供的软件旨在向本公司客户提供专门用于Microchip生产的产品的软件.
本软件为本公司和/或其供应商所有,并受到适用的版权法保护.
版权所有.
使用时违反前述约束的用户可能会依法受到刑事制裁,并可能由于违背本许可的条款和条件而承担民事责任.
本软件是按"现状"提供的.
任何形式的保证,无论是明示的、暗示的或法定的,包括但不限于有关适销性和特定用途的暗示保证,均不适用于本软件.
对于在任何情况下、因任何原因造成的特殊的、附带的或间接的损害,本公司概不负责.
AN1229DS01229C_CN第64页2009-2014MicrochipTechnologyInc.
附录B:IEC60730-1表H.
11.
12.
7下表的复制获得了国际电工委员会(IEC)的允许.
IEC60730-1ed.
3.
2"版权所有2007IEC,瑞士日内瓦.
www.
iec.
ch".
表B-1:H.
11.
12.
72009-2014MicrochipTechnologyInc.
DS01229C_CN第65页AN1229表B-1:H.
11.
12.
7(续)AN1229DS01229C_CN第66页2009-2014MicrochipTechnologyInc.
表B-1:H.
11.
12.
7(续)2009-2014MicrochipTechnologyInc.
DS01229C_CN第67页AN1229表B-1:H.
11.
12.
7(续)AN1229DS01229C_CN第68页2009-2014MicrochipTechnologyInc.
表B-1:H.
11.
12.
7(续)2009-2014MicrochipTechnologyInc.
DS01229C_CN第69页AN1229附录C:版本历史版本A(2008年11月)这是本应用笔记的初始版本.
版本B(2010年5月)整个文档添加了关于32位PIC单片机的信息,包括下列新函数:SSL_32bitsFamily_CPU_RegisterTestSSL_32bitsFamily_PCtestSSL_32bitsFamily_Flashtest_CRC16SSL_32bitsFamily_RAMtest_MarchCSSL_32bitsFamily_RAM_STACKtest_MarchCSSL_32bitsFamily_RAMtest_MarchC_MinusSSL_32bitsFamily_RAMtest_MarchBSSL_32bitsFamily_RAMtest_CheckerBoardSSL_32bitsFamily_CLOCKtestSSL_32bitsFamily_CLOCKtest_LineFreq版本C(2012年4月)增加了8位信息.
AN1229DS01229C_CN第70页2009-2014MicrochipTechnologyInc.
注:2009-2014MicrochipTechnologyInc.
DS01229C_CN第71页QUALITYMANAGEMENTSYSTEMCERTIFIEDBYDNV==ISO/TS16949==请注意以下有关Microchip器件代码保护功能的要点:Microchip的产品均达到Microchip数据手册中所述的技术指标.
Microchip确信:在正常使用的情况下,Microchip系列产品是当今市场上同类产品中最安全的产品之一.
目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为.
就我们所知,所有这些行为都不是以Microchip数据手册中规定的操作规范来使用Microchip产品的.
这样做的人极可能侵犯了知识产权.
Microchip愿与那些注重代码完整性的客户合作.
Microchip或任何其他半导体厂商均无法保证其代码的安全性.
代码保护并不意味着我们保证产品是"牢不可破"的.
代码保护功能处于持续发展中.
Microchip承诺将不断改进产品的代码保护功能.
任何试图破坏Microchip代码保护功能的行为均可视为违反了《数字器件千年版权法案(DigitalMillenniumCopyrightAct)》.
如果这种行为导致他人在未经授权的情况下,能访问您的软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为.
提供本文档的中文版本仅为了便于理解.
请勿忽视文档中包含的英文部分,因为其中提供了有关Microchip产品性能和使用情况的有用信息.
MicrochipTechnologyInc.
及其分公司和相关公司、各级主管与员工及事务代理机构对译文中可能存在的任何差错不承担任何责任.
建议参考MicrochipTechnologyInc.
的英文原版文档.
本出版物中所述的器件应用信息及其他类似内容仅为您提供便利,它们可能由更新之信息所替代.
确保应用符合技术规范,是您自身应负的责任.
Microchip对这些信息不作任何明示或暗示、书面或口头、法定或其他形式的声明或担保,包括但不限于针对其使用情况、质量、性能、适销性或特定用途的适用性的声明或担保.
Microchip对因这些信息及使用这些信息而引起的后果不承担任何责任.
如果将Microchip器件用于生命维持和/或生命安全应用,一切风险由买方自负.
买方同意在由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障Microchip免于承担法律责任,并加以赔偿.
在Microchip知识产权保护下,不得暗中或以其他方式转让任何许可证.
商标Microchip的名称和徽标组合、Microchip徽标、dsPIC、FlashFlex、KEELOQ、KEELOQ徽标、MPLAB、PIC、PICmicro、PICSTART、PIC32徽标、rfPIC、SST、SST徽标、SuperFlash和UNI/O均为MicrochipTechnologyInc.
在美国和其他国家或地区的注册商标.
FilterLab、Hampshire、HI-TECHC、LinearActiveThermistor、MTP、SEEVAL和TheEmbeddedControlSolutionsCompany均为MicrochipTechnologyInc.
在美国的注册商标.
SiliconStorageTechnology为MicrochipTechnologyInc.
在除美国外的国家或地区的注册商标.
Analog-for-the-DigitalAge、ApplicationMaestro、BodyCom、chipKIT、chipKIT徽标、CodeGuard、dsPICDEM、dsPICDEM.
net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-CircuitSerialProgramming、ICSP、Mindi、MiWi、MPASM、MPF、MPLABCertified徽标、MPLIB、MPLINK、mTouch、OmniscientCodeGeneration、PICC、PICC-18、PICDEM、PICDEM.
net、PICkit、PICtail、REALICE、rfLAB、SelectMode、SQI、SerialQuadI/O、TotalEndurance、TSHARC、UniWinDriver、WiperLock、ZENA和Z-Scale均为MicrochipTechnologyInc.
在美国和其他国家或地区的商标.
SQTP是MicrochipTechnologyInc.
在美国的服务标记.
GestIC和ULPP为MicrochipTechnologyInc.
的子公司MicrochipTechnologyGermanyIIGmbH&Co.
&KG在除美国外的国家或地区的注册商标.
在此提及的所有其他商标均为各持有公司所有.
2009-2014,MicrochipTechnologyInc.
版权所有.
ISBN:978-1-62077-807-4MicrochipreceivedISO/TS-16949:2009certificationforitsworldwideheadquarters,designandwaferfabricationfacilitiesinChandlerandTempe,Arizona;Gresham,OregonanddesigncentersinCaliforniaandIndia.
TheCompany'squalitysystemprocessesandproceduresareforitsPICMCUsanddsPICDSCs,KEELOQcodehoppingdevices,SerialEEPROMs,microperipherals,nonvolatilememoryandanalogproducts.
Inaddition,Microchip'squalitysystemforthedesignandmanufactureofdevelopmentsystemsisISO9001:2000certified.
DS01229C_CN第72页2009-2014MicrochipTechnologyInc.
全球销售及服务网点美洲公司总部CorporateOffice2355WestChandlerBlvd.
Chandler,AZ85224-6199Tel:1-480-792-7200Fax:1-480-792-7277技术支持:http://www.
microchip.
com/support网址:www.
microchip.
com亚特兰大AtlantaDuluth,GATel:1-678-957-9614Fax:1-678-957-1455奥斯汀Austin,TXTel:1-512-257-3370波士顿BostonWestborough,MATel:1-774-760-0087Fax:1-774-760-0088芝加哥ChicagoItasca,ILTel:1-630-285-0071Fax:1-630-285-0075克里夫兰ClevelandIndependence,OHTel:1-216-447-0464Fax:1-216-447-0643达拉斯DallasAddison,TXTel:1-972-818-7423Fax:1-972-818-2924底特律DetroitNovi,MITel:1-248-848-4000休斯敦Houston,TXTel:1-281-894-5983印第安纳波利斯IndianapolisNoblesville,INTel:1-317-773-8323Fax:1-317-773-5453洛杉矶LosAngelesMissionViejo,CATel:1-949-462-9523Fax:1-949-462-9608纽约NewYork,NYTel:1-631-435-6000圣何塞SanJose,CATel:1-408-735-9110加拿大多伦多TorontoTel:1-905-673-0699Fax:1-905-673-6509亚太地区亚太总部AsiaPacificOfficeSuites3707-14,37thFloorTower6,TheGatewayHarbourCity,KowloonHongKongTel:852-2401-1200Fax:852-2401-3431中国-北京Tel:86-10-8569-7000Fax:86-10-8528-2104中国-成都Tel:86-28-8665-5511Fax:86-28-8665-7889中国-重庆Tel:86-23-8980-9588Fax:86-23-8980-9500中国-杭州Tel:86-571-2819-3187Fax:86-571-2819-3189中国-香港特别行政区Tel:852-2943-5100Fax:852-2401-3431中国-南京Tel:86-25-8473-2460Fax:86-25-8473-2470中国-青岛Tel:86-532-8502-7355Fax:86-532-8502-7205中国-上海Tel:86-21-5407-5533Fax:86-21-5407-5066中国-沈阳Tel:86-24-2334-2829Fax:86-24-2334-2393中国-深圳Tel:86-755-8864-2200Fax:86-755-8203-1760中国-武汉Tel:86-27-5980-5300Fax:86-27-5980-5118中国-西安Tel:86-29-8833-7252Fax:86-29-8833-7256中国-厦门Tel:86-592-238-8138Fax:86-592-238-8130中国-珠海Tel:86-756-321-0040Fax:86-756-321-0049亚太地区台湾地区-高雄Tel:886-7-213-7830台湾地区-台北Tel:886-2-2508-8600Fax:886-2-2508-0102台湾地区-新竹Tel:886-3-5778-366Fax:886-3-5770-955澳大利亚Australia-SydneyTel:61-2-9868-6733Fax:61-2-9868-6755印度India-BangaloreTel:91-80-3090-4444Fax:91-80-3090-4123印度India-NewDelhiTel:91-11-4160-8631Fax:91-11-4160-8632印度India-PuneTel:91-20-3019-1500日本Japan-OsakaTel:81-6-6152-7160Fax:81-6-6152-9310日本Japan-TokyoTel:81-3-6880-3770Fax:81-3-6880-3771韩国Korea-DaeguTel:82-53-744-4301Fax:82-53-744-4302韩国Korea-SeoulTel:82-2-554-7200Fax:82-2-558-5932或82-2-558-5934马来西亚Malaysia-KualaLumpurTel:60-3-6201-9857Fax:60-3-6201-9859马来西亚Malaysia-PenangTel:60-4-227-8870Fax:60-4-227-4068菲律宾Philippines-ManilaTel:63-2-634-9065Fax:63-2-634-9069新加坡SingaporeTel:65-6334-8870Fax:65-6334-8850泰国Thailand-BangkokTel:66-2-694-1351Fax:66-2-694-1350欧洲奥地利Austria-WelsTel:43-7242-2244-39Fax:43-7242-2244-393丹麦Denmark-CopenhagenTel:45-4450-2828Fax:45-4485-2829法国France-ParisTel:33-1-69-53-63-20Fax:33-1-69-30-90-79德国Germany-DusseldorfTel:49-2129-3766400德国Germany-MunichTel:49-89-627-144-0Fax:49-89-627-144-44德国Germany-PforzheimTel:49-7231-424750意大利Italy-MilanTel:39-0331-742611Fax:39-0331-466781意大利Italy-VeniceTel:39-049-7625286荷兰Netherlands-DrunenTel:31-416-690399Fax:31-416-690340波兰Poland-WarsawTel:48-22-3325737西班牙Spain-MadridTel:34-91-708-08-90Fax:34-91-708-08-91瑞典Sweden-StockholmTel:46-8-5090-4654英国UK-WokinghamTel:44-118-921-5800Fax:44-118-921-582010/28/13
关于Linode,这是一家运营超过18年的VPS云主机商家,产品支持随时删除(按小时计费),可选包括美国、英国、新加坡、日本、印度、加拿大、德国等全球十多个数据中心,最低每月费用5美元($0.0075/小时)起。目前,注册Linode的新用户添加付款方式后可以获得100美元赠送,有效期为60天,让更多新朋友可以体验Linode的产品和服务。Linode的云主机产品分为几类,下面分别列出几款套餐配置...
racknerd怎么样?racknerd今天发布了几款美国特价独立服务器的促销,本次商家主推高配置的服务器,各个配置给的都比较高,有Intel和AMD两种,硬盘也有NVMe和SSD等多咱组合可以选择,机房目前有夏洛特、洛杉矶、犹他州可以选择,性价比很高,有需要独服的朋友可以看看。点击进入:racknerd官方网站RackNerd暑假独服促销:CPU:双E5-2680v3 (24核心,48线程)内存...
Pia云是一家2018的开办的国人商家,原名叫哔哔云,目前整合到了魔方云平台上,商家主要销售VPS服务,采用KVM虚拟架构 ,机房有美国洛杉矶、中国香港和深圳地区,洛杉矶为crea机房,三网回程CN2 GIA,带20G防御,常看我测评的朋友应该知道,一般带防御去程都是骨干线路,香港的线路也是CN2直连大陆,目前商家重新开业,价格非常美丽,性价比较非常高,有需要的朋友可以关注一下。活动方案...
5555se.com为你推荐
梦之队官网梦之队是什么呢?是那个国家的呢?他们又是参加那个项目的呢?得了几块金牌呢?广东GDP破10万亿想知道广东城市的GDP排名长尾关键词挖掘工具外贸长尾关键词挖掘工具哪个好用125xx.comwww.free.com 是官方网站吗?杨丽晓博客杨丽晓是怎么 出道的ww.66bobo.com有的网址直接输入***.com就行了,不用WWW, 为什么?www.15job.com南方人才市场有官方网站是什么?www.175qq.com最炫的qq分组175qq.com查询QQ登录地址175qq.comhttp://www.qq10008.com/这个网页是真的吗?
深圳网站空间 广东vps google电话 美国主机评测 便宜域名 256m内存 私人服务器 10t等于多少g 贵州电信宽带测速 php免费空间 七夕促销 刀片式服务器 adroit 泉州移动 域名和空间 metalink 微软服务器操作系统 银盘服务是什么 备案空间 SmartAXMT800 更多