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