Fast Lock配置實(shí)戰(zhàn):寄存器鏈路與調(diào)試避坑指南)
1. 跳頻系統(tǒng)為什么需要Fast Lock做無線通信的同行大多接觸過AD9361這顆射頻捷變收發(fā)器它覆蓋70MHz到6GHz通道帶寬可配置到56MHz在軟件無線電、專網(wǎng)通信、測控鏈路里出鏡率極高。但真正把它塞進(jìn)跳頻系統(tǒng)里跑起來很多人會撞上同一堵墻跳頻速率上不去。常規(guī)配置下AD9361從一次本振頻率切換到另一次鎖定時間動輒幾十微秒甚至上百微秒而跳頻系統(tǒng)的駐留時間可能只有幾百微秒光是PLL鎖定就吃掉一大半留給數(shù)據(jù)解調(diào)的時間窗口被壓得所剩無幾。Fast Lock功能就是為這個場景準(zhǔn)備的。它的核心思路并不復(fù)雜把每次跳頻都要重新走一遍的VCO校準(zhǔn)過程省掉提前把校準(zhǔn)結(jié)果存進(jìn)芯片內(nèi)部的寄存器表里跳頻時直接查表加載跳過耗時最長的校準(zhǔn)環(huán)節(jié)。聽起來簡單但實(shí)際配置時涉及寄存器數(shù)量多、時序要求嚴(yán)、SPI寫入順序不能亂稍有不慎就會出現(xiàn)PLL不鎖定、CP OVRG HIGH被置位、0x247寄存器讀回0x80這類讓人抓狂的現(xiàn)象。這篇內(nèi)容面向的是已經(jīng)能把AD9361跑通基礎(chǔ)收發(fā)、現(xiàn)在要把它推進(jìn)跳頻應(yīng)用的工程師。我會從Fast Lock的工作原理講起把寄存器配置的完整鏈路拆開重點(diǎn)說清楚那些官方文檔里一筆帶過、但實(shí)際調(diào)試中一定會踩的坑。涉及SPI時序、寄存器映射、狀態(tài)機(jī)切換的部分我會給出可直接對照的配置表和排查思路。如果你正在用STM32或者類似的MCU通過SPI驅(qū)動AD9361這篇內(nèi)容應(yīng)該能幫你省下不少抓波形的時間。2. Fast Lock的底層機(jī)制與Profile存儲邏輯2.1 常規(guī)鎖定流程到底慢在哪里要理解Fast Lock為什么快得先看清楚常規(guī)鎖定慢在哪。AD9361內(nèi)部有RX PLL、TX PLL、RX VCO、TX VCO這幾套頻率合成資源每次改變本振頻率VCO都需要重新校準(zhǔn)。校準(zhǔn)過程本質(zhì)上是芯片在內(nèi)部搜索當(dāng)前頻點(diǎn)對應(yīng)的最佳電容陣列組合這個搜索是逐次逼近的需要反復(fù)比較、迭代耗時主要花在這里。校準(zhǔn)完成后PLL才進(jìn)入閉環(huán)鎖定等待相位誤差收斂。整個流程里VCO校準(zhǔn)占了大頭。而且校準(zhǔn)時間跟頻點(diǎn)、溫度、供電都有關(guān)系不是固定值。跳頻系統(tǒng)如果每個頻點(diǎn)都走一遍完整校準(zhǔn)時間開銷根本壓不下來。更麻煩的是校準(zhǔn)期間PLL輸出是不穩(wěn)定的這段時間射頻前端等于在“空轉(zhuǎn)”數(shù)據(jù)既發(fā)不出去也收不進(jìn)來。Fast Lock的做法是在系統(tǒng)初始化階段把所有要用到的頻點(diǎn)逐個校準(zhǔn)一遍把每個頻點(diǎn)對應(yīng)的VCO校準(zhǔn)字、PLL分頻比等參數(shù)打包成一個Profile寫進(jìn)AD9361內(nèi)部專門的一塊存儲區(qū)。跳頻時MCU只需要通過SPI告訴芯片“切到第N號Profile”芯片直接從存儲區(qū)把參數(shù)加載到對應(yīng)寄存器跳過校準(zhǔn)直接進(jìn)入鎖定。這樣鎖定時間能從幾十微秒降到幾微秒量級具體數(shù)值取決于SPI寫入速度和Profile加載的寄存器數(shù)量。2.2 Profile存儲區(qū)的組織方式AD9361內(nèi)部用于Fast Lock的存儲區(qū)可以理解成一張表每個Profile占一組連續(xù)的寄存器地址。芯片支持多個Profile具體數(shù)量跟器件版本和配置有關(guān)常見的是8個或者16個。每個Profile里存的內(nèi)容包括RX/TX的整數(shù)分頻比、小數(shù)分頻比、VCO校準(zhǔn)字、以及一些跟電荷泵、環(huán)路濾波器相關(guān)的偏置參數(shù)。這里有個容易誤解的點(diǎn)Profile不是只存頻率值它存的是一整套讓PLL能直接鎖定的寄存器快照。也就是說你在初始化階段校準(zhǔn)某個頻點(diǎn)時芯片內(nèi)部自動生成的那組參數(shù)需要被完整地讀出來或者由芯片自己保存到Profile區(qū)。AD9361支持兩種模式一種是芯片自動把校準(zhǔn)結(jié)果存入Profile另一種是MCU手動寫入。實(shí)際用下來自動模式省事但可控性差手動模式靈活但需要你清楚每個寄存器的含義。Profile的索引通過寄存器0x25A附近的區(qū)域來管理具體地址跟你的寄存器映射版本有關(guān)。切換Profile時先寫索引再觸發(fā)加載然后輪詢鎖定狀態(tài)位。這個順序不能顛倒否則會出現(xiàn)加載了舊Profile或者加載不完整的情況。2.3 Fast Lock與常規(guī)鎖定的狀態(tài)機(jī)差異常規(guī)鎖定走的是“寫頻率字 → 觸發(fā)VCO校準(zhǔn) → 等待校準(zhǔn)完成 → PLL閉環(huán)鎖定 → 鎖定標(biāo)志置位”這條鏈路。Fast Lock走的是“寫Profile索引 → 觸發(fā)Profile加載 → PLL直接閉環(huán)鎖定 → 鎖定標(biāo)志置位”中間少了校準(zhǔn)環(huán)節(jié)。這個差異帶來的直接影響是Fast Lock對Profile內(nèi)容的正確性極度敏感。常規(guī)鎖定就算頻率字寫得不太準(zhǔn)VCO校準(zhǔn)還能在一定程度上補(bǔ)償Fast Lock沒有這個補(bǔ)償機(jī)會Profile里任何一個參數(shù)錯了PLL就是鎖不上而且不會給你“校準(zhǔn)失敗”的提示只會表現(xiàn)為鎖定標(biāo)志一直不置位或者CP OVRG HIGH被置起來。所以配置Fast Lock的第一步不是急著寫寄存器而是先把常規(guī)鎖定跑穩(wěn)確認(rèn)每個目標(biāo)頻點(diǎn)都能正常鎖定再把它們的參數(shù)提取出來做成Profile。這個順序反了后面排查會非常痛苦。3. 寄存器配置的完整鏈路拆解3.1 初始化階段必須確認(rèn)的基礎(chǔ)寄存器在碰Fast Lock相關(guān)寄存器之前有幾個基礎(chǔ)寄存器必須先確認(rèn)到位否則后面全是白費(fèi)功夫。首先是0x247這個寄存器很多人在調(diào)試時發(fā)現(xiàn)它一直讀回0x80然后就開始懷疑SPI通信有問題。實(shí)際上0x247是Charge Pump相關(guān)的狀態(tài)寄存器讀回0x80往往說明CP OVRG HIGH被置位了根因通常是PLL環(huán)路參數(shù)沒配好或者參考時鐘質(zhì)量有問題而不是SPI讀寫錯誤?;A(chǔ)寄存器里0x230到0x23F這一段管的是PLL的整數(shù)和小數(shù)分頻設(shè)置0x240到0x24F管的是VCO校準(zhǔn)和電荷泵偏置。初始化時建議先把這些寄存器的默認(rèn)值讀出來存檔后面做Profile對比時有個基準(zhǔn)。特別是0x247它的位定義里包含了CP校準(zhǔn)狀態(tài)和OVRG標(biāo)志讀的時候要按位解析不能只看整字節(jié)值。參考時鐘的配置也在這個階段確認(rèn)。AD9361的參考時鐘來源可以是外部晶振或者外部輸入通過0x2AB附近的寄存器選擇。參考時鐘頻率直接決定了PLL分頻比的計(jì)算如果這里配錯了后面所有頻點(diǎn)都會偏。我習(xí)慣在初始化完成后用頻譜儀或者示波器確認(rèn)一下參考時鐘實(shí)際頻率跟寄存器配置值對一遍這一步花不了幾分鐘但能省掉后面大量“頻率對不上”的排查。3.2 Profile寫入的寄存器序列Profile寫入分兩種情況芯片自動保存和MCU手動寫入。自動保存模式下你正常執(zhí)行一次頻率切換芯片在校準(zhǔn)完成后會把結(jié)果存到當(dāng)前索引對應(yīng)的Profile區(qū)。手動寫入模式下你需要自己計(jì)算并填寫每個Profile的寄存器。手動寫入的序列大致是這樣的先寫Profile索引寄存器選定要操作哪個Profile然后依次寫RX/TX的整數(shù)分頻、小數(shù)分頻、VCO校準(zhǔn)字、電荷泵偏置等最后寫一個“提交”或者“使能”位讓芯片把這些值鎖存進(jìn)Profile區(qū)。這個序列里索引寄存器必須在最前面寫提交位必須在最后面寫中間的順序雖然有些寄存器之間沒有嚴(yán)格依賴但建議按地址順序?qū)懛奖闩挪?。這里有個實(shí)操細(xì)節(jié)寫Profile的時候最好先把當(dāng)前PLL切到某個已知穩(wěn)定的頻點(diǎn)避免在PLL正在工作的時候改Profile區(qū)導(dǎo)致狀態(tài)混亂。有些版本的芯片在PLL使能狀態(tài)下寫Profile會觸發(fā)保護(hù)機(jī)制寫入被忽略但不報錯表現(xiàn)出來就是“寫了但沒生效”。3.3 跳頻切換時的觸發(fā)與輪詢跳頻切換的觸發(fā)很簡單寫Profile索引然后寫一個觸發(fā)位。觸發(fā)位的位置跟寄存器映射有關(guān)常見的是在0x25A或者0x25B附近。觸發(fā)之后芯片開始從Profile區(qū)加載參數(shù)到工作寄存器這個過程需要時間具體取決于SPI時鐘和芯片內(nèi)部狀態(tài)機(jī)的速度。輪詢鎖定狀態(tài)是這一步的關(guān)鍵。AD9361的鎖定狀態(tài)可以通過0x247或者專門的PLL鎖定狀態(tài)寄存器來讀。注意鎖定標(biāo)志置位不代表鎖定已經(jīng)穩(wěn)定建議在標(biāo)志置位后再延時一小段時間比如幾微秒讓環(huán)路徹底收斂。跳頻系統(tǒng)里這個延時可以算進(jìn)保護(hù)間隔不影響整體時序。輪詢的時候不要用太短的間隔去讀SPI讀操作本身也要時間讀太頻繁反而拖慢整體切換速度。我的做法是觸發(fā)后先延時一個預(yù)估的加載時間然后再開始輪詢輪詢間隔設(shè)在幾微秒量級連續(xù)讀到鎖定標(biāo)志置位就認(rèn)為切換完成。3.4 寄存器配置對照表下面這張表整理了Fast Lock配置中最常打交道的寄存器地址以常見映射版本為準(zhǔn)實(shí)際使用時請對照你手上的器件手冊確認(rèn)。寄存器地址功能配置要點(diǎn)0x230-0x233RX整數(shù)分頻按目標(biāo)頻率和參考時鐘計(jì)算0x234-0x237RX小數(shù)分頻決定頻率精度注意模數(shù)設(shè)置0x238-0x23BTX整數(shù)分頻與RX獨(dú)立配置0x23C-0x23FTX小數(shù)分頻同上0x240-0x243RX VCO校準(zhǔn)字Fast Lock核心從常規(guī)校準(zhǔn)結(jié)果提取0x244-0x247TX VCO校準(zhǔn)字及CP狀態(tài)0x247含CP OVRG標(biāo)志0x248-0x24B電荷泵偏置影響鎖定時間和穩(wěn)定性0x25AProfile索引與觸發(fā)先寫索引再寫觸發(fā)位0x25BProfile控制提交、使能等控制位這張表不是讓你照著填而是讓你在排查時知道該看哪里。每個寄存器的具體位定義和計(jì)算方法必須結(jié)合你的參考時鐘頻率和目標(biāo)頻點(diǎn)來算沒有通用值可以套。4. 調(diào)試中那些讓人卡住的典型現(xiàn)象4.1 0x247讀回0x80到底意味著什么0x247讀回0x80是搜索熱詞里出現(xiàn)頻率很高的問題。這個值的含義要按位看0x80對應(yīng)的是最高位被置位在多數(shù)映射版本里這一位是CP OVRG HIGH標(biāo)志。它被置起來說明電荷泵的輸出電壓超出了正常范圍PLL環(huán)路無法正常收斂。根因通常有三個方向。第一是電荷泵偏置寄存器配得不對環(huán)路增益太高或者太低導(dǎo)致CP輸出飽和。第二是參考時鐘質(zhì)量差抖動大或者頻率不穩(wěn)PLL鑒相器輸出異常CP被迫大幅調(diào)整。第三是VCO校準(zhǔn)字本身就是錯的Fast Lock加載了一個不匹配當(dāng)前頻點(diǎn)的校準(zhǔn)字VCO輸出頻率偏離目標(biāo)太遠(yuǎn)PLL拼命拉也拉不回來。排查順序建議從參考時鐘開始確認(rèn)參考時鐘干凈、頻率準(zhǔn)確然后檢查電荷泵偏置是否用了推薦值最后核對VCO校準(zhǔn)字是不是從對應(yīng)頻點(diǎn)的常規(guī)校準(zhǔn)結(jié)果里提取的。這三步走完大部分0x80問題都能定位。4.2 PLL不鎖定的排查鏈路PLL不鎖定是Fast Lock調(diào)試?yán)镒钭屓祟^疼的因?yàn)樗粓箦e只是鎖定標(biāo)志不置位。完整的排查鏈路應(yīng)該是這樣的第一步確認(rèn)SPI通信本身沒問題。讀一個已知固定值的寄存器比如器件ID寄存器看讀回值對不對。如果ID都讀不對后面不用查了先解決SPI時序、片選、時鐘極性相位這些問題。第二步確認(rèn)常規(guī)鎖定能正常工作。把Fast Lock關(guān)掉用常規(guī)方式切到目標(biāo)頻點(diǎn)看能不能鎖定。如果常規(guī)都鎖不上說明基礎(chǔ)配置有問題跟Fast Lock無關(guān)。第三步確認(rèn)Profile內(nèi)容正確。把Profile區(qū)的寄存器讀出來跟常規(guī)鎖定時的對應(yīng)寄存器值逐字節(jié)對比。差異在哪里問題就在哪里。第四步確認(rèn)觸發(fā)和輪詢時序。用邏輯分析儀抓SPI波形看索引寫入、觸發(fā)位寫入、狀態(tài)輪詢的順序和時間間隔是否符合預(yù)期。這個鏈路看起來笨但每一步都能排除掉一大片可能性。我見過太多人一上來就懷疑芯片壞了結(jié)果查到最后是SPI時鐘相位配錯了。4.3 SPI寫入順序引發(fā)的隱性故障SPI寫入順序在Fast Lock配置里是個隱性殺手。AD9361的寄存器寫入是即時生效的沒有緩沖所以你寫一個寄存器的瞬間芯片狀態(tài)就可能發(fā)生變化。如果順序不對會出現(xiàn)“寫了A寄存器導(dǎo)致B寄存器狀態(tài)被重置”的情況。比如先寫觸發(fā)位再寫Profile索引芯片會用舊的索引去加載加載出來的參數(shù)跟你預(yù)期的不一樣。再比如在PLL使能狀態(tài)下寫VCO校準(zhǔn)字有些版本會忽略寫入。這些都不會報錯只會表現(xiàn)為“配置了但沒效果”。我的習(xí)慣是所有跟Profile相關(guān)的寫入都放在PLL關(guān)閉或者切到安全頻點(diǎn)的狀態(tài)下做。寫完之后再使能PLL觸發(fā)加載。這樣雖然多了一步但能避免大量順序相關(guān)的詭異問題。4.4 溫度與供電對Profile有效性的影響Fast Lock的Profile是在某個溫度、某個供電條件下校準(zhǔn)出來的。如果工作環(huán)境溫度變化大或者供電電壓波動Profile里的VCO校準(zhǔn)字可能就不再適用了。表現(xiàn)出來就是常溫下調(diào)好的跳頻系統(tǒng)到了高低溫環(huán)境下某些頻點(diǎn)鎖不上。AD9361內(nèi)部有溫度傳感器可以讀出來做補(bǔ)償。實(shí)際工程里如果溫度范圍寬建議做多組Profile按溫度區(qū)間切換?;蛘叨ㄆ谟贸R?guī)校準(zhǔn)刷新Profile犧牲一點(diǎn)切換速度換穩(wěn)定性。供電方面AD9361對電源紋波比較敏感特別是VCO和電荷泵的供電。如果發(fā)現(xiàn)Profile在實(shí)驗(yàn)室好用、上板子就不行先查電源。示波器看紋波萬用表看電壓別偷懶。5. 從常規(guī)鎖定到Fast Lock的遷移實(shí)操5.1 先把常規(guī)鎖定跑穩(wěn)遷移的第一步不是寫Fast Lock寄存器而是把常規(guī)鎖定跑穩(wěn)。具體做法是配置好參考時鐘、PLL基礎(chǔ)參數(shù)然后逐個頻點(diǎn)做常規(guī)切換記錄每個頻點(diǎn)鎖定所需的時間、鎖定后的寄存器值、以及0x247的狀態(tài)。這個過程要覆蓋你跳頻系統(tǒng)里所有會用到的頻點(diǎn)一個都不能漏。記錄下來的寄存器值就是后面做Profile的原始素材。建議用表格整理每個頻點(diǎn)一行列出整數(shù)分頻、小數(shù)分頻、VCO校準(zhǔn)字、CP偏置、鎖定時間。跑常規(guī)鎖定的時候注意觀察鎖定時間的一致性。如果某些頻點(diǎn)鎖定時間明顯偏長說明這些頻點(diǎn)的VCO校準(zhǔn)比較困難做Fast Lock時要特別關(guān)注它們的Profile質(zhì)量。5.2 提取并驗(yàn)證Profile參數(shù)常規(guī)鎖定跑穩(wěn)后把每個頻點(diǎn)的關(guān)鍵寄存器值讀出來。重點(diǎn)是VCO校準(zhǔn)字和電荷泵偏置這兩個直接決定Fast Lock能不能鎖上。整數(shù)和小數(shù)分頻也要讀雖然它們理論上可以計(jì)算但讀出來對比更保險。提取出來的參數(shù)先不要急著寫進(jìn)Profile區(qū)。建議先做一次驗(yàn)證手動把這些參數(shù)寫到工作寄存器看PLL能不能鎖定。這一步相當(dāng)于模擬Fast Lock的加載過程但用的是工作寄存器而不是Profile區(qū)能提前發(fā)現(xiàn)參數(shù)本身的問題。驗(yàn)證通過后再按Profile寫入序列把參數(shù)寫進(jìn)Profile區(qū)。寫完后讀回來對比確認(rèn)寫入無誤。5.3 切換時序的實(shí)測與優(yōu)化Profile寫好后開始實(shí)測切換時序。用邏輯分析儀抓SPI波形同時用示波器或者頻譜儀觀察射頻輸出的頻率變化。重點(diǎn)看幾個時間點(diǎn)觸發(fā)寫入到鎖定標(biāo)志置位的時間、鎖定標(biāo)志置位到射頻輸出穩(wěn)定的時間、以及整個切換過程的總時間。如果切換時間比預(yù)期長先看SPI時鐘能不能提高。SPI時鐘提高能縮短寄存器寫入時間但要注意AD9361的SPI最高時鐘限制超了會通信失敗。然后看輪詢間隔能不能優(yōu)化輪詢太密反而拖慢速度。實(shí)測中還要注意連續(xù)快速切換時芯片內(nèi)部狀態(tài)機(jī)可能需要額外的恢復(fù)時間。如果發(fā)現(xiàn)連續(xù)切換幾次后鎖定變慢或者失敗嘗試在切換之間插入一個小延時讓狀態(tài)機(jī)復(fù)位。5.4 常見配置錯誤速查現(xiàn)象可能原因排查方向0x247讀回0x80CP OVRG HIGH查參考時鐘、CP偏置、VCO校準(zhǔn)字PLL鎖定標(biāo)志不置位Profile參數(shù)錯誤或觸發(fā)時序不對對比常規(guī)鎖定寄存器值抓SPI波形切換后頻率偏差大分頻比計(jì)算錯誤核對參考時鐘頻率和分頻寄存器常溫正常高低溫失敗Profile溫度適應(yīng)性差做多組Profile或定期刷新連續(xù)切換后失敗狀態(tài)機(jī)未恢復(fù)切換間插入延時SPI讀寫全失敗時序或片選問題查時鐘極性相位、片選有效電平這張表可以貼在工位上遇到問題先對照一遍能快速縮小排查范圍。6. 跳頻系統(tǒng)集成時的幾個工程經(jīng)驗(yàn)6.1 SPI總線速率與跳頻速率的平衡SPI總線速率直接決定Profile加載的快慢。AD9361的SPI支持的最高時鐘跟器件版本和布線質(zhì)量有關(guān)布得好的板子可以跑得高一些布得差的就得降速。實(shí)際工程里不要一上來就追求最高速率先保證通信穩(wěn)定再逐步提高。跳頻速率的上限不只取決于SPI還取決于PLL鎖定時間和射頻前端切換時間。如果SPI已經(jīng)很快了但跳頻速率還是上不去瓶頸可能在別處。用邏輯分析儀把整個切換過程的時間分布測出來看哪一段占的時間最長針對性優(yōu)化。另外如果系統(tǒng)里SPI總線上還掛了其他器件要注意總線仲裁和片選管理。跳頻切換是實(shí)時性要求很高的操作不能被其他SPI事務(wù)阻塞。建議給AD9361單獨(dú)的SPI通道或者用DMA方式減少CPU干預(yù)。6.2 Profile數(shù)量與頻點(diǎn)規(guī)劃的取舍AD9361支持的Profile數(shù)量有限而跳頻系統(tǒng)可能需要幾十甚至上百個頻點(diǎn)。這就涉及頻點(diǎn)規(guī)劃和Profile分配的取舍。一種做法是只把最常用的頻點(diǎn)做成Profile其他頻點(diǎn)走常規(guī)鎖定。這樣常用頻點(diǎn)切換快不常用的慢一點(diǎn)但也能用。另一種做法是把頻點(diǎn)分組每組用一個Profile組內(nèi)微調(diào)。這種做法切換速度快但頻率精度可能受影響。具體怎么選看你的系統(tǒng)對跳頻速率和頻率精度的要求。如果速率優(yōu)先就多分幾組如果精度優(yōu)先就老老實(shí)實(shí)一個頻點(diǎn)一個Profile不夠用就換支持更多Profile的器件或者外掛存儲。6.3 與基帶側(cè)的協(xié)同F(xiàn)ast Lock只管射頻本振的切換基帶側(cè)的數(shù)據(jù)收發(fā)也要跟著切換。如果射頻切過去了但基帶還在處理上一個頻點(diǎn)的數(shù)據(jù)就會出現(xiàn)數(shù)據(jù)錯亂。所以跳頻系統(tǒng)的軟硬件設(shè)計(jì)里射頻切換和基帶切換要有明確的同步機(jī)制。常見的做法是用一個硬件觸發(fā)信號同時觸發(fā)AD9361的Profile切換和基帶的頻點(diǎn)更新?;蛘哂密浖顟B(tài)機(jī)射頻切換完成后置一個標(biāo)志基帶檢測到標(biāo)志再更新。不管哪種方式都要保證兩邊的時間對齊不能出現(xiàn)射頻已經(jīng)切了、基帶還沒切的情況。調(diào)試的時候可以用邏輯分析儀同時抓射頻切換觸發(fā)信號和基帶更新信號看兩者的時間差。這個時間差要控制在一個可接受的范圍內(nèi)具體值取決于你的幀結(jié)構(gòu)和保護(hù)間隔設(shè)計(jì)。6.4 實(shí)測數(shù)據(jù)記錄與回歸測試跳頻系統(tǒng)調(diào)好后一定要做完整的實(shí)測數(shù)據(jù)記錄。每個頻點(diǎn)的鎖定時間、鎖定后的頻率誤差、連續(xù)切換的穩(wěn)定性都要有數(shù)據(jù)。這些數(shù)據(jù)不僅是驗(yàn)收依據(jù)更是后面出問題時的對比基準(zhǔn)。回歸測試也很重要。每次改代碼或者改硬件都要把跳頻測試跑一遍確認(rèn)沒有引入新的問題。我見過太多“改了一個看似無關(guān)的地方結(jié)果跳頻掛了”的案例。自動化測試腳本能幫大忙把切換、輪詢、記錄都做成腳本一鍵跑完所有頻點(diǎn)。測試環(huán)境要盡量模擬實(shí)際工作條件溫度、供電、負(fù)載都考慮進(jìn)去。實(shí)驗(yàn)室常溫常壓下調(diào)好的參數(shù)到了實(shí)際環(huán)境可能就不適用了。早發(fā)現(xiàn)早解決別等到現(xiàn)場出問題再回頭查。7. 寫在最后的一點(diǎn)個人體會Fast Lock這個功能官方文檔給的信息其實(shí)夠用但夠用和好用之間隔著大量實(shí)操細(xì)節(jié)。我剛開始配的時候也是被0x247讀回0x80卡了好幾天后來發(fā)現(xiàn)根因是參考時鐘的負(fù)載電容焊錯了導(dǎo)致時鐘波形畸變。這種問題文檔不會告訴你只能靠一步步排查。我的建議是調(diào)試Fast Lock的時候把邏輯分析儀和頻譜儀都接上SPI波形和射頻輸出同時看。很多問題單看寄存器值看不出來但波形一抓就清楚了。另外常規(guī)鎖定是Fast Lock的基礎(chǔ)常規(guī)都跑不穩(wěn)別碰Fast Lock。最后分享一個小技巧Profile寫完后別急著跑跳頻先手動觸發(fā)幾次加載每次加載后讀回工作寄存器跟Profile區(qū)對比。確認(rèn)加載無誤后再跑連續(xù)跳頻。這一步多花十分鐘能省掉后面幾小時的抓狂。