吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

雅特力AT32 IEC 60730 Class B軟件庫(kù)使用指南

雅特力 AT32 MCU ? 2024-05-20 08:15 ? 次閱讀

概述

IEC60730的附錄H(H.2.22)中對(duì)軟件進(jìn)行了分類
A類軟件:軟件僅實(shí)現(xiàn)產(chǎn)品的功能,不涉及產(chǎn)品的安全控制。B類軟件:軟件的設(shè)計(jì)要防止電子設(shè)備的不安全操作。C類軟件:軟件的設(shè)計(jì)為了避免某些特殊的危險(xiǎn)。本文主要介紹針對(duì)其中B類軟件而開發(fā)的CLASSB軟件包,安全庫(kù)相關(guān)代碼基本是獨(dú)立于芯片外設(shè)IP,軟件包中各型號(hào)的example都是基于AT-START開發(fā)板,其余暫未支持型號(hào)用戶可自行參考移植。

軟件庫(kù)總體架構(gòu)

Class B檢測(cè)診斷庫(kù)軟件包,基于AT32芯片的V2版本固件庫(kù)的文件夾結(jié)構(gòu),刪除了原固件庫(kù)中的demo、middlewares、dsp lib等IEC60730不需要的部分,添加集成IEC60730安全檢測(cè)相關(guān)代碼。軟件包文件夾總體結(jié)構(gòu)框架如下表:
表1.Class B軟件包文件夾結(jié)構(gòu)0a693ddc-163e-11ef-bebc-92fbcf53809c.pngSTL軟件由芯片外設(shè)驅(qū)動(dòng)libraries、class b STL和user application組成,其中class b STL分為兩個(gè)主要部分:?jiǎn)?dòng)時(shí)檢測(cè)和運(yùn)行時(shí)周期檢測(cè),架構(gòu)整體框圖如下:表2.軟件架構(gòu)整體框圖0a908586-163e-11ef-bebc-92fbcf53809c.png

軟件庫(kù)設(shè)計(jì)

本章節(jié)介紹STL例程通用的基本原理,并對(duì)工程結(jié)構(gòu)以及配置和調(diào)試相關(guān)信息進(jìn)行說(shuō)明。各個(gè)開發(fā)環(huán)境(IAR、Keil、AT32IDE)會(huì)有一些差別,也進(jìn)行了說(shuō)明。

故障安全處理

當(dāng)自檢程序檢測(cè)到故障時(shí),故障安全處理函數(shù)selftest_fail_handle()被調(diào)用。at32_selftest_startup.c文件中定義了該函數(shù)。該程序的目的是提供自定義故障處理接口并允許用戶立即做出反應(yīng)。例程內(nèi)部對(duì)該函數(shù)沒(méi)有特定處理,只輸出調(diào)試打印信息,然后執(zhí)行系統(tǒng)復(fù)位。該程序的內(nèi)容由用戶根據(jù)實(shí)際應(yīng)用自行開發(fā),在該函數(shù)執(zhí)行應(yīng)用必須的操作,以保證應(yīng)用處于安全的狀態(tài)。該函數(shù)從程序的不同故障位置進(jìn)行調(diào)用,為判斷故障問(wèn)題的嚴(yán)重程度,用戶可以重新定義該函數(shù),添加一個(gè)特定的輸入參數(shù)(預(yù)先定義好的簡(jiǎn)單常量)用于區(qū)分不同的故障。

程序RAM分布

為便于描述,將IEC60730必須用到的相關(guān)變量命名為Class B變量,用戶應(yīng)用相關(guān)的變量命名為Class A變量。每個(gè)Class B變量都使用一對(duì)互補(bǔ)值儲(chǔ)存在兩個(gè)單獨(dú)的RAM區(qū)。正常值和補(bǔ)碼值始終放在不相鄰的內(nèi)存位置。指定具體內(nèi)存地址的變量定義根據(jù)開發(fā)編譯環(huán)境的不同而寫法不同,具體的實(shí)現(xiàn)代碼通過(guò)宏定義區(qū)分,定義在at32_selftest_startup.c文件。

  • IAR通過(guò)修改xxx.icf鏈接文件指定固定地址
  • Keil通過(guò)修改xxx.sct分散加載文件指定固定地址
  • AT32 IDE通過(guò)修改xxx.ld鏈接文件指定固定地址

每次使用Class B變量數(shù)值前,用戶必須確保比較每一個(gè)數(shù)值對(duì)(正常值和補(bǔ)碼值)的完整性。如果發(fā)現(xiàn)任何數(shù)值對(duì)的完整性被損壞,應(yīng)調(diào)用故障安全處理函數(shù)。如果變量值變化,需要同步更新存儲(chǔ)位置的補(bǔ)碼值以保持正確的數(shù)值對(duì)。下圖是STL程序中對(duì)于RAM區(qū)域使用情況的分布圖:圖1.RAM分布圖

0ab6ecb2-163e-11ef-bebc-92fbcf53809c.png

工具特定集成設(shè)置

目前STL支持IAR、Keil和AT32 IDE三種IDE,對(duì)于不用的IDE,以下事項(xiàng)需注意:

  • 修改鏈接腳本文件*.icf(IAR)、*.sct(Keil)、*.ld(AT32 IDE),定義RAM區(qū)域的使用分布情況和CRC checksum位置。
  • 啟動(dòng)時(shí)的自檢代碼函數(shù)selftest_startup_check(),需要進(jìn)入主程序前,進(jìn)行處理調(diào)用。IAR和AT32 IDE編譯器都是通過(guò)修改固件庫(kù)內(nèi)對(duì)應(yīng)的原始啟動(dòng)文件startup_at32xxx.s,Keil編譯器通過(guò)修改$Sub$$main()程序。
  • 執(zhí)行完啟動(dòng)時(shí)的自檢程序后,需要跳轉(zhuǎn)進(jìn)入標(biāo)準(zhǔn)C的main主函數(shù),因?yàn)椴煌幾g器方式不同,所以用宏goto_compiler_startup()進(jìn)行定義。
  • 在Keil中調(diào)用goto_compiler_startup()時(shí),通過(guò)ENTER_MAIN_FLAG宏定義的CRC外設(shè)的CDT寄存器值,來(lái)判斷是進(jìn)入啟動(dòng)自檢程序還是真正的mian主程序。

程序執(zhí)行流程

Class B軟件包程序檢測(cè)內(nèi)容分為兩個(gè)主要部分:?jiǎn)?dòng)時(shí)的自檢和運(yùn)行時(shí)的周期自檢,總體流程框圖如下,圖中藍(lán)色框圖是相對(duì)于原應(yīng)用程序,執(zhí)行Class B需添加的部分。圖2.程序流程總框圖0ad80be0-163e-11ef-bebc-92fbcf53809c.png啟動(dòng)時(shí)的自檢必須在應(yīng)用啟動(dòng)之前執(zhí)行,調(diào)用函數(shù)selftest_startup_check(),在進(jìn)入主循環(huán)前先調(diào)用函數(shù)selftest_runtime_init()做周期自檢初始化配置,然后函數(shù)selftest_runtime_check()進(jìn)行周期自檢。例程中周期性自檢時(shí)基是采用1ms的systick中斷,根據(jù)變量time_base_flag判斷是否進(jìn)行檢測(cè),檢測(cè)時(shí)間間隔由宏定義SYSTICK_10MS_TB決定,用戶可以根據(jù)自己應(yīng)用進(jìn)行調(diào)整,例程中是每10ms執(zhí)行一次周期自檢。注意:運(yùn)行時(shí)如果自檢程序耗時(shí)太長(zhǎng),會(huì)影響正常應(yīng)用程序的進(jìn)行,可以將自檢流程進(jìn)行拆分,用systick中斷進(jìn)行周期性的自檢。理論上,自檢模塊集成添加到應(yīng)用程序中時(shí),用戶需要提供以下步驟:

  • 在用戶程序啟動(dòng)之前,執(zhí)行啟動(dòng)前的初始檢測(cè)
  • 在用戶程序執(zhí)行過(guò)程中,進(jìn)行周期性的檢測(cè)
  • 程序運(yùn)行時(shí),設(shè)置看門狗并及時(shí)喂狗防止復(fù)位
  • 對(duì)RAM和Flash在初始階段和運(yùn)行階段的測(cè)試,設(shè)置合適的測(cè)試區(qū)域
  • 對(duì)于自檢測(cè)試發(fā)生的錯(cuò)誤,以及其他hardfault等錯(cuò)誤,需要進(jìn)行合理的安全處理

注意:當(dāng)在啟動(dòng)時(shí)的測(cè)試期間,如果程序啟用了調(diào)試信息,因?yàn)橐恍┩庠O(shè)接口驅(qū)動(dòng)程序可能會(huì)用到一些變量,在進(jìn)行完內(nèi)存測(cè)試后,內(nèi)存中的內(nèi)容可能會(huì)丟失,所以需要用戶保證恢復(fù)這些變量。

啟動(dòng)時(shí)檢測(cè)流程

啟動(dòng)時(shí)檢測(cè)包括:

  • CPU檢測(cè)
  • 看門狗檢測(cè)
  • 系統(tǒng)時(shí)鐘檢測(cè)
  • Flash完整性檢測(cè)
  • RAM功能檢測(cè)
  • 控制流檢測(cè)

下圖是執(zhí)行啟動(dòng)時(shí)自檢的流程框圖。圖3.啟動(dòng)時(shí)自檢流程結(jié)構(gòu)0b0092e0-163e-11ef-bebc-92fbcf53809c.png

一、CPU啟動(dòng)時(shí)檢測(cè)

進(jìn)行CPU寄存器的相關(guān)檢測(cè),主要檢查內(nèi)核標(biāo)志、寄存器和堆棧指針等是否正確。如果發(fā)生錯(cuò)誤,就會(huì)調(diào)用故障安全處理函數(shù)Selftest_fail_handle()。該部分檢測(cè)源代碼是用匯編所寫,在KEIL、IAR以及AT32 IDE等不同的編譯環(huán)境下有差異,另外不同CPU內(nèi)核調(diào)用的指令可能也有差異,具體查看代碼。Cortex-M4內(nèi)核的MCU系列流程框圖如下圖4.cpu啟動(dòng)時(shí)檢測(cè)流程0b2b9f26-163e-11ef-bebc-92fbcf53809c.png

二、看門狗啟動(dòng)時(shí)檢測(cè)

驗(yàn)證看門狗復(fù)位功能是否正常,保證后續(xù)運(yùn)行中如果因?yàn)槌绦蛴?jì)數(shù)器出現(xiàn)非預(yù)期異常情況導(dǎo)致程序跑飛時(shí)可以通過(guò)看門狗復(fù)位恢復(fù)。例程中為方便用戶參考,宏定義開啟了wwdt和wdt,實(shí)際應(yīng)用中,根據(jù)需求選擇開啟某一個(gè)或兩個(gè)都開啟。看門狗測(cè)試通過(guò)判斷復(fù)位狀態(tài)寄存器的復(fù)位標(biāo)識(shí)來(lái)判斷是否測(cè)試成功,測(cè)試流程如下:
A. 判斷wdt reset flag和wwdt reset flag是否都沒(méi)有置起,如果是則執(zhí)行步驟B開始wdt測(cè)試,如果不是則跳轉(zhuǎn)到步驟CB. 配置wdt并使能,然后不喂狗,等待wdt計(jì)數(shù)器超時(shí)而復(fù)位回到步驟AC. 判斷wdt reset flag是否置起,并且wwdt reset flag沒(méi)有置起,如果是則表明wdt測(cè)試通過(guò),執(zhí)行步驟D開始wwdt測(cè)試,如果不是則跳轉(zhuǎn)到步驟ED. 配置wwdt并使能,然后不喂狗,等待wwdt計(jì)數(shù)器超時(shí)而復(fù)位回到步驟AE. 判斷wdt reset flag和wwdt reset flag是否都置起,如果是,則表明wdt和wwdt都測(cè)試通過(guò),完成整個(gè)測(cè)試,如果不是則表明測(cè)試過(guò)程中有未知異常情況,清除所有reset flag,然后執(zhí)行軟件復(fù)位,回到步驟A重新開始測(cè)試。注意:為減少啟動(dòng)階段的測(cè)試時(shí)長(zhǎng),啟動(dòng)時(shí)的看門狗超時(shí)時(shí)間配置為最小值,運(yùn)行時(shí)的超時(shí)時(shí)間需要根據(jù)實(shí)際應(yīng)用喂狗間隔時(shí)間配置。注意:測(cè)試過(guò)程中正常情況會(huì)有多次系統(tǒng)復(fù)位發(fā)生,測(cè)試完成后需清除所有的復(fù)位標(biāo)志位。流程框圖如下圖5.看門狗啟動(dòng)時(shí)檢測(cè)流程0b6978e6-163e-11ef-bebc-92fbcf53809c.png

三、時(shí)鐘啟動(dòng)時(shí)檢測(cè)

啟動(dòng)階段的時(shí)鐘檢測(cè)通過(guò)內(nèi)部低速時(shí)鐘源(LICK)和系統(tǒng)時(shí)鐘的交叉測(cè)量結(jié)果來(lái)驗(yàn)證。系統(tǒng)時(shí)鐘頻率作為基準(zhǔn)頻率,采用外部高速時(shí)鐘源(HEXT)或者內(nèi)部高速時(shí)鐘源(HICK)。啟動(dòng)階段的時(shí)鐘檢測(cè)盡量使測(cè)試時(shí)間短,例程中MCU通常是通過(guò)專用的定時(shí)器TMR(時(shí)鐘源為系統(tǒng)時(shí)鐘)的某個(gè)通道輸入捕獲LICK邊沿頻率,定時(shí)器兩次捕獲時(shí)數(shù)據(jù)寄存器計(jì)數(shù)值之間的差值進(jìn)行計(jì)算得到LICK實(shí)際測(cè)量值,與芯片數(shù)據(jù)手冊(cè)上列出的LICK規(guī)格的典型值進(jìn)行比較。如果LICK實(shí)際測(cè)量值在規(guī)格范圍的最大和最小范圍內(nèi),則測(cè)試成功;如果超出了規(guī)格范圍值,則測(cè)試失敗。圖6.時(shí)鐘啟動(dòng)時(shí)檢測(cè)流程0b88aea0-163e-11ef-bebc-92fbcf53809c.png四、Flash啟動(dòng)時(shí)檢測(cè)Flash自檢是存儲(chǔ)器檢測(cè)的一部分,程序中測(cè)試范圍內(nèi)的Flash數(shù)據(jù)用CRC外設(shè)的算法計(jì)算,將結(jié)果值跟編譯時(shí)已存儲(chǔ)在Flash指定位置的預(yù)先計(jì)算好的CRC值進(jìn)行比較。Flash的CRC值需要在調(diào)試或者燒錄階段跟正常應(yīng)用代碼一起下載到芯片F(xiàn)lash,所以需要在集成開發(fā)環(huán)境(IDE)編譯生成的HEX或者BIN檔中進(jìn)行添加,下面分別介紹Keil、IAR、AT32 IDE,如何增加CRC到已編譯的HEX或者BIN文件中,因?yàn)镕lash CRC運(yùn)行時(shí)周期檢測(cè)是每次128字節(jié),所以該處設(shè)置的CRC地址范圍需128字節(jié)對(duì)齊。圖7.Flash啟動(dòng)時(shí)CRC檢測(cè)流程0ba36614-163e-11ef-bebc-92fbcf53809c.png注意:CRC計(jì)算的Flash范圍需根據(jù)整個(gè)程序的實(shí)際情況進(jìn)行配置,配置方法在各個(gè)IDE上有所不同。KEIL:使用雅特力自己的工具AT32_SelfTest_CRC,將Keil生成的hex檔添加CRC值另存為新的hex檔(也支持bin檔),程序代碼中使用硬件CRC進(jìn)行計(jì)算,描述設(shè)置CRC檢測(cè)方法如下:1) 將執(zhí)行文件AT32_SelfTest_CRC.exe和參數(shù)文本SelfTest_CRC_Initparam.txt放在keil工程目錄中的同一個(gè)文件夾,程序例程是放在crc_tool文件夾中2) 工程中配置選擇對(duì)應(yīng)的文件夾路徑調(diào)用AT32_SelfTest_CRC.exe,將KEIL編譯生成的classb_demo.hex文件中的數(shù)據(jù)進(jìn)行CRC計(jì)算,生成CRC chec_sum,合并到新的classb_demo_checked.hex文件中圖8.keil選項(xiàng)中添加AT32_SelfTest_CRC.exe0be46fba-163e-11ef-bebc-92fbcf53809c.pngSelfTest_CRC_Initparam.txt用于配置參數(shù)1) input file:原始hex文件的名稱和地址,地址為hex文件相對(duì)Kei工程文件的路徑2) output file:添加CRC的hex文件的名稱和地址,地址為hex文件相對(duì)Kei工程文件的路徑3) start addr:計(jì)算CRC范圍的開始地址4) end addr:計(jì)算CRC范圍結(jié)束,CRC checksum放置地址5) fill blanks:CRC范圍內(nèi)原始hex文件的空白位置填充值,可以設(shè)置0xFF或者0x00圖9.配置文件內(nèi)容0c084d90-163e-11ef-bebc-92fbcf53809c.png在下載或者調(diào)試中,都需要用最終生成的classb_demo_checked.hex代替原始的classb_demo.hex,所以在Keil配置選項(xiàng)中需添加crc_load.ini文件用于加載新的hex文件0c33d302-163e-11ef-bebc-92fbcf53809c.pngIAR:IAR配置選項(xiàng)支持CRC計(jì)算,只需要配置好參數(shù),編譯生成的文件就會(huì)自動(dòng)將CRC check_sum值添加到選定Flash計(jì)算范圍后面,Checksum參數(shù)配置是根據(jù)測(cè)試MCU型號(hào)的硬件CRC外設(shè)模塊來(lái)確定,目前雅特力不同型號(hào)MCU的硬件CRC外設(shè)都相同,配置參數(shù)如下。圖10.IAP配置CRC0c5858f8-163e-11ef-bebc-92fbcf53809c.pngAT32 IDE:使用雅特力自己的工具AT32_SelfTest_CRC,將AT32 IDE生成的hex檔添加CRC值另存為新的hex檔(也支持bin檔),程序代碼中使用硬件CRC進(jìn)行計(jì)算,描述設(shè)置CRC檢測(cè)方法如下:1) 將執(zhí)行文件AT32_SelfTest_CRC.exe和參數(shù)文本SelfTest_CRC_Initparam.txt放在AT32 IDE工程目錄中的同一個(gè)文件夾,程序例程是放在crc_tool文件夾中2) 工程中配置選擇對(duì)應(yīng)的文件夾路徑調(diào)用AT32_SelfTest_CRC.exe,將AT32 IDE編譯生成的classb_demo.hex文件中的數(shù)據(jù)進(jìn)行CRC計(jì)算,生成CRC chec_sum,合并到新的classb_demo_checked.hex文件中SelfTest_CRC_Initparam.txt用于配置參數(shù),具體參數(shù)內(nèi)容參考上文中Keil章節(jié)的介紹。圖11.AT32 IDE選項(xiàng)中添加AT32_SelfTest_CRC.exe0c797c5e-163e-11ef-bebc-92fbcf53809c.png在下載或者調(diào)試中,都需要用最終生成的classb_demo_checked.hex代替原始的classb_demo.hex,所以在AT32 IDE配置選項(xiàng)中需配置加載新的hex文件,采用AT-Link調(diào)試器時(shí)配置如下圖圖12.AT32 IDE debug選項(xiàng)加載新的有CRC checksum的hex檔0ca01468-163e-11ef-bebc-92fbcf53809c.png注意:計(jì)算CRC值的Flash范圍根據(jù)應(yīng)用程序的實(shí)際大小確定,生成的CRC32 check sum存儲(chǔ)地址需位于Flash空白區(qū),否則可能覆蓋修改到該存儲(chǔ)地址的原始數(shù)據(jù)從而導(dǎo)致異常。

五、RAM啟動(dòng)時(shí)檢測(cè)

RAM自檢是存儲(chǔ)器檢測(cè)的一部分,支持和不支持硬件SRAM奇偶校驗(yàn)功能的型號(hào)可以采用不同的方式檢測(cè)。對(duì)于支持硬件SRAM奇偶校驗(yàn)功能的型號(hào),如果使用硬件RAM檢測(cè)的方式,需使能芯片的硬件RAM校驗(yàn)功能,該功能的開啟推薦在量產(chǎn)階段同代碼燒錄一起完成。前期開發(fā)設(shè)計(jì)階段,可以通過(guò)ICP等工具配置開啟。支持硬件SRAM奇偶校驗(yàn)功能的型號(hào)硬件SRAM校驗(yàn)功能開啟后,因?yàn)樯想奡RAM數(shù)據(jù)是隨機(jī)值,所以需要在程序啟動(dòng)階段對(duì)SRAM數(shù)據(jù)進(jìn)行初始化,對(duì)于Keil、IAR、AT32 IDE三種IDE,都是修改.s啟動(dòng)進(jìn)行SRAM數(shù)據(jù)初始化,代碼寫法可能稍有差異,下圖是Keil的.s啟動(dòng)文件添加SRAM初始化為全0x00的代碼圖13.Keil啟動(dòng)文件添加SRAM初始化0cbfe8f6-163e-11ef-bebc-92fbcf53809c.png使用硬件SRAM檢測(cè)功能,工程代碼有兩處宏定義修改:1) at32_selftest_param.h文件中開啟宏定義HW_RAM_CHECK2) 工程匯編配置中開啟宏定義HW_RAM_CHECK,下面分別是Keil、IAR、AT32 IDE配置截圖圖14.Keil匯編配置開啟HW_RAM_CHECK0ce1eece-163e-11ef-bebc-92fbcf53809c.png圖15.IAR匯編配置開啟HW_RAM_CHECK0d40a8a6-163e-11ef-bebc-92fbcf53809c.png圖16.AT32 IDE匯編配置開啟HW_RAM_CHECK0d5d24ae-163e-11ef-bebc-92fbcf53809c.png不支持硬件SRAM奇偶校驗(yàn)功能的型號(hào)采用March C算法,用值0x55555555和0xAAAAAAAA逐字交替填充整個(gè)RAM并檢查,基本物理單元是4字,下圖單元格內(nèi)的編號(hào)代表測(cè)試填充的順序。圖17.RAM基本單元原理0d82b5fc-163e-11ef-bebc-92fbcf53809c.pngRAM采用March C算法測(cè)試時(shí)分6個(gè)步驟,前3個(gè)循環(huán)按照地址遞增執(zhí)行,后3個(gè)循環(huán)按照地址遞減執(zhí)行。測(cè)試步驟如下,如果采用March X算法則省略步驟3和4:1. 全部范圍寫0x55555555,按照地址遞增順序執(zhí)行2. 檢測(cè)是否全部范圍為0x55555555,然后全部范圍寫0xAAAAAAAA,按照地址遞增順序執(zhí)行3. 檢測(cè)是否全部范圍為0xAAAAAAAA,然后全部范圍寫0x55555555,按照地址遞增順序執(zhí)行4. 檢測(cè)是否全部范圍為0x55555555,然后全部范圍寫0xAAAAAAAA,按照地址遞減順序執(zhí)行5. 檢測(cè)是否全部范圍為0xAAAAAAAA,然后全部范圍寫0x55555555,按照地址遞減順序執(zhí)行6. 檢測(cè)是否全部范圍為0x55555555,按照地址遞減順序執(zhí)行流程框圖如下:圖18.RAM啟動(dòng)時(shí)檢測(cè)流程0da37f30-163e-11ef-bebc-92fbcf53809c.png

六、控制流啟動(dòng)時(shí)檢測(cè)

控制流檢測(cè)也屬于程序計(jì)數(shù)器檢測(cè)的一部分,啟動(dòng)階段控制流檢測(cè)主要分為了兩個(gè)節(jié)點(diǎn),因?yàn)镽AM檢測(cè)會(huì)導(dǎo)致所有變量被清除,包括定義為控制流檢測(cè)相關(guān)的變量也會(huì)被清除,所以其中一個(gè)檢測(cè)節(jié)點(diǎn)是在RAM檢測(cè)之前,通過(guò)控制流變量值判斷是否前面所有測(cè)試項(xiàng)都正確完成,另外一個(gè)節(jié)點(diǎn)是在RAM檢測(cè)后,主要是運(yùn)行階段檢測(cè)必須操作的流程的配置,比如CRC參考變量初始化、棧溢出pattern設(shè)置。對(duì)于控制流檢測(cè),基本上每項(xiàng)檢測(cè)模塊都可以定義檢測(cè)兩層結(jié)構(gòu),其一是該項(xiàng)檢測(cè)模塊流程上是否正確調(diào)用(CALLER),其二是該項(xiàng)檢測(cè)模塊是否被正確執(zhí)行(CALLEE),檢測(cè)方法概述如下:1. 定義兩個(gè)變量指示控制流進(jìn)度,設(shè)置初始值ctrl_flow_cnt為0x00000000,ctrl_flow_cnt_inv為0xFFFFFFFF,其初始狀態(tài)互為取反的2. 給每項(xiàng)測(cè)試模塊定義兩個(gè)固定數(shù)值分別表示CALLER和CALLEE,并賦予不同的值3. 調(diào)用一項(xiàng)檢測(cè)模塊前,將ctrl_flow_cn增加CALLER的固定值,標(biāo)示該模塊已經(jīng)調(diào)用4. 進(jìn)入對(duì)應(yīng)檢測(cè)模塊內(nèi)部,將ctrl_flow_cn增加CALLEE的固定值,標(biāo)示該模塊正在執(zhí)行5. 執(zhí)行完對(duì)應(yīng)檢測(cè)模塊內(nèi)部,退出前ctrl_flow_cn_inv減少CALLEE的固定值,標(biāo)示該模塊執(zhí)行正確6. 完成對(duì)應(yīng)檢測(cè)模塊,進(jìn)入下一項(xiàng)檢測(cè)模塊前,將ctrl_flow_cn_inv減少CALLER的固定值,標(biāo)示該模塊調(diào)用正確7. 檢測(cè)ctrl_flow_cnt和ctrl_flow_cnt_inv是否仍互為取反的,如果是則表明對(duì)應(yīng)檢測(cè)模塊流程上被正確調(diào)用,并且該檢測(cè)模塊被正確執(zhí)行

運(yùn)行時(shí)周期檢測(cè)初始化

如果啟動(dòng)時(shí)的自檢成功通過(guò),并且標(biāo)準(zhǔn)初始化也完成了,運(yùn)行時(shí)的周期自檢必須在進(jìn)入主循環(huán)之前進(jìn)行初始化。該部分主要是一些后續(xù)自檢會(huì)使用到的變量的初始化、中斷中可能用到的數(shù)據(jù)的同步處理以及看門狗的配置等。

運(yùn)行時(shí)周期檢測(cè)流程

運(yùn)行時(shí)的檢測(cè)是以systick作為時(shí)基,進(jìn)行周期性的檢測(cè)。運(yùn)行時(shí)周期檢測(cè)包括:

  • 局部CPU內(nèi)核寄存器檢測(cè)
  • 系統(tǒng)時(shí)鐘運(yùn)行檢測(cè)
  • Flash CRC分段檢測(cè)
  • 堆棧邊界溢出檢測(cè)
  • 控制流檢測(cè)
  • 局部RAM自檢(在中斷服務(wù)程序中進(jìn)行)
  • 看門狗喂狗

圖19.運(yùn)行時(shí)周期自檢及中斷服務(wù)流程結(jié)構(gòu)0dc424c4-163e-11ef-bebc-92fbcf53809c.png

一、CPU運(yùn)行時(shí)檢測(cè)

CPU運(yùn)行時(shí)周期自檢跟啟動(dòng)時(shí)的自檢類似,只是不檢測(cè)內(nèi)核標(biāo)志和堆棧指針。圖20.CPU運(yùn)行時(shí)檢測(cè)流程0dffc34e-163e-11ef-bebc-92fbcf53809c.png

二、系統(tǒng)時(shí)鐘運(yùn)行時(shí)檢測(cè)

運(yùn)行時(shí)系統(tǒng)時(shí)鐘的檢測(cè)跟啟動(dòng)時(shí)時(shí)鐘檢測(cè)原理相同。因?yàn)檫\(yùn)行時(shí)的時(shí)鐘檢測(cè)會(huì)一直循環(huán)執(zhí)行,對(duì)某些用戶應(yīng)用,如果采用定時(shí)器捕獲LICK邊沿的方式,可能中斷頻率太高會(huì)有影響,所以也可以采用其他方式進(jìn)行測(cè)試,測(cè)試原理不變?nèi)匀皇峭ㄟ^(guò)內(nèi)部低速時(shí)鐘源(LICK)和系統(tǒng)時(shí)鐘的交叉測(cè)量結(jié)果來(lái)驗(yàn)證,AT32F403A和AT32F415例程分別采用了兩種不同的測(cè)試方法,供用戶參考。

  • 在AT32F403A例程中,跟啟動(dòng)時(shí)時(shí)鐘檢測(cè)方法相同,仍然采用專用的定時(shí)器TMR輸入捕獲LICK邊沿頻率的方式進(jìn)行測(cè)試,下圖是采用定時(shí)器捕獲LICK測(cè)試方式的流程。

圖21.系統(tǒng)時(shí)鐘運(yùn)行時(shí)定時(shí)器捕獲LICK檢測(cè)方式流程0e2a1c8e-163e-11ef-bebc-92fbcf53809c.png

  • 在AT32F415的例程中,使用ERTC(時(shí)鐘源為L(zhǎng)ICK)和Systick定時(shí)器(時(shí)鐘源為系統(tǒng)時(shí)鐘)之間交叉測(cè)量,ERTC按照數(shù)據(jù)手冊(cè)上LICK典型值作為時(shí)鐘源配置秒中斷參數(shù),Systick定時(shí)器中斷配置為1毫秒,Systick中斷計(jì)數(shù)變量tick_cnt_val累加,ERTC秒中斷時(shí)獲得Systick的計(jì)數(shù)變量數(shù)值,以此計(jì)算得到LICK實(shí)際測(cè)試值,如果在規(guī)格范圍內(nèi)的最大和最小值之間,測(cè)試通過(guò)。下圖是采用ERTC獲取Systick變量值測(cè)試方式的流程圖。

圖22.系統(tǒng)時(shí)鐘運(yùn)行時(shí)ERTC獲取Systick值檢測(cè)方式流程0e58a18a-163e-11ef-bebc-92fbcf53809c.png

三、Flash CRC運(yùn)行時(shí)檢測(cè)

運(yùn)行時(shí)進(jìn)行Flash CRC的自檢,因?yàn)闄z測(cè)范圍不同耗時(shí)不同,如果一次計(jì)算檢測(cè)全部范圍CRC可能耗時(shí)過(guò)長(zhǎng),影響正常應(yīng)用部分的執(zhí)行,所以可以根據(jù)用戶應(yīng)用程序大小配置分段CRC計(jì)算,當(dāng)計(jì)算到最后一段范圍時(shí),再進(jìn)行CRC值比較,如果不一致則測(cè)試失敗。圖23.Flash CRC運(yùn)行時(shí)檢測(cè)流程0e7c89ce-163e-11ef-bebc-92fbcf53809c.png

四、棧邊界運(yùn)行時(shí)溢出檢測(cè)

可驗(yàn)證尋址和數(shù)據(jù)路徑測(cè)試相關(guān),定義特殊固定值的Magic Pattern數(shù)組,放置在棧區(qū)域最底部地址,通過(guò)運(yùn)行中檢測(cè)Magic Pattern數(shù)組完整性來(lái)判斷棧是否溢出。如果原始Pattern被破壞,則表明棧溢出測(cè)試失敗,調(diào)用故障安全程序。這一區(qū)域根據(jù)設(shè)備及應(yīng)用有不同的配置。用戶必須為堆棧定義足夠的區(qū)域,并保證pattern正確放置。圖24.堆棧邊界溢出運(yùn)行時(shí)檢測(cè)流程0e9843d0-163e-11ef-bebc-92fbcf53809c.png

五、RAM運(yùn)行時(shí)檢測(cè)

對(duì)于不支持硬件SRAM奇偶校驗(yàn)功能的型號(hào),運(yùn)行時(shí)的RAM自檢是在systick中斷函數(shù)中進(jìn)行的。測(cè)試范圍可以根據(jù)用戶實(shí)際應(yīng)用需求調(diào)整,通過(guò)修改代碼中宏定義RUNTIME_RAM_START_ADDR和RUNTIME_RAM_END_ADDR來(lái)完成,需注意的是因?yàn)闇y(cè)試包括了測(cè)試區(qū)域前后相鄰的字,所以測(cè)試范圍前后要保留適當(dāng)余量,不要覆蓋臨時(shí)保存數(shù)據(jù)的緩沖塊(buffer block)和溢出芯片RAM范圍。測(cè)試流程方法概要描述如下:

  • 測(cè)試根據(jù)systick時(shí)基分批次進(jìn)行,每次測(cè)試按照CLASS B部分4個(gè)字的區(qū)域偏移,為保障耦合故障覆蓋率,每次測(cè)試的實(shí)際內(nèi)存塊還包括測(cè)試區(qū)域前后各1個(gè)相鄰字,總共6個(gè)字。
  • 首先將待測(cè)試內(nèi)存塊(RAM block)的數(shù)據(jù)存儲(chǔ)到專門用于測(cè)試過(guò)程中臨時(shí)保存數(shù)據(jù)的緩沖塊(buffer block)
  • 然后跟啟動(dòng)時(shí)檢測(cè)RAM類似,對(duì)測(cè)試內(nèi)存塊(RAM block)采用March C算法測(cè)試
  • 測(cè)試完成后將緩沖塊(buffer block)中保存的數(shù)據(jù)恢復(fù)至測(cè)試內(nèi)存塊(RAM block)

下圖描述了故障耦合的基本原理,圖中數(shù)據(jù)編號(hào)表示操作先后順序。圖25.局部RAM檢測(cè)故障耦合加擾模式原理0eb48842-163e-11ef-bebc-92fbcf53809c.png圖26.局部RAM運(yùn)行時(shí)檢測(cè)流程0ed346ce-163e-11ef-bebc-92fbcf53809c.png

六、看門狗運(yùn)行時(shí)刷新

作為程序計(jì)數(shù)器檢測(cè)的一部分,運(yùn)行時(shí)需要定期喂狗保證系統(tǒng)正常運(yùn)行,看門狗的刷新部分放置在每次檢測(cè)最后部分。注意:運(yùn)行時(shí)的看門狗超時(shí)時(shí)間,根據(jù)用戶程序中刷新喂狗代碼的調(diào)用頻率配置,軟件庫(kù)源代碼通常采用的是10ms調(diào)用一次,所以源代碼中看門狗超時(shí)時(shí)間配置大于10ms。

注意事項(xiàng)

用戶使用中可能會(huì)根據(jù)實(shí)際情況對(duì)CLASSB代碼進(jìn)行修改,如果改動(dòng)不符合要求可能導(dǎo)致檢測(cè)失敗,本章節(jié)列舉了一些常見的注意事項(xiàng)。

一、程序中自定義參數(shù)修改

系統(tǒng)主頻根據(jù)實(shí)際應(yīng)用修改,函數(shù)為selftest_system_clock_config()。其余配置參數(shù)定義在at32_selftest_param.h文件以及各自集成開發(fā)環(huán)境的鏈接或者分散加載文件中,根據(jù)實(shí)際應(yīng)用進(jìn)行修改,下面分別對(duì)Keil、IAR、AT32 IDE進(jìn)行說(shuō)明。at32_selftest_param.h文件中各個(gè)集成開發(fā)環(huán)境通用部分如下:圖27.通用可修改參數(shù)0efbe5c0-163e-11ef-bebc-92fbcf53809c.pngat32_selftest_param.h文件中跟各個(gè)集成開發(fā)環(huán)境相關(guān)寫法不一致的部分如下Keil:圖28.Keil可修改參數(shù)0f1ef8a8-163e-11ef-bebc-92fbcf53809c.pngIAR:圖29.IAR可修改參數(shù)0f419d18-163e-11ef-bebc-92fbcf53809c.pngAT32 IDE:圖30.AT32 IDE可修改參數(shù)0f6baeb4-163e-11ef-bebc-92fbcf53809c.png

二、Flash CRC檢測(cè)范圍設(shè)置

因?yàn)樵贔lash CRC運(yùn)行時(shí)檢測(cè)是分段進(jìn)行的,所以設(shè)置的總大小范圍需要跟代碼中的分段大小宏定義ROM_ONCE_VERIYF_SIZE成整數(shù)倍對(duì)齊,否則可能導(dǎo)致最后計(jì)算CRC失敗。

三、RAM檢測(cè)范圍設(shè)置

因?yàn)樵谶\(yùn)行時(shí)檢測(cè)是每次4個(gè)字,所以檢測(cè)范圍也需要保證4字對(duì)齊,并且因?yàn)闄z測(cè)范圍前后還需2個(gè)字的空隙,所以設(shè)置范圍時(shí)要防止覆蓋到測(cè)試RAM時(shí)臨時(shí)保存數(shù)據(jù)的緩沖塊(buffer block)或者溢出芯片RAM范圍,導(dǎo)致在RAM測(cè)試時(shí)程序出錯(cuò)。

四、編譯器影響

1. 編譯器的優(yōu)化不僅會(huì)導(dǎo)致程序分析調(diào)試?yán)щy,還可能導(dǎo)致程序出現(xiàn)非預(yù)期的結(jié)果,所以強(qiáng)烈建議在使用中針對(duì)CLASSB部分代碼不要進(jìn)行優(yōu)化。2. 當(dāng)使用不同版本的編譯器時(shí),程序可能有差異。新版CLASS軟件庫(kù)對(duì)于不同型號(hào)MCU的工程,為方便使用不同編譯器版本的用戶移植,可能使用了不同的編譯器版本。

軟件庫(kù)說(shuō)明

一、軟件庫(kù)下載各個(gè)已支持型號(hào)對(duì)應(yīng)的軟件庫(kù)源代碼開放于Example Code中,用戶可以通過(guò)官網(wǎng)下載,官網(wǎng)中Example Code內(nèi)容的鏈接地址為https://www.arterytek.com/cn/support/index.jsp?index=2,可搜索關(guān)鍵字“60730”快速查找已支持型號(hào)MCU的軟件庫(kù),例如AT32F403A的軟件庫(kù)文件為“AT32F403A 407 IEC 60730 CLASSB LIB”。二、軟件庫(kù)演示下面以SC0127 AT32F403A 407 IEC 60730 CLASSB LIB為例,AT32F403A安全庫(kù)的例程運(yùn)行環(huán)境如下:

  • KEIL工程為V5.36版本,IAR工程為V8.2版本,AT32 IDE工程為V1.0.09版本。
  • Demo運(yùn)行基于F403A芯片,運(yùn)行在AT-START-F403A開發(fā)板。
  • 工程路徑為:utilities\classb_demo

圖31.運(yùn)行打印信息0f8cfeca-163e-11ef-bebc-92fbcf53809c.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5013

    瀏覽量

    88079
  • IEC
    IEC
    +關(guān)注

    關(guān)注

    2

    文章

    202

    瀏覽量

    28967
  • AT32
    +關(guān)注

    關(guān)注

    1

    文章

    118

    瀏覽量

    2167
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AN136 基于GD32F30x系列的IEC60730 ClassB庫(kù)移植指南

    電子發(fā)燒友網(wǎng)站提供《AN136 基于GD32F30x系列的IEC60730 ClassB庫(kù)移植指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-17 16:22 ?0次下載
    AN136 基于GD32F30x系列的<b class='flag-5'>IEC60730</b> ClassB<b class='flag-5'>庫(kù)</b>移植<b class='flag-5'>指南</b>

    基于GD32F3x0系列的IEC60730 ClassB庫(kù)移植指南

    電子發(fā)燒友網(wǎng)站提供《基于GD32F3x0系列的IEC60730 ClassB庫(kù)移植指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-17 14:41 ?0次下載
    基于GD32F3x0系列的<b class='flag-5'>IEC60730</b> ClassB<b class='flag-5'>庫(kù)</b>移植<b class='flag-5'>指南</b>

    STM32應(yīng)用中UL/CSA/IEC 60730-1/60335-1的B類認(rèn)證獲取指南

    電子發(fā)燒友網(wǎng)站提供《STM32應(yīng)用中UL/CSA/IEC 60730-1/60335-1的B類認(rèn)證獲取指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-26 15:04 ?0次下載

    AT32講堂088 | AT32F402/F405時(shí)鐘配置

    介紹如何結(jié)合提供的V2.x.x的板級(jí)支持包(BSP)來(lái)配置時(shí)鐘。以下介紹時(shí)鐘配置的方法主要分兩種:1、以手動(dòng)編寫代碼調(diào)用BSP中提供的驅(qū)動(dòng)函數(shù)接口來(lái)進(jìn)行時(shí)鐘配
    的頭像 發(fā)表于 09-15 08:08 ?609次閱讀
    <b class='flag-5'>AT32</b>講堂088 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F402/F405時(shí)鐘配置

    AT32講堂087 | AT32 IDE快速入門指南

    新建項(xiàng)目新項(xiàng)目向?qū)T32ID提供支持MCU的C語(yǔ)言項(xiàng)目模板,方便用戶快速創(chuàng)建項(xiàng)目。菜單欄【File】>【New】>【CProject】。新建項(xiàng)目向?qū)У膶?duì)話框?qū)⒊霈F(xiàn)。在對(duì)
    的頭像 發(fā)表于 09-15 08:08 ?560次閱讀
    <b class='flag-5'>AT32</b>講堂087 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> IDE快速入門<b class='flag-5'>指南</b>

    AT32 MCU的隨機(jī)數(shù)生成

    概述產(chǎn)品和生態(tài)系統(tǒng)安全性的需求比以往任何時(shí)候都更加重要。真隨機(jī)數(shù)是所有安全系統(tǒng)的核心,其質(zhì)量會(huì)影響設(shè)計(jì)的安全性。因此在沒(méi)有內(nèi)置硬件TRNG的AT32的微控制器系列中,如何提高隨機(jī)數(shù)的有效,來(lái)符合
    的頭像 發(fā)表于 08-30 12:26 ?708次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> MCU的隨機(jī)數(shù)生成

    喜訊!科技蟬聯(lián)「重慶市軟件和信息服務(wù)企業(yè)五十強(qiáng)」

    科技榮耀上榜,連續(xù)兩年入選榜單。該名單以行業(yè)統(tǒng)計(jì)數(shù)據(jù)為基礎(chǔ),從企業(yè)規(guī)模、經(jīng)營(yíng)業(yè)績(jī)、研發(fā)能力、知識(shí)產(chǎn)權(quán)、行業(yè)資質(zhì)等競(jìng)爭(zhēng)要素進(jìn)行評(píng)價(jià),并經(jīng)專家綜合評(píng)審,優(yōu)中
    的頭像 發(fā)表于 07-20 08:15 ?364次閱讀
    喜訊!<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>科技蟬聯(lián)「重慶市<b class='flag-5'>軟件</b>和信息服務(wù)企業(yè)五十強(qiáng)」

    GD32F10x 固件庫(kù)使用指南

    電子發(fā)燒友網(wǎng)站提供《GD32F10x 固件庫(kù)使用指南.pdf》資料免費(fèi)下載
    發(fā)表于 05-22 14:15 ?27次下載

    AT32 MCU通過(guò)IEC 60730功能安全認(rèn)證,為家電產(chǎn)品提供安全保障

    ??近日,AT32MCU安全庫(kù)順利通過(guò)IEC60730功能安全認(rèn)證,為家電產(chǎn)品提供安全質(zhì)量保證。國(guó)際公認(rèn)的測(cè)試、檢驗(yàn)和認(rèn)證機(jī)構(gòu)SGS為
    的頭像 發(fā)表于 05-20 08:15 ?632次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> MCU通過(guò)<b class='flag-5'>IEC</b> <b class='flag-5'>60730</b>功能安全認(rèn)證,為家電產(chǎn)品提供安全保障

    AT32F423入門使用指南

    初步環(huán)境準(zhǔn)備開發(fā)環(huán)境下載地址:
    的頭像 發(fā)表于 05-14 08:15 ?1774次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F423入門<b class='flag-5'>使用指南</b>

    SGS為科技頒發(fā)AEC-Q100認(rèn)證證書以及IEC 60730認(rèn)證證書

    近日,國(guó)際公認(rèn)的測(cè)試、檢驗(yàn)和認(rèn)證機(jī)構(gòu)SGS(以下簡(jiǎn)稱為“SGS”)為科技頒發(fā)AEC-Q100認(rèn)證證書以及IEC 60730認(rèn)證證書。
    的頭像 發(fā)表于 05-13 10:21 ?828次閱讀
    SGS為<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>科技頒發(fā)AEC-Q100認(rèn)證證書以及<b class='flag-5'>IEC</b> <b class='flag-5'>60730</b>認(rèn)證證書

    AT32 MCU與SEGGER攜手合作,開發(fā)量產(chǎn)事半功倍

    近日,與SEGGER共同宣布J-Link仿真調(diào)試器與Flasher在線燒錄器全面支持AT32 MCU產(chǎn)品,SEGGER工具鏈的加持使AT32
    的頭像 發(fā)表于 02-23 10:27 ?461次閱讀

    AT32 MCU與SEGGER攜手合作,開發(fā)量產(chǎn)事半功倍

    近日,與SEGGER共同宣布J-Link仿真調(diào)試器與Flasher在線燒錄器全面支持AT32MCU產(chǎn)品,SEGGER工具鏈的加持使AT32MCU開發(fā)如虎添翼。
    的頭像 發(fā)表于 02-22 08:13 ?536次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> MCU與SEGGER攜手合作,開發(fā)量產(chǎn)事半功倍

    AT32F423時(shí)鐘配置

    介紹如何結(jié)合提供的V2.x.x的板級(jí)支持包(BSP)來(lái)配置時(shí)鐘。以下介紹時(shí)鐘配置的方法主要分兩種:1、以手動(dòng)編寫代碼調(diào)用BSP中提供的驅(qū)動(dòng)函數(shù)接口來(lái)進(jìn)行時(shí)鐘配
    的頭像 發(fā)表于 02-19 13:26 ?685次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F423時(shí)鐘配置

    復(fù)旦微MCU通過(guò)IEC/UL 60730 B類家電功能安全認(rèn)證

    IEC60730電器自動(dòng)控制器安全標(biāo)準(zhǔn)定義了多種測(cè)試和診斷方法,確保家用電器的嵌入式控制硬件和軟件能夠安全運(yùn)行。復(fù)旦微電子可提供支持IEC60730ClassB認(rèn)證的軟件
    的頭像 發(fā)表于 02-19 12:33 ?1016次閱讀
    復(fù)旦微MCU通過(guò)<b class='flag-5'>IEC</b>/UL <b class='flag-5'>60730</b> <b class='flag-5'>B</b>類家電功能安全認(rèn)證
    弋阳县| 百家乐套利| 百家乐扑克牌耙| 尊龙百家乐官网娱乐城| 龍城百家乐官网的玩法技巧和规则 | 都坊百家乐的玩法技巧和规则| 至尊百家乐20130402| 百家乐出千方法技巧| 百家乐强弱走势| 百家乐技巧技巧| 威尼斯人娱乐城 老品牌| 大发888娱乐城哪个好| 一起pk棋牌游戏大厅| 足球投注技巧| 真人百家乐赌法| 百家乐平注常赢玩法技巧| 玩百家乐官网有几种公式| 旅百家乐官网赢钱律| 澳门百家乐官网娱乐网| 高尔夫百家乐官网的玩法技巧和规则 | 爱赢百家乐官网开户送现金| 最新百家乐官网网评测排名| 百家乐注册赠金| 扑克王百家乐的玩法技巧和规则 | 百家乐玩法最多的娱乐城| 威尼斯人娱乐城怎么样lm0| 博狗备用网站| 百家乐官网高人玩法| 百家乐官网真人游戏娱乐场| 做生意房子选哪个方位| 网上百家乐娱乐平台| 全讯网新2网站112| 博彩一族| 临汾玩百家乐官网的人在那里找| 博彩百家乐官网字谜总汇二丹东| 百家乐赌场代理荐| 大发888设置| 百家乐官网单双打法| 乐中百家乐官网的玩法技巧和规则 | 在线百家乐合作| 大发888 注册|