<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Atmosphere</title>
  
  <subtitle>IN PURSUIT OF FREEDOM</subtitle>
  <link href="https://blog.awa.moe/atom.xml" rel="self"/>
  
  <link href="https://blog.awa.moe/"/>
  <updated>2024-06-12T15:47:30.806Z</updated>
  <id>https://blog.awa.moe/</id>
  
  <author>
    <name>TheSnowfield</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>又摔壞了一個溫度計</title>
    <link href="https://blog.awa.moe/2024/06/12/fix-thermometer/"/>
    <id>https://blog.awa.moe/2024/06/12/fix-thermometer/</id>
    <published>2024-06-12T15:20:06.000Z</published>
    <updated>2024-06-12T15:47:30.806Z</updated>
    
    <content type="html"><![CDATA[<p>我在發燒的時候往往會顧前不顧後，非常容易摔東西。<br>這應該算是我摔壞的第三個溫度計了。前兩次壞的都是水銀式的，不過沒想到的是，這次把一個電子溫度計給鯊了。</p><span id="more"></span><p>心中大罵<del>f**k</del>，溫度計自從摔地上之後就顯示 L。有可能是<code>Low Battery</code>，也有可能是<code>Low Temperature</code>… 但是量了電池電壓，是 1.5v，那就排除了電池問題。</p><p>於是拆開一看，傻眼了()<br><img src="/../static/fix-thermometer/Snipaste_2024-06-12_23-43-43.jpg" alt="img"></p><p>原來是熱電偶的線給我摔炸了啊xxx<br>那還不修起來，飛線飛線。 此時我還在發高燒 39 度，但爲了能量體溫，那也沒辦法了。</p><h2 id="進行飛線修復"><a href="#進行飛線修復" class="headerlink" title="進行飛線修復"></a>進行飛線修復</h2><p>先把線飛出來，然後用三秒油固化防止短路。<br><img src="/../static/fix-thermometer/Snipaste_2024-06-12_23-33-41.jpg" alt="img"></p><p>然後焊接到斷掉線的焊盤上，這個步驟比較困難，因爲線很細，而且溫度計的 PCB 也很小。<br><img src="/../static/fix-thermometer/Snipaste_2024-06-12_23-32-24.jpg" alt="img"></p><h2 id="修好了-繼續躺"><a href="#修好了-繼續躺" class="headerlink" title="修好了 繼續躺"></a>修好了 繼續躺</h2><p><img src="/../static/fix-thermometer/Snipaste_2024-06-12_23-38-07.jpg" alt="img"><br>(又省錢了 (不是<br>其實在意識到溫度計可能壞了之後，馬上就買了新的，但是新的還沒到… 當時氣得想去小料庫找 NTC 用 Arduino 自己先搓一個。</p><p>算了，總之繼續躺了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;我在發燒的時候往往會顧前不顧後，非常容易摔東西。&lt;br&gt;這應該算是我摔壞的第三個溫度計了。前兩次壞的都是水銀式的，不過沒想到的是，這次把一個電子溫度計給鯊了。&lt;/p&gt;</summary>
    
    
    
    <category term="修修補補的寶貴經驗" scheme="https://blog.awa.moe/categories/%E4%BF%AE%E4%BF%AE%E8%A3%9C%E8%A3%9C%E7%9A%84%E5%AF%B6%E8%B2%B4%E7%B6%93%E9%A9%97/"/>
    
    
  </entry>
  
  <entry>
    <title>給 kmod 簽名以支援安全啓動</title>
    <link href="https://blog.awa.moe/2024/03/21/kmod-signing/"/>
    <id>https://blog.awa.moe/2024/03/21/kmod-signing/</id>
    <published>2024-03-21T03:53:50.000Z</published>
    <updated>2024-03-21T16:32:09.897Z</updated>
    
    <content type="html"><![CDATA[<p>印象中似乎很久沒有寫 blog 了。<br>生活中積累了都是一些比較零碎的東西，沒有什麼特別值得寫的。</p><p>半年前買了一台 surface pro 9 之後，直接 ntr 裝了 debian。<br>雖然半年使用體驗下來，個人覺得一致性體驗會比正統 windows 差點，但我仍然通過很多小技巧讓 linux 成爲了我的主力。 <del>我就不買macbook 我就不買 就不買 氣死你們</del></p><p>這篇 blog 大概用作備忘，每次滾內核都要手動簽一下，挺煩的<br>就幾個命令的事情，所以還不想去手動去配 dkms，懶了懶了</p><span id="more"></span><h2 id="關於安全啓動"><a href="#關於安全啓動" class="headerlink" title="關於安全啓動"></a>關於安全啓動</h2><p>安全啓動固然好，但是有些時候又想偷懶。畢竟我都有 root 了我還有什麼不能幹的x<br>主要問題是，在啓動 kernel 之後，內核似乎會同時啓用 kmod 的簽名檢查，讓一些原本沒有簽名的模塊無法正常加載。<br>比如設備驅動、虛擬機內核模塊 等(真的是很浪費時間耶</p><p>至於如何在 surface 啓用安全啓動，這邊就不再贅述了，如果你同樣有 surface 運行 linux 的需求，你可以跟隨 GitHub 上的 linux-surface 項目的 wiki 進行配置。</p><p>(大抵還是 mok 那一套</p><h2 id="簽名流程"><a href="#簽名流程" class="headerlink" title="簽名流程"></a>簽名流程</h2><p>因爲我這邊需要簽名的東西是 vmware 的 vmmon 和 vmnet，所以我就以這兩個模塊爲例。<br>你問我都 linux 了爲什麼不用 kvm? 大概還是因爲習慣了 vmware，畢竟還需要管理一些 esxi 實例。二者都可以，只是對我來說 vmware 方便而已了。</p><p>簽名流程非常簡單。首先，你需要一個私鑰和一個公鑰。然後，你需要將公鑰加入到你的 MOK 中，這樣你的內核就會信任你的模塊了。<br>那麼上命令吧。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ sudo /usr/src/linux-headers-$(<span class="built_in">uname</span> -r)/scripts/sign-file \</span><br><span class="line">  sha256       \</span><br><span class="line">  &lt;mok priv&gt;   \</span><br><span class="line">  &lt;mok public&gt; \</span><br><span class="line">  $(modinfo -n &lt;mod&gt;)</span><br></pre></td></tr></table></figure><p>其中，<code>&lt;mok priv&gt;</code> 是你的私鑰，<code>&lt;mok public&gt;</code> 是你的公鑰，<code>&lt;mod&gt;</code> 是你要簽名的模塊，如果你有正常跟隨 surface-linux 的 wiki 配置安全啓動的話，你應該會有一個密鑰對，直接用它們就行。</p><p>這樣，模塊就被簽名好了。直接用 modprobe 或者 insmod 加載上去就行。<br>或者更簡單一些，reboot。</p><p>這個方法同樣適用於 virtualbox，簽完加載即可。<br>順便說一句 virtualbox 的3D圖形加速有大約 300MB&#x2F;s 內存泄漏，開機直接被 oom kill。xs</p><h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul><li>[1] I can’t execute command modprobe vboxdrv<br><a href="https://stackoverflow.com/questions/38437264/i-cant-execute-command-modprobe-vboxdrv">https://stackoverflow.com/questions/38437264/i-cant-execute-command-modprobe-vboxdrv</a></li><li>[2] linux-surface&#x2F;wiki&#x2F;Secure-Boot<br><a href="https://github.com/linux-surface/linux-surface/wiki/Secure-Boot">https://github.com/linux-surface/linux-surface/wiki/Secure-Boot</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;印象中似乎很久沒有寫 blog 了。&lt;br&gt;生活中積累了都是一些比較零碎的東西，沒有什麼特別值得寫的。&lt;/p&gt;
&lt;p&gt;半年前買了一台 surface pro 9 之後，直接 ntr 裝了 debian。&lt;br&gt;雖然半年使用體驗下來，個人覺得一致性體驗會比正統 windows 差點，但我仍然通過很多小技巧讓 linux 成爲了我的主力。 &lt;del&gt;我就不買macbook 我就不買 就不買 氣死你們&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;這篇 blog 大概用作備忘，每次滾內核都要手動簽一下，挺煩的&lt;br&gt;就幾個命令的事情，所以還不想去手動去配 dkms，懶了懶了&lt;/p&gt;</summary>
    
    
    
    <category term="Linux" scheme="https://blog.awa.moe/categories/Linux/"/>
    
    
  </entry>
  
  <entry>
    <title>無聊拍點月餅</title>
    <link href="https://blog.awa.moe/2023/10/06/photography/mooncake-2023/mooncake-2023/"/>
    <id>https://blog.awa.moe/2023/10/06/photography/mooncake-2023/mooncake-2023/</id>
    <published>2023-10-06T13:58:31.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/static/photography/mooncake-2023/DSC02742.jpg" alt="想吃月餅的初音 ILCE-7RM2, 1/5&quot;, ISO-800, f/14 70mm"><br><a href="/static/photography/mooncake-2023/DSC02742_origin.jpg">DSC02742_origin.jpg</a></p><span id="more"></span><p><img src="/static/photography/mooncake-2023/DSC02735.jpg" alt="蛋黃豆沙 ILCE-7RM2, 1/60&quot;, ISO-800, f/5.6 70mm"><br><a href="/static/photography/mooncake-2023/DSC02735_original.jpg">DSC02735_origin.jpg</a></p><p><img src="/static/photography/mooncake-2023/DSC02738.jpg" alt="蛋黃豆沙-切開 ILCE-7RM2, 1/25&quot;, ISO-800, f/9.0 70mm"><br><a href="/static/photography/mooncake-2023/DSC02738_original.jpg">DSC02738_origin.jpg</a></p><p>拍照無時無刻不提醒著我該攢錢搞個好點的裝備了 (<br><del>我要長焦 我要長焦 我要長焦 我要長焦 我要長焦</del></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;&lt;img src=&quot;/static/photography/mooncake-2023/DSC02742.jpg&quot; alt=&quot;想吃月餅的初音 ILCE-7RM2, 1/5&amp;quot;, ISO-800, f/14 70mm&quot;&gt;&lt;br&gt;&lt;a href=&quot;/static/photography/mooncake-2023/DSC02742_origin.jpg&quot;&gt;DSC02742_origin.jpg&lt;/a&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="攝影攝像" scheme="https://blog.awa.moe/categories/%E6%94%9D%E5%BD%B1%E6%94%9D%E5%83%8F/"/>
    
    
  </entry>
  
  <entry>
    <title>發光應援棒的改造 (拆解概覽)</title>
    <link href="https://blog.awa.moe/2023/10/05/magical-mirai/light-stick/teardown/"/>
    <id>https://blog.awa.moe/2023/10/05/magical-mirai/light-stick/teardown/</id>
    <published>2023-10-04T17:20:23.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<h2 id="關於應援棒的組成"><a href="#關於應援棒的組成" class="headerlink" title="關於應援棒的組成"></a>關於應援棒的組成</h2><p>應援棒, 顧名思義呈棒狀。當然也有一些特殊的形狀：比如棒上頂一個球 或者星星 之類,<br>但這種特殊棒不是這次改造的目標。</p><p><strong>通常的應援棒大體由兩部分組成, 可以 擰下來的柔光罩 和 柄身。</strong><br>柄身的 LED 發光, 照射在柔光罩上, 柔光罩上的柄圖會將光線散射開來, 形成柔和的光線。</p><span id="more"></span><p><img src="/static/magical-mirai/light-stick/teardown/DSC02717.jpg" alt="マジカルミライ 2023 應援棒 - Author: TheSnowfield"></p><p>此外柔光罩可以更換柄圖, 可以根據自己的喜好而定,<br>但大部分正常人的 DIY 也就到此爲止了。</p><p>至於比較激進的那些厄介大佬, 其性質會嚴重影響 live 觀看體驗, 原則上是不提倡的<br>所以本次改造基於 <strong>不影響他人體驗</strong> 為基礎</p><h3 id="柔光罩結構"><a href="#柔光罩結構" class="headerlink" title="柔光罩結構"></a>柔光罩結構</h3><p>既然要改造, 那想必要如何去固定内部結構以達到最大的耐久性。</p><p>初步觀察, 柔光罩頂部有一個頂蓋, 它有兩個十分堅固的卡扣。<br>它看上去非常合理, 頂蓋卡扣扣死内部的小圓片,<br>裏應外合卡住頂蓋防止脫落。</p><p><img src="/static/magical-mirai/light-stick/teardown/structure_of_light_stick.jpg" alt="柔光罩結構 - Author: TheSnowfield"></p><p>那麽把它換成pcb, 在達到相同作用的同時, 還能為我們提供一個 pcb 的固定點,<br>以及作爲電池的觸點。不由得感嘆, 真是完美的設計!</p><h3 id="頂蓋内側的秘密"><a href="#頂蓋内側的秘密" class="headerlink" title="頂蓋内側的秘密"></a>頂蓋内側的秘密</h3><p>讓我萬萬沒想到的是, 我嘗試了無數種方法去試圖戳頂蓋卡扣, 它竟紋絲不動。<br>柔光罩長度大約 20cm, 在拆解的時候力臂很短, 使不上勁。<br>外加卡扣的塑料質地意外的硬, 導致很難弄開。</p><p>然後我就放棄直接戳卡扣轉而去撬頂蓋, 結果大力出奇跡:</p><p><img src="/static/magical-mirai/light-stick/teardown/piece_of_cover.jpg" alt="被拆碎了的頂蓋 - Author: TheSnowfield"></p><p>柔光罩蓋子被我幹碎了, 但導致我拆不下來的罪魁禍首也找到了: 原來是有膠。<br>好家夥, 還沒開始就結束了, 直接損 200 mmp)</p><p>可能在設計之初就考慮了拆卸, 但是量產之後發現公差太大卡扣不牢固,<br>所以破罐子破摔直接上硬膠粘接, 導致現在拆解困難。</p><p><del>這可怎麽辦…. 要不買一個別的棒子試試</del></p><h3 id="柄身結構"><a href="#柄身結構" class="headerlink" title="柄身結構"></a>柄身結構</h3><p>柄身由 燈頭, 電路板, 按鈕, 電池倉 組成, 拆解時總體來說比較輕鬆。<del>至少沒有膠</del><br>只需要拆下燈頭兩側的螺絲, 再把電池倉往内推, 此時燈頭會被推出來。然後用一個東西戳住背後的 <code>hot buton</code> (圓形的那個), 就全部拆出來了。</p><p><img src="/static/magical-mirai/light-stick/teardown/DSC02719.jpg" alt="柄身的按鈕與電池倉 - Author: TheSnowfield"></p><h3 id="PCB"><a href="#PCB" class="headerlink" title="PCB"></a>PCB</h3><p>既然拆出來了那肯定要喵一眼 PCB 啦!<br><img src="/static/magical-mirai/light-stick/teardown/DSC02721.jpg" alt="主板及電池倉 - Author: TheSnowfield"></p><p>主板鑲嵌在塑料電池倉内, 透過一個摺彎過的的金屬絲與電池負極接觸, 另一邊則是電池的正極。二者的組裝方式都是透過焊接在 PCB 上進行的。</p><p>而且<del>你這個回流焊是不是翻車了啊, 繞綫電感怎麽躺著貼上去了? 我要給0分</del></p><h4 id="主板"><a href="#主板" class="headerlink" title="主板"></a>主板</h4><p><img src="/static/magical-mirai/light-stick/teardown/DSC02723.jpg" alt="主板細節 - Author: TheSnowfield"></p><p>强迫症受不了了, 把繞綫電感重新給他貼了一遍。</p><p>主板上有三個小按鈕, 看著質感非常不錯。是下了足夠的成本的 (欣賞</p><p>看看是什麽方案呢… 喔草, 你直接就是不打標是吧 (<br>而且越看越像STC..要不要讓姚老闆來認認貨 XD 。不過這個主控的秘密我們放到之後有時間了再研究</p><h4 id="LED-燈珠"><a href="#LED-燈珠" class="headerlink" title="LED 燈珠"></a>LED 燈珠</h4><p>就這個燈珠而言, 給的還是很良心的。<br>至少這個燈珠除了基本的 RGB 三通道以外, 還增添了兩個額外的通道使其具備色溫調節功能。</p><p>這種燈珠一般叫 <code>RGBWY LED</code>, 兼具高亮和大功率以外的彩色 LED 方案。<br>W 嘛.. White, Y 嘛就是 Yellow 了。</p><p><img src="/static/magical-mirai/light-stick/teardown/DSC02720.jpg" alt="帶有 WY 通道的高亮 LED - Author: TheSnowfield"></p><p>另外絲印 <code>KB1_R_LED_V5PD</code>.. 這真的不是 kb 的板子麽?<br>我説的是 King Blade(無業配): <a href="https://ruifan.co.jp/products/pro_kb_one.html">點擊購買! &gt; KING BLADE ONE1 &lt;</a></p><p>無論從外形到設計, 以及按鈕位置和形狀… 都是一模一樣的啊!<br><del>好啊, 你給我搞 OEM 是吧.wav</del></p><h2 id="確認改造方向"><a href="#確認改造方向" class="headerlink" title="確認改造方向"></a>確認改造方向</h2><p>首先, 柔光罩的頂蓋確認是拆不下來了, 似乎只能從拆解更方便的柄身入手。<br>其次 PCB 肯定是需要重新設計的, 只不過只改動柄身的情況下似乎並不需要高成本的 pogopin 之類的了。</p><p>(似乎也是一個好消息?</p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;關於應援棒的組成&quot;&gt;&lt;a href=&quot;#關於應援棒的組成&quot; class=&quot;headerlink&quot; title=&quot;關於應援棒的組成&quot;&gt;&lt;/a&gt;關於應援棒的組成&lt;/h2&gt;&lt;p&gt;應援棒, 顧名思義呈棒狀。當然也有一些特殊的形狀：比如棒上頂一個球 或者星星 之類,&lt;br&gt;但這種特殊棒不是這次改造的目標。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;通常的應援棒大體由兩部分組成, 可以 擰下來的柔光罩 和 柄身。&lt;/strong&gt;&lt;br&gt;柄身的 LED 發光, 照射在柔光罩上, 柔光罩上的柄圖會將光線散射開來, 形成柔和的光線。&lt;/p&gt;</summary>
    
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/categories/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/tags/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    <category term="マジカルミライ" scheme="https://blog.awa.moe/tags/%E3%83%9E%E3%82%B8%E3%82%AB%E3%83%AB%E3%83%9F%E3%83%A9%E3%82%A4/"/>
    
  </entry>
  
  <entry>
    <title>發光應援棒的改造 (前言)</title>
    <link href="https://blog.awa.moe/2023/10/03/magical-mirai/light-stick/foreword/"/>
    <id>https://blog.awa.moe/2023/10/03/magical-mirai/light-stick/foreword/</id>
    <published>2023-10-03T06:52:10.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p>有幸今年去了一趟東京9.3夜場的マジカルミライ, 這次的演唱會真的是太棒了！</p><p>第一次將應援棒緊握在手中的喜悅和激動, 混合著周圍嘈雜的人群；<br>隨著音樂的律動大家整齊地開始揮舞應援棒, 會場内的天花板被晃動著的應援棒星星點點光芒映射出微微綠光；<br>小小的初音未來在透明的全息巨幕上翩翩起舞, 一旁的樂隊奮力演奏著樂器；<br>貝斯手近乎瘋狂的搖晃著腦袋, 會場内回蕩著跳躍的音符將演唱會慢慢推向高潮…</p><p>小時候的願望在今年終於實現了！</p><span id="more"></span><h2 id="就這樣結束了嗎"><a href="#就這樣結束了嗎" class="headerlink" title="就這樣結束了嗎?"></a>就這樣結束了嗎?</h2><p>那當然不是! 我想成爲下次演唱會中最靚的崽崽 (<del>當然不是厄介那種</del>), 所以我想要一個更加炫酷的應援棒!<br>於是就有了這個系列 <del>&lt;-妳好多坑沒填完欸</del></p><p>off topic:<br>而且今年比較忙, 沒怎麽寫文章 )這次來寫個大的</p><h2 id="改造的理論驗證"><a href="#改造的理論驗證" class="headerlink" title="改造的理論驗證"></a>改造的理論驗證</h2><p>我想改造的部分是光源和控制電路部分。<br>將光源換成 WS2812, 在柔光罩的中間塞上兩顆 18650, 也許可以大大提高續航能力。</p><p>一些有趣的點子:</p><ul><li>可以使用藍牙 BLE, 配對之後在持有多個應援棒的情況下, 可以同步顯示效果, 配合手機實現更多的功能</li><li>因爲光源位於柔光罩的中間, 需要靠柄身的 pogopin 來控制, 同時此設計也便於拆卸更換電池</li><li>不知道能不能做到配合角速度傳感器來實現揮舞顯示文字的功能 (因爲有柄圖會散光, 可能不好實現)</li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;有幸今年去了一趟東京9.3夜場的マジカルミライ, 這次的演唱會真的是太棒了！&lt;/p&gt;
&lt;p&gt;第一次將應援棒緊握在手中的喜悅和激動, 混合著周圍嘈雜的人群；&lt;br&gt;隨著音樂的律動大家整齊地開始揮舞應援棒, 會場内的天花板被晃動著的應援棒星星點點光芒映射出微微綠光；&lt;br&gt;小小的初音未來在透明的全息巨幕上翩翩起舞, 一旁的樂隊奮力演奏著樂器；&lt;br&gt;貝斯手近乎瘋狂的搖晃著腦袋, 會場内回蕩著跳躍的音符將演唱會慢慢推向高潮…&lt;/p&gt;
&lt;p&gt;小時候的願望在今年終於實現了！&lt;/p&gt;</summary>
    
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/categories/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/tags/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    <category term="マジカルミライ" scheme="https://blog.awa.moe/tags/%E3%83%9E%E3%82%B8%E3%82%AB%E3%83%AB%E3%83%9F%E3%83%A9%E3%82%A4/"/>
    
  </entry>
  
  <entry>
    <title>維修友善之臂 NanoPi R1</title>
    <link href="https://blog.awa.moe/2022/11/20/fix-friendlyelec-nanopi-r1/"/>
    <id>https://blog.awa.moe/2022/11/20/fix-friendlyelec-nanopi-r1/</id>
    <published>2022-11-19T21:21:36.000Z</published>
    <updated>2024-03-17T08:02:39.839Z</updated>
    
    <content type="html"><![CDATA[<p>今天來幫朋友修一個 <code>友善之臂 NanoPi R1</code>。</p><p>最近在忙著做 H3 的核心板, 朋友想幫個忙什麽的就寄過來了一個被他搞寄的 H3 開發板, 好讓我來參考參考。<br>所以我認爲 <strong>一個優秀的硬體工程師不僅要懂得怎麽去創造自己的作品, 還要懂得如何去檢測和維修</strong>。<br>咳咳.. 扯遠了2333。言歸正傳, 先來看看故障。</p><span id="more"></span><p>經朋友描述, 他把這個板子放進背包挂上充電寶, 然後綫不知道怎麽的被扭了一下, 就寄了。<br>他自己嘗試維修過, 拆了一個 dcdc 降壓晶片, 但是故障依舊。</p><p>既然知道了大概原因, 那麽我們就來順著這個方向看看。</p><h2 id="對於大短路情況的檢修"><a href="#對於大短路情況的檢修" class="headerlink" title="對於大短路情況的檢修"></a>對於大短路情況的檢修</h2><p>維修廝常把「燒機」二字挂嘴邊。畢竟這是對於大短路故障的最快定位問題的辦法。<br>那麽我們也可以來。供電接入可調電源, 3V燒機, 限流1A。</p><p>焊接兩根燒機綫。<br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-26-48.jpg" alt="img"></p><p>可以看到, 電壓被硬生生拉到了 2.6v, 對地大短路。<br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-27-46.jpg" alt="img"><br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-32-04.jpg" alt="img"></p><p>從熱成像的圖可以看出, CPU 核心對地大短路。 (<del>這是真寄了</del>)<br>根據 H3 的手冊, 我們可以參考芯片明顯發熱的區域, 對應位置正好是 <code>VCC-3v3-IO</code> 和 <code>VCC-1v2-SYS</code>。<br>所以可以先盲猜炸了兩路供電。<br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-36-33.jpg" alt="img"></p><p>不管怎樣, 先把 CPU 拆下來再説。<br>熱風槍 350 度加熱, 用鑷子掀翻就行。<br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-39-53.jpg" alt="img"><br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-40-47.jpg" alt="img"></p><p><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-42-47.jpg" alt="img"><br>重新上電燒機, 大短路問題就處理好了, 看起來確實是 CPU 被擊穿導致。<br>那麽接下來就是挨個檢查供電了, 而且著重檢查上邊提到的那兩路供電。</p><h2 id="參考著圖紙來維修"><a href="#參考著圖紙來維修" class="headerlink" title="參考著圖紙來維修"></a>參考著圖紙來維修</h2><p>所幸的是, NanoPi-R1 是開源的, 所以我們能很輕易在網路上找到它的原理圖</p><p><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-48-48.jpg" alt="img"><br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-51-11.jpg" alt="img"></p><p>上圖分別是 <code>VCC-3v3-IO</code> 和 <code>VCC-1v2-SYS</code> 的電路,<br>可以看到 <code>VCC-3v3-IO</code> 的輸出電感是 <code>L4</code>, <code>VCC-1v2-SYS</code> 的輸出電感是 <code>L3</code>。<br>那麽就去板子上找吧。</p><p><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-54-32.jpg" alt="img"><br>看起來被朋友自行維修並拆掉的 dcdc 晶片是它了, 它負責 <code>VCC-3v3-IO</code> 的供電。</p><p><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_06-54-49.jpg" alt="img"><br>上電看看 <code>VCC-1v2-SYS</code>, 輸出 5v! 這是直接把 1v2 擊穿了捅了 5v 到 H3… <del>不知道怎麽搞的</del></p><p>所以跟我一開始猜測的一致, 就是這兩路供電炸了。<br>那麽問題就都好解決了, 換掉對應的 dcdc 晶片, 問題就修好。</p><h2 id="漏網之魚"><a href="#漏網之魚" class="headerlink" title="漏網之魚"></a>漏網之魚</h2><p>當我滿心歡喜覺得快修好了之後, 重新上電測試發現, 它又恢復大短路狀態了。(草)<br>難道還有第三処炸管的地方?</p><p>經過熱成像排查, 忘記拍照了 )<br>這次出問題的地方是另一個 dcdc, 它負責 <code>VCC-1v1-CPUX</code> 的供電。<br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_07-02-55.jpg" alt="img"></p><p>直接換新的晶片吧。</p><h2 id="收尾工作"><a href="#收尾工作" class="headerlink" title="收尾工作"></a>收尾工作</h2><p>該修的都修的差不多了, 開可調電源打到 5v&#x2F;2A 欄位, 不出現短路。<br>各路 dcdc 穩壓電路工作正常。那麽就是時候裝新的 H3 上去看看了。</p><p>接上串口綫, 打印了一些 kernel 啓動的日志。<br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_07-11-51.jpg" alt="img"></p><p>發熱均匀, 沒有明顯的熱點, 工作完美 XD。<br><img src="/../static/fix-friendlyelec-nanopi-r1/Snipaste_2022-11-20_07-09-15.jpg" alt="img"></p><p>那麽剩下的事情就是洗洗刷刷乾净, 包好發回去了 <del>順便到付兩塊紅磚</del>。</p><h2 id="總結"><a href="#總結" class="headerlink" title="總結"></a>總結</h2><ul><li>把電源修好通常能解決大部分故障</li><li>對地大短路問題一般是最好修的, 哪裡炸了換哪裡</li><li>可以根據 CPU 短路發熱的位置猜測是哪路供電炸了</li><li>跟著圖紙來, 善用萬用表</li></ul><p>最後, 問題推測。這個板子沒有過壓保護電路的設計, 意味著如果電壓出現毛刺, 超過了 dcdc 的工作電壓就有概率擊穿。<br>所以扭了一下電源線, 還就真的可能炸機 (((</p><h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul><li>[1] FriendlyElec NanoPi R1<br><a href="https://www.friendlyelec.com/index.php?route=product/product&product_id=248">https://www.friendlyelec.com/index.php?route=product/product&product_id&#x3D;248</a></li><li>[2] NanoPi R1 原理圖參考<br><a href="http://wiki.friendlyelec.com/wiki/images/a/ab/NanoPi_R1_V1.0_1809-Schematic.pdf">http://wiki.friendlyelec.com/wiki/images/a/ab/NanoPi_R1_V1.0_1809-Schematic.pdf</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;今天來幫朋友修一個 &lt;code&gt;友善之臂 NanoPi R1&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;最近在忙著做 H3 的核心板, 朋友想幫個忙什麽的就寄過來了一個被他搞寄的 H3 開發板, 好讓我來參考參考。&lt;br&gt;所以我認爲 &lt;strong&gt;一個優秀的硬體工程師不僅要懂得怎麽去創造自己的作品, 還要懂得如何去檢測和維修&lt;/strong&gt;。&lt;br&gt;咳咳.. 扯遠了2333。言歸正傳, 先來看看故障。&lt;/p&gt;</summary>
    
    
    
    <category term="修修補補的寶貴經驗" scheme="https://blog.awa.moe/categories/%E4%BF%AE%E4%BF%AE%E8%A3%9C%E8%A3%9C%E7%9A%84%E5%AF%B6%E8%B2%B4%E7%B6%93%E9%A9%97/"/>
    
    
    <category term="修修補補的寶貴經驗" scheme="https://blog.awa.moe/tags/%E4%BF%AE%E4%BF%AE%E8%A3%9C%E8%A3%9C%E7%9A%84%E5%AF%B6%E8%B2%B4%E7%B6%93%E9%A9%97/"/>
    
    <category term="AllWinner H3" scheme="https://blog.awa.moe/tags/AllWinner-H3/"/>
    
  </entry>
  
  <entry>
    <title>嘗試移植 Micro Python 到 RTL-8710</title>
    <link href="https://blog.awa.moe/2022/10/22/rtl8710-with-mpy/"/>
    <id>https://blog.awa.moe/2022/10/22/rtl8710-with-mpy/</id>
    <published>2022-10-22T04:30:02.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p>無聊在自己的藏寶箱 <del>全是廢舊電子開發板</del> 中找到了兩三片已經吃灰數年的 RTL-00 模塊,<br>大概幾年前玩 ESP8266 的時候, 有大佬吹這個模塊有多棒多棒, 然後跟風就買了一些。但是就一直沒用上。</p><span id="more"></span><p>於是乎, 今天意外地把它從塵封的箱子中翻了出來。<br>順便最近一直想玩 Micro Python, 就看看能不能順便玩玩。<br>那就開始吧 XD</p><h2 id="魔改-NodeMCU"><a href="#魔改-NodeMCU" class="headerlink" title="魔改 NodeMCU"></a>魔改 NodeMCU</h2><p><img src="/../static/rtl8710-with-mpy/Snipaste_2022-10-22_12-40-22.jpg" alt="img"></p><p>RTL-00 模塊從設計上就和 ESP8266 模塊 P2P (<em>Pin-To-Pin</em>) 兼容,<br>所以可以直接代換, 不會出問題。</p><p>那我就直接用 NodeMCU 開刀了。 (以前買了不少這個板子<br>然後只需要按照下表接綫</p><table><thead><tr><th align="left">CMSIS-DAP</th><th></th><th align="left">NodeMCU</th></tr></thead><tbody><tr><td align="left">3V3</td><td>-&gt;</td><td align="left">3V</td></tr><tr><td align="left">GND</td><td>-&gt;</td><td align="left">G</td></tr><tr><td align="left">SWDIO</td><td>-&gt;</td><td align="left">D6</td></tr><tr><td align="left">SWCLK</td><td>-&gt;</td><td align="left">D0</td></tr><tr><td align="left">RX</td><td>-&gt;</td><td align="left">TX</td></tr><tr><td align="left">TX</td><td>-&gt;</td><td align="left">RX</td></tr></tbody></table><p>然後再用 OpenOCD 試著連上板子。<br>如果一切工作, 將會看到 OpenOCD 識別到一個 Cortex-M3 核。</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; openocd -f interface/cmsis-dap.cfg -f target/ameba1-mod.cfg</span><br></pre></td></tr></table></figure><details>  <summary>展開命令行輸出</summary><p>Open On-Chip Debugger 0.11.0 (2021-11-18) [<a href="https://github.com/sysprogs/openocd]">https://github.com/sysprogs/openocd]</a><br>Licensed under GNU GPL v2<br>libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3<br>For bug reports, read<br>        <a href="http://openocd.org/doc/doxygen/bugs.html">http://openocd.org/doc/doxygen/bugs.html</a><br>Info : auto-selecting first available session transport “swd”. To override use ‘transport select <transport>‘.<br>ameba1_init<br>Info : Listening on port 6666 for tcl connections<br>Info : Listening on port 4444 for telnet connections<br>Info : CMSIS-DAP: SWD  supported<br>Info : CMSIS-DAP: JTAG supported<br>Info : CMSIS-DAP: Atomic commands supported<br>Info : CMSIS-DAP: FW Version &#x3D; 0254<br>Info : CMSIS-DAP: Serial# &#x3D; 0700000105deff3834334e4643206540a5a5a5a597969908<br>Info : CMSIS-DAP: Interface Initialised (SWD)<br>Info : SWCLK&#x2F;TCK &#x3D; 1 SWDIO&#x2F;TMS &#x3D; 1 TDI &#x3D; 1 TDO &#x3D; 1 nTRST &#x3D; 0 nRESET &#x3D; 1<br>Info : CMSIS-DAP: Interface ready<br>Info : clock speed 10000 kHz<br>Info : SWD DPIDR 0x2ba01477<br>Info : rtl8195a.cpu: Cortex-M3 r2p1 processor detected<br>Info : rtl8195a.cpu: target has 6 breakpoints, 4 watchpoints<br>Info : starting gdb server for rtl8195a.cpu on 3333<br>Info : Listening on port 3333 for gdb connections</p></details><p><strong>CMSIS-DAP 几乎是基操了。</strong><br><strong>所以如果你常玩 ARM 設備, 我會推薦你買一個 CMSIS-DAP。</strong></p><p>附一個我改過的 target 配置。<br>來源 <a href="https://github.com/drasko/rtl8710-sdk-3.5a/tree/e94bc8d7765bbddaf979efa89f7efdc879c94ae5/component/soc/realtek/8195a/misc/gcc_utility/openocd">drasko&#x2F;rtl8710-sdk-3.5a</a></p><details><summary>ameba1-mod.cfg</summary><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br></pre></td><td class="code"><pre><span class="line"># Main file for Ameba1 series Cortex-M3 parts</span><br><span class="line">#</span><br><span class="line"># !!!!!!</span><br><span class="line">#</span><br><span class="line"></span><br><span class="line">set CHIPNAME rtl8195a</span><br><span class="line">set CHIPSERIES ameba1</span><br><span class="line"></span><br><span class="line"># Adapt based on what transport is active.</span><br><span class="line">source [find target/swj-dp.tcl]</span><br><span class="line"></span><br><span class="line">if &#123; [info exists CHIPNAME] &#125; &#123;</span><br><span class="line">  set _CHIPNAME $CHIPNAME</span><br><span class="line">&#125; else &#123;</span><br><span class="line">  error &quot;CHIPNAME not set. Please do not include ameba1.cfg directly.&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">if &#123; [info exists CHIPSERIES] &#125; &#123;</span><br><span class="line">  # Validate chip series is supported</span><br><span class="line">  if &#123; $CHIPSERIES != &quot;ameba1&quot; &#125; &#123;</span><br><span class="line">    error &quot;Unsupported chip series specified.&quot;</span><br><span class="line">  &#125;</span><br><span class="line">  set _CHIPSERIES $CHIPSERIES</span><br><span class="line">&#125; else &#123;</span><br><span class="line">  error &quot;CHIPSERIES not set. Please do not include ameba1.cfg directly.&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">if &#123; [info exists CPUTAPID] &#125; &#123;</span><br><span class="line">  # Allow user override</span><br><span class="line">  set _CPUTAPID $CPUTAPID</span><br><span class="line">&#125; else &#123;</span><br><span class="line">  # Ameba1 use a Cortex M3 core.</span><br><span class="line">  if &#123; $_CHIPSERIES == &quot;ameba1&quot; &#125; &#123;</span><br><span class="line">    if &#123; [using_jtag] &#125; &#123;</span><br><span class="line">      set _CPUTAPID 0x4ba00477</span><br><span class="line">    &#125; &#123;</span><br><span class="line">      set _CPUTAPID 0x2ba01477</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID</span><br><span class="line"></span><br><span class="line">set _TARGETNAME $_CHIPNAME.cpu</span><br><span class="line">dap create $_CHIPNAME.dap -chain-position $_TARGETNAME</span><br><span class="line">target create $_TARGETNAME cortex_m -dap $_CHIPNAME.dap</span><br><span class="line"></span><br><span class="line"># Run with *real slow* clock by default since the</span><br><span class="line"># boot rom could have been playing with the PLL, so</span><br><span class="line"># we have no idea what clock the target is running at.</span><br><span class="line">adapter speed 10</span><br><span class="line"></span><br><span class="line"># delays on reset lines</span><br><span class="line">adapter srst delay 200</span><br><span class="line">if &#123;[using_jtag]&#125; &#123;</span><br><span class="line">  jtag_ntrst_delay 200</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"># Ameba1 (Cortex M3 core) support SYSRESETREQ</span><br><span class="line">if &#123;![using_hla]&#125; &#123;</span><br><span class="line">  # if srst is not fitted use SYSRESETREQ to</span><br><span class="line">  # perform a soft reset</span><br><span class="line">  cortex_m reset_config sysresetreq</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">$_TARGETNAME configure -event reset-init &#123;ameba1_init&#125;</span><br><span class="line"></span><br><span class="line"># Ameba1 SDRAM enable</span><br><span class="line">proc ameba1_init &#123; &#125; &#123;</span><br><span class="line">  # init System</span><br><span class="line">  mww 0x40000014 0x00000021</span><br><span class="line">  sleep 10</span><br><span class="line">  mww  0x40000304 0x1fc00002</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40000250 0x00000400</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40000340 0x00000000</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40000230 0x0000dcc4</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40000210 0x00011117</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40000210 0x00011157</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x400002c0 0x00110011</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40000320 0xffffffff</span><br><span class="line">  sleep 10</span><br><span class="line">  # init SDRAM</span><br><span class="line">  mww 0x40000040 0x00fcc702</span><br><span class="line">  sleep 10</span><br><span class="line">  mdw 0x40000040</span><br><span class="line">  mww 0x40005224 0x00000001</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40005004 0x00000208</span><br><span class="line">  sleep 10</span><br><span class="line">  mww 0x40005008 0xffffd000</span><br><span class="line">  sleep 13</span><br><span class="line">  mww 0x40005020 0x00000022</span><br><span class="line">  sleep 13</span><br><span class="line">  mww 0x40005010 0x09006201</span><br><span class="line">  sleep 13</span><br><span class="line">  mww 0x40005014 0x00002611</span><br><span class="line">  sleep 13</span><br><span class="line">  mww 0x40005018 0x00068413</span><br><span class="line">  sleep 13</span><br><span class="line">  mww 0x4000501c 0x00000042</span><br><span class="line">  sleep 13</span><br><span class="line">  mww 0x4000500c 0x700        ;# set Idle</span><br><span class="line">  sleep 20</span><br><span class="line">  mww 0x40005000 0x1          ;# start init</span><br><span class="line">  sleep 100</span><br><span class="line">  mdw 0x40005000</span><br><span class="line">  mww 0x4000500c 0x600        ;# enter memory mode</span><br><span class="line">  sleep 30</span><br><span class="line"></span><br><span class="line">  mww 0x40005008 0x00000000   ;# 0xf00</span><br><span class="line">  ;# mww 0x40005008 0x00000f00</span><br><span class="line">  sleep 3</span><br><span class="line">  mww 0x40000300 0x0006005e   ;# 0x5e</span><br><span class="line">  ;# mww 0x40000300 0x0000005e</span><br><span class="line">  sleep 3</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure></details><h2 id="隨手寫點固件"><a href="#隨手寫點固件" class="headerlink" title="隨手寫點固件"></a>隨手寫點固件</h2><p>算了.. 不發了, 這個坑太大了。<br>我是一邊寫 Blog 一邊研究的。文章都寫了一半了, 沒曾想完美翻車。</p><p>説起來經歷了不少坎坷。</p><ol><li><p>移植了 Standard SDK 的 HAL 庫, 發現竟然全是從 lib 中 extern 來的符號,<br>而對於寄存器結構是一點説明都沒有, 所以猜測應該是 nda 的。</p></li><li><p>其次就是因爲沒有 flash 驅動, 要自己從頭寫。所以沒辦法在 OpenOCD 中下載固件,<br>因爲上面 nda 的原因, 自己寫這條路幾乎也是堵死的。不過 GitHub 上倒是有一個<a href="https://github.com/sandeepmistry/rtl8710-openocd">參考</a>, 但它不是很合我意。</p></li><li><p>最後嘗試用 OpenOCD 寫 SRAM 試圖讓固件直接在 RAM 中跑,<br>但不幸的是, 它崩了。</p></li><li><p>rust 有一個 sdk 庫。結果仔細一看它是 c binding, 實際上還是那個垃圾 Standard SDK。</p></li></ol><p>算了算了, 翻車就翻車吧</p><p><strong>最終鑒定: 沒救的電子垃圾。</strong><br>以後有時間了再搞這個, 可以按第 3 步的方法繼續嘗試。</p><h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul><li><p>[1] rtl8710 倉庫<br><a href="https://bitbucket.org/rebane/rtl8710">https://bitbucket.org/rebane/rtl8710</a></p></li><li><p>[2] rtl8710-openocd 倉庫<br><a href="https://github.com/sandeepmistry/rtl8710-openocd">https://github.com/sandeepmistry/rtl8710-openocd</a></p></li><li><p>[3] RTL8710AF Datasheet 技術資料<br><a href="https://datasheetspdf.com/pdf-file/1304447/Realtek/RTL8710AF/1">https://datasheetspdf.com/pdf-file/1304447/Realtek/RTL8710AF/1</a></p></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;無聊在自己的藏寶箱 &lt;del&gt;全是廢舊電子開發板&lt;/del&gt; 中找到了兩三片已經吃灰數年的 RTL-00 模塊,&lt;br&gt;大概幾年前玩 ESP8266 的時候, 有大佬吹這個模塊有多棒多棒, 然後跟風就買了一些。但是就一直沒用上。&lt;/p&gt;</summary>
    
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/categories/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    <category term="完美翻車" scheme="https://blog.awa.moe/tags/%E5%AE%8C%E7%BE%8E%E7%BF%BB%E8%BB%8A/"/>
    
  </entry>
  
  <entry>
    <title>自動刪除 騰訊QQ 的快取目錄</title>
    <link href="https://blog.awa.moe/2022/10/17/remove-qq-caches/"/>
    <id>https://blog.awa.moe/2022/10/17/remove-qq-caches/</id>
    <published>2022-10-17T11:27:59.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p>今天群友一如既往地在群裡抱怨 QQ 的 cache 實在是太多了, 一個賬號下就有上百 GB, 頭大。<br>我也順便去看了一下。還好, 不過大概還是有 30G 的樣子。正當 shift delete 的時候, 突然想到了一個事。</p><p>以前的做法是刪掉目錄, 用一個沒有後綴名的檔案去頂替掉目錄, 這樣就會造成打開目錄失敗達到無法寫入的目的。<br>但是 QQ 更新了之後 (想必是有上傳 Log), 這個辦法不管用了。</p><p>所以這裡提出一個我的另一個想法。</p><span id="more"></span><h3 id="利用-mklink-將-cache-目錄連接到回收站"><a href="#利用-mklink-將-cache-目錄連接到回收站" class="headerlink" title="利用 mklink 將 cache 目錄連接到回收站"></a>利用 mklink 將 cache 目錄連接到回收站</h3><p>這聽起來就很草, 來試試。</p><p>首先在 <code>Folder Options</code> <em>文件夾選項</em> 找到並關閉 <code>Hide protected operating system files</code>.<br>然後進入盤符 C, 找到 <code>C:\$Recycle.Bin\Recycle Bin</code>, 點擊路徑編輯框, 將路徑記下來。</p><p><img src="/../static/remove-qq-caches/Snipaste_2022-10-17_19-36-46.jpg" alt="img"></p><p>然後進入 QQ 的 cache 目錄, 敲入以下命令, 將目錄連接到回收站。</p><figure class="highlight bat"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&gt; mklink /J Audio F:\$RECYCLE.BIN\S-<span class="number">1</span>-<span class="number">5</span>-<span class="number">21</span>-<span class="number">3915135931</span>-<span class="number">3060788653</span>-<span class="number">94912148</span>-<span class="number">1001</span></span><br><span class="line">&gt; mklink /J Image F:\$RECYCLE.BIN\S-<span class="number">1</span>-<span class="number">5</span>-<span class="number">21</span>-<span class="number">3915135931</span>-<span class="number">3060788653</span>-<span class="number">94912148</span>-<span class="number">1001</span></span><br><span class="line">&gt; mklink /J Video F:\$RECYCLE.BIN\S-<span class="number">1</span>-<span class="number">5</span>-<span class="number">21</span>-<span class="number">3915135931</span>-<span class="number">3060788653</span>-<span class="number">94912148</span>-<span class="number">1001</span></span><br></pre></td></tr></table></figure><h4 id="實際測試"><a href="#實際測試" class="headerlink" title="實際測試"></a>實際測試</h4><p>效果不太好, 文件可以寫入到回收站, 但是實際上桌面的回收站圖標進去還是空的,<br>有可能回收站自己也有 cache 一類的東西, 直接以文件系統的方式寫入不是很行。</p><h3 id="那麽就連接到-NUL-吧"><a href="#那麽就連接到-NUL-吧" class="headerlink" title="那麽就連接到 \\.\NUL 吧"></a>那麽就連接到 \\.\NUL 吧</h3><p>StackOverflow 搜索了一番, 發現 windows 上有類似 linux 中 <code>/dev/null</code> 的内核對象叫 <code>\\.\NUL</code>。<br>那麽就改掉上邊回收站的路徑, 重新 mklink 試試。</p><p>看一看文件夾被連接到哪去了—– <del>竟然在桌面</del><br><img src="/../static/remove-qq-caches/Snipaste_2022-10-17_20-02-05.jpg" alt="img"></p><p>在 Windows 中, 你不能以 <code>NUL</code> 為名字創建一個檔案或者目錄, 想必這就是其中的原因。<br>在目錄連接到 NUL 之後, 應該不會再對硬碟有讀寫操作了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;今天群友一如既往地在群裡抱怨 QQ 的 cache 實在是太多了, 一個賬號下就有上百 GB, 頭大。&lt;br&gt;我也順便去看了一下。還好, 不過大概還是有 30G 的樣子。正當 shift delete 的時候, 突然想到了一個事。&lt;/p&gt;
&lt;p&gt;以前的做法是刪掉目錄, 用一個沒有後綴名的檔案去頂替掉目錄, 這樣就會造成打開目錄失敗達到無法寫入的目的。&lt;br&gt;但是 QQ 更新了之後 (想必是有上傳 Log), 這個辦法不管用了。&lt;/p&gt;
&lt;p&gt;所以這裡提出一個我的另一個想法。&lt;/p&gt;</summary>
    
    
    
    <category term="無聊研究" scheme="https://blog.awa.moe/categories/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    
  </entry>
  
  <entry>
    <title>STM32 上的任務調度策略 (一)</title>
    <link href="https://blog.awa.moe/2022/09/21/stm32/stm32-task-schedule-one/"/>
    <id>https://blog.awa.moe/2022/09/21/stm32/stm32-task-schedule-one/</id>
    <published>2022-09-21T02:15:01.000Z</published>
    <updated>2024-04-01T08:06:53.584Z</updated>
    
    <content type="html"><![CDATA[<p>最近難得有點空閑時間, 就來講講 STM32 上任務調度的策略吧。<br>在我的認知中, 最基本的任務調度無非有兩種方式:</p><ul><li>利用 system tick 的中斷計數</li><li>保存上下文, 利用中斷進行上下文切換</li></ul><p>這麽簡單概括肯定不方便理解, 一次講不完肯定要分兩次 (<del>挖坑</del>)。那這次就先來説説 system tick 的方式吧。</p><span id="more"></span><h2 id="什麽是-system-tick"><a href="#什麽是-system-tick" class="headerlink" title="什麽是 system tick"></a>什麽是 system tick</h2><p>這是一個 24 位的系統節拍定時器, 具有自動重載和溢出中斷功能,<br>所有基於 Cortex Profile M 的微控制器都可以由這個定时器獲得一定的時間間隔。</p><p>它每隔一段時間會產生一次中斷, 一般使用 1ms 為佳,<br>STM32 的 HAL 庫會使用 HAL_IncTick 來更新系統時間計數, 它就相當於整個單片機系統的心臟。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment">  * @brief This function handles System tick timer.</span></span><br><span class="line"><span class="comment">  */</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">SysTick_Handler</span><span class="params">(<span class="type">void</span>)</span> &#123;</span><br><span class="line">  HAL_IncTick();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>HAL_Delay 它的内部就使用 system tick 來實現等待,<br>就連 HAL 庫中阻塞調用外設的接口也是使用它來進行超時檢測的。</p><h2 id="基於-system-tick-任務調度的實現"><a href="#基於-system-tick-任務調度的實現" class="headerlink" title="基於 system tick 任務調度的實現"></a>基於 system tick 任務調度的實現</h2><p>在知道它之後, 我們來開始講怎麽去用它實現任務調度。<br>我們需要擬定一下它整個運作的生命周期:</p><p><img src="/../../static/stm32/stm32-task-schedule-one/diagram-model.svg" alt="img"></p><p>如上圖所示, 我們需要在中斷中遞增 tick_inc,<br>並在主循環中每次遍歷任務之前保存它並重置計數。 因爲中斷隨時會發生, 所以這一步要越快越好。<br>在遍歷中逐個減少任務的剩餘時間, 當有任務的剩餘時間為 0 或者小於 0 時, 執行該任務並重置它的剩餘時間。</p><p>這個模型的好處有</p><ul><li>穩定可靠</li><li>編寫和使用簡單</li><li>平台相關程式碼少, 移植方便快捷</li><li>非搶占模型, 不會發生資源衝突</li></ul><p>缺點如下</p><ul><li>無法保證調度實時性</li><li>任務過多容易造成性能瓶頸</li></ul><h2 id="基於此模型的異步-Sleep-的實現"><a href="#基於此模型的異步-Sleep-的實現" class="headerlink" title="基於此模型的異步 Sleep 的實現"></a>基於此模型的異步 Sleep 的實現</h2><p>在理解整個模型如何運作之後, 那麽實現異步等待就非常簡單了。</p><p>因爲現在所有的任務都是在 <code>Main Loop</code> 中調度的(參見圖 1.), 所以如果我們在某個任務中<br>使用了 delay (比如 HAL_Delay), 那麽勢必會造成系統假死。 因爲它會阻塞主循環, 導致調度器無法正常調度任務。</p><p>爲了解決這個問題, 我們只需要把任務調取權交給需要 delay 的函數, 並同時根據 systick 計算超時。<br>就像這樣。 當然它並沒有考慮到 systick 的溢出情況。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">void</span> <span class="title function_">scheduler_sleep</span><span class="params">(<span class="type">uint32_t</span> milliseconds)</span> &#123;</span><br><span class="line">  <span class="comment">// loop until time exceeds</span></span><br><span class="line">  <span class="type">uint32_t</span> start = tick_get_time();</span><br><span class="line">  <span class="keyword">while</span>(tick_get_time() - start &lt; milliseconds)</span><br><span class="line">    scheduler_handler();</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>需要説明的是, 如果這個 delay 時間太長且超過了任務本身的時間, 則會發生嵌套調用。<br>即: 這個任務因爲剩餘時間小於 0, 在 <code>scheduler_sleep</code> 中被執行, 並再次進入 <code>scheduler_sleep</code>, 最終導致炸棧。<br>這個問題就需要額外處理了, 本文假設不會遇到這種情況。</p><h2 id="一些儸嗦"><a href="#一些儸嗦" class="headerlink" title="一些儸嗦"></a>一些儸嗦</h2><h4 id="關於不能保證任務實時性"><a href="#關於不能保證任務實時性" class="headerlink" title="關於不能保證任務實時性"></a>關於不能保證任務實時性</h4><p>因爲執行任務的時候必定會消耗一定的時間, 如果此時單片機處理速度較慢且任務間隔時間小,<br>則會造成任務堆積導致卡頓或者響應速度變慢。</p><p>所以在使用時應提高間隔時間, 盡可能降低調度壓力。</p><h4 id="與-RTOS-的不同"><a href="#與-RTOS-的不同" class="headerlink" title="與 RTOS 的不同"></a>與 RTOS 的不同</h4><p>實際上它跟 RTOS 的任務調度方式不是一種東西, 它的任務並非「綫程」。<br>因爲不需要進行上下文切換, 且任務之間不是並行的關係, 因此也不存在資源競爭。</p><h2 id="C-語言中的實現"><a href="#C-語言中的實現" class="headerlink" title="C 語言中的實現"></a>C 語言中的實現</h2><p>我已經根據這個思路實現了一個跨平台的任務調度器，支持 async&#x2F;await，支持 tls存儲。請參考 <a href="https://github.com/TheSnowfield/frost">TheSnowfield&#x2F;frost</a>。</p><h2 id="寫到最後"><a href="#寫到最後" class="headerlink" title="寫到最後"></a>寫到最後</h2><p>如果有任何意見或者問題或是錯誤或遺漏, 請在下方評論區留言。謝謝 (๑•̀ㅂ•́)و✧</p><h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul><li>[1] STM32知识：什么是SYSTICK 作用是什么<br><a href="http://news.eeworld.com.cn/mcu/ic487932.html">http://news.eeworld.com.cn/mcu/ic487932.html</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;最近難得有點空閑時間, 就來講講 STM32 上任務調度的策略吧。&lt;br&gt;在我的認知中, 最基本的任務調度無非有兩種方式:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;利用 system tick 的中斷計數&lt;/li&gt;
&lt;li&gt;保存上下文, 利用中斷進行上下文切換&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這麽簡單概括肯定不方便理解, 一次講不完肯定要分兩次 (&lt;del&gt;挖坑&lt;/del&gt;)。那這次就先來説説 system tick 的方式吧。&lt;/p&gt;</summary>
    
    
    
    <category term="STM32" scheme="https://blog.awa.moe/categories/STM32/"/>
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/tags/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    <category term="STM32" scheme="https://blog.awa.moe/tags/STM32/"/>
    
  </entry>
  
  <entry>
    <title>先機隨身 4G WiFi 上網卡 (二) EMCP 擴容</title>
    <link href="https://blog.awa.moe/2022/08/25/xianji-portable-wifi/upgrade-emcp/"/>
    <id>https://blog.awa.moe/2022/08/25/xianji-portable-wifi/upgrade-emcp/</id>
    <published>2022-08-25T15:53:49.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p>前幾天在踩坑怎麽把這玩意配合 Voron 使用,<br>結果發現安裝 Klipper 需要非常多的空間, 已經超過它的存儲大小了, 只有可憐的 4GB。</p><p>所以最後考慮給它擴容, 成本也不是很高, 18 HKD 能買到一個已經足夠用的 EMCP。<br>話不多説, 現在開始 ヾ(@^▽^@)ノ</p><span id="more"></span><h3 id="EMCP-選型"><a href="#EMCP-選型" class="headerlink" title="EMCP 選型"></a>EMCP 選型</h3><p>可以參考這個 <a href="https://www.kancloud.cn/handsomehacker/openstick/2636511">EMCP 表格</a><br>我選擇的是 <code>KMK8X000VM-B412</code> (BGA162 LPDDR2 1G + 16G EMMC) (<del>差不多得了</del>)<br>畢竟已經有人測試過它能用了, 爲了保守起見還是沒必要多踩一個坑。</p><p>下單購買, 然後就是等快遞了 XD<br><strong>記得買植球鋼網! 記得買植球鋼網! 記得買植球鋼網!</strong></p><h3 id="備份分區表和全盤鏡像"><a href="#備份分區表和全盤鏡像" class="headerlink" title="備份分區表和全盤鏡像"></a>備份分區表和全盤鏡像</h3><p>這一步我只展示在 Windows 上操作的步驟, 如果你用 Linux &#x2F; BSD 可能比較麻煩吧…</p><p>OpenStick WiKi 的第一步<code>pip3 安裝 edl</code>有錯誤, 實際 pip 安裝上去的並不是我們刷機要用到的那個 <code>edl</code> 工具 (而是<a href="https://pypi.org/project/edl/">它</a>),<br>錯誤示範我就不貼了, 免得引起誤會。在這給出正確的地址 <a href="https://github.com/bkerler/edl">bkerler&#x2F;edl</a>。</p><p>另外在 Windows 上<strong>非常不建議</strong>跟隨 OpenStick WiKi 的擴容步驟, 教程需要的 <code>edl</code> 工具在 Windows 環境難以安裝(雖然它是 python),<br>但所依賴的庫在 Windows 下運行會抛出諸如 “Unsupported operation or platform” 此類的錯誤。</p><p>總之, 我們只需要使用 miko 就行了。</p><h4 id="備份分區表"><a href="#備份分區表" class="headerlink" title="備份分區表"></a>備份分區表</h4><p>9008 老操作, 不用我多説了吧 XD。(<del>怎麽還要讓我教, 按住 RESET 按鈕, 插上 USB</del>)</p><p>打開 miko, 選擇 <code>Read -&gt; Backup Xml Firmware</code><br>點擊左下角 <code>Load Partition Structure</code> 讀取分區表。<br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-25_21-57-37.jpg" alt="img"></p><p>等待右側出現 <code>Reading GPT partition table ..... Done</code>之後,<br>點擊 <code>Save path</code>, 選擇保存到的目錄。最後點擊 <code>Read Full Firmware</code>就行了。<br>稍候片刻, 會 dump 出來很多文件。<strong>請注意確認備份目錄是否存在 rawprogram0.xml 文件, 它非常重要</strong><br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-25_22-58-59.jpg" alt="img"></p><h4 id="備份全盤鏡像"><a href="#備份全盤鏡像" class="headerlink" title="備份全盤鏡像"></a>備份全盤鏡像</h4><p>然後切換到右側 <code>Partition Backup / Erase</code> 選項卡<br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_01-07-51.jpg" alt="img"></p><p>點擊左下角 <code>Load Partition Structure</code> 讀取分區表,<br>等待分區表出現之後, 點擊右下角的 <code>Read Full Image</code> 製作全盤鏡像, 之後你會得到一個 bin 文件, 請妥善保存。</p><p>備份完成, 接下來就可以開始更換晶片了 o(*≧▽≦)ツ</p><h3 id="更換新的晶片"><a href="#更換新的晶片" class="headerlink" title="更換新的晶片"></a>更換新的晶片</h3><p>首先把板子搬上手術桌<br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_00-22-24.jpg" alt="img"></p><p>不用取掉屏蔽罩, 直接用熱風槍 320 攝氏度加熱,<br>半分鐘之後輕鬆取下。<del>USB: aahhhhhrua我死了 (倒下)</del><br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_00-24-40.jpg" alt="img"></p><p>那個 USB 遇到高溫擺爛了 233, 我們先不要理它,<br>用吸錫帶清理乾净焊盤, 用洗板水洗乾净並保持整潔, 方便接下來焊接。<br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_00-29-12.jpg" alt="img"></p><p>最後, 放上新買的晶片, 用熱風槍 350 攝氏度加熱, 可以多放一些焊油。<br>直到它浮起來, 輕輕推動它會被拉回去的狀態。<strong>千萬別手殘用鑷子去壓它, 要從側面輕推</strong> (爲了拍照, 放的有點歪)<br><strong>特別注意, 它在加熱之後有几率自己跑掉, 因爲 BGA 球太小還沒化, 焊油受熱流動性強, 拉不住</strong><br><strong>所以建議先預熱板子, 再放入。之後用鑷子輕輕扶著一下</strong><br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_00-34-31.jpg" alt="img"></p><p>最後記得在焊錫凝固之前, 把之前擺爛的 USB 扶起來。<br>用洗板水洗乾净, 焊接就完成了 ヾ(≧ ▽ ≦)ゝ<br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_00-39-17.jpg" alt="img"><br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_00-40-40.jpg" alt="img"></p><h3 id="恢復之前備份的分區"><a href="#恢復之前備份的分區" class="headerlink" title="恢復之前備份的分區"></a>恢復之前備份的分區</h3><p>在做這個操作之前, 請確認你是否焊好,<br>如果能進入 9008, 説明應該沒問題, 如果沒有, 可能你換上的是不兼容的或者沒焊接好。</p><p>爲了確認晶片是否正常讀寫, 可以打開 miko,<br>選擇 <code>Emmc</code> 選項卡, 點擊 <code>EMMC READ / WRITE TEST</code> 來測試。</p><h4 id="刷寫分區"><a href="#刷寫分區" class="headerlink" title="刷寫分區"></a>刷寫分區</h4><p>依次點擊 <code>Flash -&gt; Xml Flasher</code>,<br>點擊 <code>Raw program</code>, 選擇你備份文件中的 <code>rawprogram0.xml</code>,<br>點擊列表左上角的 CheckBox (複選框) 全選所有分區, 確認中間 <code>Patch</code> 的内容為 <code>patch0.xml</code>,<br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_01-16-07.jpg" alt="img"></p><p>然後就可以點擊 <code>FLASH!</code> 刷入了。</p><h4 id="刷寫鏡像"><a href="#刷寫鏡像" class="headerlink" title="刷寫鏡像"></a>刷寫鏡像</h4><p>依次點擊 <code>Flash -&gt; emmc block0 flasher</code>,<br>雙擊 <code>Double Click To Open EMMC DATA</code> 編輯框, 選擇你的全盤鏡像備份。<br>刷入即可。</p><p>如果沒有什麽問題, 你將會看到板子上熟悉的紅燈開始閃爍,<br>稍等一會兒電腦會識別到新的 USB 設備。</p><h3 id="調整分區大小"><a href="#調整分區大小" class="headerlink" title="調整分區大小"></a>調整分區大小</h3><p>開機之後, 連接上 WiFi 登錄到設備,</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">$ lsblk</span><br><span class="line">NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT</span><br><span class="line">mmcblk0      179:0    0  14.6G  0 disk</span><br><span class="line">|-mmcblk0p1  179:1    0     2K  0 part</span><br><span class="line">|-mmcblk0p2  179:2    0   512K  0 part</span><br><span class="line">|-mmcblk0p3  179:3    0   512K  0 part</span><br><span class="line">|-mmcblk0p4  179:4    0     1M  0 part</span><br><span class="line">|-mmcblk0p5  179:5    0   512K  0 part</span><br><span class="line">|-mmcblk0p6  179:6    0    16K  0 part</span><br><span class="line">|-mmcblk0p7  179:7    0     2M  0 part</span><br><span class="line">|-mmcblk0p8  179:8    0     2M  0 part</span><br><span class="line">|-mmcblk0p9  179:9    0     1K  0 part</span><br><span class="line">|-mmcblk0p10 179:10   0     2M  0 part</span><br><span class="line">|-mmcblk0p11 179:11   0     1M  0 part</span><br><span class="line">|-mmcblk0p12 179:12   0    64M  0 part</span><br><span class="line">|-mmcblk0p13 179:13   0     1M  0 part</span><br><span class="line">`-mmcblk0p14 179:14   0   3.3G  0 part /</span><br><span class="line">mmcblk0boot0 179:32   0     4M  1 disk</span><br><span class="line">mmcblk0boot1 179:64   0     4M  1 disk</span><br><span class="line">zram0        253:0    0 442.2M  0 disk [SWAP]</span><br></pre></td></tr></table></figure><p>可以看到, 我們的新 EMCP 已經被識別, 更新到了 16G,<br>但是 mmcblk0p14 分區還是 3.3G, 所以我們接下來需要用到 parted 擴展一下分區。</p><p>進入 parted, 提示 GPT 備份表損壞, 敲入 <code>OK</code>。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">(parted) <span class="built_in">print</span></span><br><span class="line">Error: The backup GPT table is corrupt, but the primary appears OK, so that will be used.</span><br><span class="line">OK/Cancel? OK</span><br></pre></td></tr></table></figure><p>然後它會提示我們的空間沒有完全使用, 可能存在錯誤。<br>敲入 <code>Fix</code> 修復。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Warning: Not all of the space available to /dev/mmcblk0 appears to be used, you can fix the GPT to use all of the space (an</span><br><span class="line">extra 22966272 blocks) or <span class="built_in">continue</span> with the current setting?</span><br><span class="line">Fix/Ignore? Fix</span><br></pre></td></tr></table></figure><p>繼續, 敲入 <code>resizepart</code>, 調整分區。<br>選擇需要調整的分區, 選擇 rootfs 所在的分區號 (應該是 mmcblk0p14, 是第 14)<br>然後提示分區正在使用, 確認, 敲入 <code>Yes</code>, 最後敲入 <code>100%</code> 將分區調整至最大。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">(parted) resizepart</span><br><span class="line">Partition number? 14</span><br><span class="line">Warning: Partition /dev/mmcblk0p14 is being used. Are you sure you want to <span class="built_in">continue</span>?</span><br><span class="line">Yes/No? Yes</span><br><span class="line">End?  [3876MB]? 100%</span><br></pre></td></tr></table></figure><p>檢查無問題, 敲入 <code>quit</code> 退出 parted。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">(parted) <span class="built_in">print</span></span><br><span class="line">Model: MMC K8XVMB (sd/mmc)</span><br><span class="line">Disk /dev/mmcblk0: 15.6GB</span><br><span class="line">Sector size (logical/physical): 512B/512B</span><br><span class="line">Partition Table: gpt</span><br><span class="line">Disk Flags:</span><br><span class="line"></span><br><span class="line">Number  Start   End     Size    File system  Name      Flags</span><br><span class="line"> 1      67.1MB  67.1MB  2048B                cdt</span><br><span class="line"> 2      134MB   135MB   524kB                sbl1</span><br><span class="line"> 3      135MB   135MB   524kB                rpm</span><br><span class="line"> 4      135MB   136MB   1049kB               tz</span><br><span class="line"> 5      136MB   137MB   524kB                hyp</span><br><span class="line"> 6      137MB   137MB   16.4kB               sec</span><br><span class="line"> 7      137MB   139MB   2097kB               modemst1</span><br><span class="line"> 8      139MB   141MB   2097kB               modemst2</span><br><span class="line"> 9      141MB   141MB   1024B                fsc</span><br><span class="line">10      201MB   203MB   2097kB               fsg</span><br><span class="line">11      268MB   269MB   1049kB               aboot</span><br><span class="line">12      269MB   337MB   67.1MB               boot</span><br><span class="line">13      337MB   338MB   1049kB               devinfo</span><br><span class="line">14      338MB   15.6GB  15.3GB  ext4         rootfs</span><br></pre></td></tr></table></figure><p>最後調整文件分區大小</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ sudo resize2fs /dev/mmcblk0p14</span><br><span class="line">resize2fs 1.46.2 (28-Feb-2021)</span><br><span class="line">Filesystem at /dev/mmcblk0p14 is mounted on /; on-line resizing required</span><br><span class="line">old_desc_blocks = 1, new_desc_blocks = 2</span><br><span class="line">The filesystem on /dev/mmcblk0p14 is now 3734523 (4k) blocks long.</span><br></pre></td></tr></table></figure><p>檢查</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">df</span> -h</span><br><span class="line">Filesystem       Size  Used Avail Use% Mounted on</span><br><span class="line">udev             423M     0  423M   0% /dev</span><br><span class="line">tmpfs             89M  1.2M   88M   2% /run</span><br><span class="line">/dev/mmcblk0p14   14G  779M   13G   6% /</span><br><span class="line">tmpfs            443M     0  443M   0% /dev/shm</span><br><span class="line">tmpfs            5.0M     0  5.0M   0% /run/lock</span><br><span class="line">tmpfs             89M     0   89M   0% /run/user/1001</span><br></pre></td></tr></table></figure><p>可以看到, 我們的 RAM 也增加到 1G。<br><img src="/../../static/xianji-portable-wifi/upgrade-emcp/Snipaste_2022-08-26_01-38-58.jpg" alt="img"></p><p>至此, EMCP 擴容成功,<br>非常感謝你能看到這兒, 米娜桑辛苦惹喵 ヾ(*≧∪≦)</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;前幾天在踩坑怎麽把這玩意配合 Voron 使用,&lt;br&gt;結果發現安裝 Klipper 需要非常多的空間, 已經超過它的存儲大小了, 只有可憐的 4GB。&lt;/p&gt;
&lt;p&gt;所以最後考慮給它擴容, 成本也不是很高, 18 HKD 能買到一個已經足夠用的 EMCP。&lt;br&gt;話不多説, 現在開始 ヾ(@^▽^@)ノ&lt;/p&gt;</summary>
    
    
    
    <category term="OpenStick" scheme="https://blog.awa.moe/categories/OpenStick/"/>
    
    
    <category term="OpenStick" scheme="https://blog.awa.moe/tags/OpenStick/"/>
    
  </entry>
  
  <entry>
    <title>從零購置一台 Voron 打印機 (二) Klipper 主機調試</title>
    <link href="https://blog.awa.moe/2022/08/24/voron/openstick-with-voron/"/>
    <id>https://blog.awa.moe/2022/08/24/voron/openstick-with-voron/</id>
    <published>2022-08-23T18:53:08.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p>還記得上次説到 Voron 采購單中的樹莓派嗎, 現在樹莓派這麽貴<br>而且個人感覺用它性能浪費, 還不如找點其他的方案</p><p>所以我的目光來到了上次被我拆掉的那個 <a href="/2022/08/02/xianji-portable-wifi/teardown">先機隨身4G上網卡</a><br>因爲我給它刷了 Debian, 所以可以做大部分普通派能做的事情, 乃至我現在腦洞大開想把它搞成 Voron 的控制端主機</p><span id="more"></span><h3 id="第一個坑-Type-C-不輸出-5V"><a href="#第一個坑-Type-C-不輸出-5V" class="headerlink" title="第一個坑 - Type C 不輸出 5V"></a>第一個坑 - Type C 不輸出 5V</h3><p>不得不説, 這個地方的問題我排查一個多小時</p><p>Monster 8 控制主機板的 Type-C 後邊有一個 USB-PWR 的跳綫<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-24_03-02-31.jpg" alt="img"></p><p>一開始以爲它是會輸出 5V 電的, 因爲我把跳綫撥到 ON 之後確實會輸出 5V 電壓,<br>但是隨便插了一個設備上去之後, 設備完全沒有反應, 像是完全沒上電的樣子<br>然後用萬用表一量, 好家夥插上設備之後只有 1V 了</p><p>遂開始找原理圖, 發現這個跳綫前端連著 VBUS, 但是貌似僅用作輸入<br>但是正好旁邊有一個 USB-A 母口, 它也有一個跳綫, 那我就不客氣地把電借過來用了, 一根飛綫!<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-24_03-07-03.jpg" alt="img"></p><p>因爲 USB-PWR 跳綫的左邊空接, 所以正好借過來的電也不會倒灌,<br>而是直接流向 Type-C 輸出 這簡直太合適了 (不<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-24_03-10-57.jpg" alt="img"></p><h3 id="第二個坑-USB-工作模式"><a href="#第二個坑-USB-工作模式" class="headerlink" title="第二個坑 - USB 工作模式"></a>第二個坑 - USB 工作模式</h3><p>這個問題處理起來比較簡單, 因爲直接就有現成的答案<br>因爲 OpenStick 的 Debian 固件默認啓動時會將 USB 配置爲從模式, 所以無法直接和 Monster 8 通訊</p><p>所以在參考 <a href="https://www.kancloud.cn/handsomehacker/openstick/2637561">切換 USB 工作模式</a> 之後,<br>使用以下指令就可以達到想要的效果了.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">echo</span> host &gt; /sys/kernel/debug/usb/ci_hdrc.0/role</span><br></pre></td></tr></table></figure><p>可以看到, 出現了一個 <code>STMicroelectronics Virtual COM Port</code> 的設備, 它就是 Voron 控制板啦 φ(゜▽゜*)♪<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-24_03-20-34.jpg" alt="img"></p><p>因爲 OpenStick 沒有 USB-ID 脚, 只能這樣手動切換 USB 模式來插入外部設備,<br>或者以後可以把這句指令寫入到啓動脚本或者 SystemCtl 服務來實現開機自動切換, 執行完指令之後所有從設備功能將失效</p><h3 id="第三個坑-安裝-Klipper-需要過多空間"><a href="#第三個坑-安裝-Klipper-需要過多空間" class="headerlink" title="第三個坑 - 安裝 Klipper 需要過多空間"></a>第三個坑 - 安裝 Klipper 需要過多空間</h3><p>這個坑是我沒想到的, 竟然是因爲安裝 Klipper 的時候依賴了整個源代碼編譯環境,<br>不僅有 arm-gcc &#x2F; python 2 和 3, 甚至還有完全用不到的 avr-gcc. 這可是 STM32 呀..</p><p>整個安裝過程需要至少 3GB 的空間, 當時我就傻眼了, <del>怎麽會事呢 (?</del><br>OpenStick 一般是被嚴重閹割過, 只有 4GB 的eNAND. 而且裝完系統之後還會少一些——</p><p>所以不出意外, 全給我吃光了<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-24_03-26-14.jpg" alt="img"></p><p>所以現在如果還想繼續用 OpenStick 做主機, 那幾乎就只有一條路了,<br><strong>考慮換 EMCP 擴容</strong>. EMCP 我選擇的比較穩妥且經過測試的 <code>KMK8X000VM-B412</code>, 配置為 16G(eNAND) + 1G(RAM)<br>應該也許可能大概差不多夠用了 XD, 換新的 EMCP 成本為 18 HKD 左右, 還是承受得起的, <strong>別忘了買植球鋼網</strong></p><p>話説貌似.. 用網路把分區映射到 NAS 好像也是一個不錯的選擇…</p><p><strong>08&#x2F;25&#x2F;2022 更新</strong><br>擴容教程已經施工完畢 ╰(*°▽°*)╯<br>如果你想給你自己的 OpenStick 擴容, 可以參考 <a href="/2022/08/25/xianji-portable-wifi/upgrade-emcp">EMCP 擴容</a></p><h3 id="第四個坑-依賴包炸裂"><a href="#第四個坑-依賴包炸裂" class="headerlink" title="第四個坑 - 依賴包炸裂"></a>第四個坑 - 依賴包炸裂</h3><p>因爲 Moonraker 依賴的 <code>libglib2.0-bin</code> 會依賴比較舊的包,<br>而 OpenStick 預裝的比較新, 會引發一些依賴炸裂的問題, 導致裝不上。</p><p><strong>千萬不要</strong>去嘗試卸載 <code>libglib2.0-0(=2.68.1-2mobian1)</code>, 這樣會導致連帶差不多整個系統都給揚了。<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-28_00-54-37.jpg" alt="img"></p><p>所以我們只需要把 <code>libglib2.0-0</code> 降到 <code>(=2.66.8-1)</code><br>然後等待降級完畢就行。具體可以參考 <a href="https://askubuntu.com/questions/1395452/libglib2-0-0amd64-install-remove-broke-whole-ubuntu">libglib2.0-0:amd64 install &#x2F; remove broke whole ubuntu</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ sudo apt install -f libglib2.0-0=2.66.8-1</span><br></pre></td></tr></table></figure><h3 id="第五個坑-Locale-不對勁"><a href="#第五個坑-Locale-不對勁" class="headerlink" title="第五個坑 - Locale 不對勁"></a>第五個坑 - Locale 不對勁</h3><p>因爲 OpenStick 所使用的 debian 可能被精簡過, 在給 Monster 8 編譯固件之前需要 make menuconfig,<br>然後 python 會打印一行錯誤</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">warning: setlocale: LC_ALL: cannot change locale (en_US)</span><br></pre></td></tr></table></figure><p>所以我們要自己重新配置一下 locale,<br>選擇 en_US.UTF-8, 等待自動安裝完畢即可</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ sudo apt install locales</span><br><span class="line">$ sudo dpkg-reconfigure locales</span><br></pre></td></tr></table></figure><h3 id="第六個坑-USB-Modem-CDC-ACM-支援"><a href="#第六個坑-USB-Modem-CDC-ACM-支援" class="headerlink" title="第六個坑 - USB Modem (CDC ACM) 支援"></a>第六個坑 - USB Modem (CDC ACM) 支援</h3><p>這個坑目前來說可以説是最大的了, 解決這問題需要重新編譯内核。<br>因爲 OpenStick 的内核默認沒有啓用 <code>USB Modem (CDC ACM)</code> 功能, 所以在插入串口設備的時候沒有 <code>/dev/ttyACM0</code>,<br>會導致一系列問題, 比如 <code>kiauh</code> 等脚本無法識別設備進而導致上載固件失敗, <code>klipper</code> 沒辦法與 Monster 8 通訊。等等</p><h4 id="編譯和準備工作"><a href="#編譯和準備工作" class="headerlink" title="編譯和準備工作"></a>編譯和準備工作</h4><p>所以我們需要準備一個 Debian 9 &#x2F; Debian 10 的系統 (Ubuntu 也行),<br>先把 OpenStick 的内核克隆下來。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">clone</span> https://github.com/OpenStick/linux --depth 1</span><br><span class="line">$ <span class="built_in">cd</span> linux</span><br></pre></td></tr></table></figure><p>然後配置内核編譯選項</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安裝 gcc9</span></span><br><span class="line">$ sudo apt install gcc-9-aarch64-linux-gnu</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用交叉編譯</span></span><br><span class="line">$ <span class="built_in">export</span> ARCH=arm64</span><br><span class="line">$ <span class="built_in">export</span> CROSS_COMPILE=aarch64-linux-gnu-</span><br><span class="line"></span><br><span class="line"><span class="comment"># 構建 menuconfig</span></span><br><span class="line">$ make menuconfig</span><br></pre></td></tr></table></figure><p>選擇右下角的 <code>Load</code>,<br>輸入 <code>arch/arm64/configs/msm8916_defconfig</code>, 載入預設 Ok 確認。<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-30_02-46-22.jpg" alt="img"></p><p>然後依次選擇</p><ul><li>Device Drivers</li><li>USB support</li><li>USB Modem (CDC ACM) support</li></ul><p>按下 <code>y</code> 啓用功能 (標記變成 &lt;*&gt;), 然後按下若干次 <code>esc</code> 退出并保存到 <code>.config</code>。<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-30_02-49-11.jpg" alt="img"></p><p>最後開始編譯, 應該不會有問題發生。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ make -j24</span><br></pre></td></tr></table></figure><h4 id="合成-boot-img"><a href="#合成-boot-img" class="headerlink" title="合成 boot.img"></a>合成 boot.img</h4><p>跳轉到 <code>arch/arm64/boot</code> 下, 確認存在編譯生成後的 <code>Image.gz</code> 檔案。</p><p>敲入以下命令, 將設備樹 dtb 檔案附加在内核尾部,<br>這兒我使用我的設備型號 ufi001c 的設備樹, 請根據實際情況自行調整。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ cat Image.gz dts/qcom/msm8916-handsome-openstick-ufi001c.dtb &gt; kernel-dtb</span><br></pre></td></tr></table></figure><p>解包 OpenStick 官方發行的 <a href="https://github.com/OpenStick/OpenStick/releases/tag/v1">debian</a> 的 boot.img 並提取出 initrd.img。<br>我這就偷懶用 <code>ApkDB</code> 工具來解包了, Windows 上比較方便 XD<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-30_02-57-24.jpg" alt="img"></p><p>這個 <code>ramdisk.gz</code> 就是 initrd.img 了<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-30_02-59-03.jpg" alt="img"></p><p>進入到 OpenStick 終端, 使用 <code>lsblk -f</code> 指令找到 <code>rootfs</code> 所在分區的 UUID 並記下。<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-30_03-17-50.jpg" alt="img"></p><p>重命名為 <code>initrd.img</code> 丟到 debian 去, 使用 <code>mkbootimg</code> 合成 boot.img 檔案<br><strong>需要注意</strong>的是在以下命令中 –cmdline 參數中的 root&#x3D;UUID&#x3D;<strong>xxxx</strong>, 需要將 <code>xxxx</code> 換成你自己的 rootfs 分區的 UUID。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">$ mkbootimg                   \</span><br><span class="line">  --base 0x80000000           \</span><br><span class="line">  --kernel_offset 0x00080000  \</span><br><span class="line">  --ramdisk_offset 0x02000000 \</span><br><span class="line">  --tags_offset 0x01e00000    \</span><br><span class="line">  --pagesize 2048             \</span><br><span class="line">  --second_offset 0x00f00000  \</span><br><span class="line">  --ramdisk initrd.img        \</span><br><span class="line">  --cmdline <span class="string">&quot;console=ttyMSM0,115200 root=UUID=xxxx rootwait rootfstype=ext4 consoleblank=0 loglevel=1 cgroup_enable=memory swapaccount=1 rw&quot;</span> \</span><br><span class="line">  --kernel kernel-dtb -o boot.img</span><br></pre></td></tr></table></figure><p>最後, 就能得到帶有 <code>USB Modem (CDC ACM)</code> 功能的内核了,<br>使用 <code>fastboot flash boot boot.img</code> 刷新分區, 重啓即可。<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-30_03-15-33.jpg" alt="img"></p><p>Klipper 識別到設備, 開始正常工作<br><img src="/../../static/voron/openstick-with-voron/Snipaste_2022-08-30_03-24-24.jpg" alt="img"></p><h3 id="未完待續"><a href="#未完待續" class="headerlink" title="未完待續"></a>未完待續</h3>]]></content>
    
    
    <summary type="html">&lt;p&gt;還記得上次説到 Voron 采購單中的樹莓派嗎, 現在樹莓派這麽貴&lt;br&gt;而且個人感覺用它性能浪費, 還不如找點其他的方案&lt;/p&gt;
&lt;p&gt;所以我的目光來到了上次被我拆掉的那個 &lt;a href=&quot;/2022/08/02/xianji-portable-wifi/teardown&quot;&gt;先機隨身4G上網卡&lt;/a&gt;&lt;br&gt;因爲我給它刷了 Debian, 所以可以做大部分普通派能做的事情, 乃至我現在腦洞大開想把它搞成 Voron 的控制端主機&lt;/p&gt;</summary>
    
    
    
    <category term="Voron" scheme="https://blog.awa.moe/categories/Voron/"/>
    
    
    <category term="OpenStick" scheme="https://blog.awa.moe/tags/OpenStick/"/>
    
    <category term="Voron" scheme="https://blog.awa.moe/tags/Voron/"/>
    
  </entry>
  
  <entry>
    <title>從零購置一台 Voron 打印機 (一) 采購</title>
    <link href="https://blog.awa.moe/2022/08/23/voron/voron-2-4-bom/"/>
    <id>https://blog.awa.moe/2022/08/23/voron/voron-2-4-bom/</id>
    <published>2022-08-23T14:32:55.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p>最近打算組裝一台可靠的 3D 打印機, 收到朋友安利 Voron, 看了看挺好<br>而且還是開源項目, 所以就沒多想, 跟隨官網向導拉清單開始采購</p><span id="more"></span><h3 id="BOM-生成向導"><a href="#BOM-生成向導" class="headerlink" title="BOM 生成向導"></a>BOM 生成向導</h3><p>連接在這 -&gt; <a href="https://vorondesign.com/voron2.4">Voron Design</a><br>然後點擊首頁左邊的 <code>Configurator</code> 打開生成向導<br>依次選擇</p><ul><li>Direct Feed (近程擠出機)</li><li>New build. Give me the full BOM. (創建新的實例)</li><li>Blind Joints (框架接頭)</li><li>IGUS cable chains (使用坦克鏈)</li><li>350mm Spec (構建大小, 這個自由發揮, 我選擇 350mm*350mm)</li></ul><p>然後就會出來一個材料 BOM 單, 下載表格文件然後我們開始 (｡･∀･)ﾉﾞ</p><h3 id="完整清單"><a href="#完整清單" class="headerlink" title="完整清單"></a>完整清單</h3><p>請按清單(根據上邊的步驟生成好的清單), 依次購買齊所有配件<br>最右側的 CheckBox 可以幫助你記錄已經完成采購的項目 (打算使用 cookie 永久保存你的清單記錄, 不過現在還沒寫)</p><p>此清單大部分翻譯及踩坑由 47姐 提供, 感謝! (*≧︶≦))</p><table><thead><tr><th align="left">型號</th><th align="left">數量</th><th align="left">備注</th><th>檢查</th></tr></thead><tbody><tr><td align="left">M5x40 SHCS</td><td align="left">22</td><td align="left">SHCS 圓柱頭内六角螺絲</td><td><input type="checkbox"></td></tr><tr><td align="left">M5x30 BHCS</td><td align="left">22</td><td align="left">BHCS 圓頭(蘑菇) 内六角螺絲</td><td><input type="checkbox"></td></tr><tr><td align="left">M5x16 BHCS</td><td align="left">35</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M5x10 BHCS</td><td align="left">35</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M5 Hexnut</td><td align="left">16</td><td align="left">Hexnut 六角螺母</td><td><input type="checkbox"></td></tr><tr><td align="left">M5 Post-install T-nut</td><td align="left">68</td><td align="left">彈性螺母 注意所有此類螺母要歐標 2020</td><td><input type="checkbox"></td></tr><tr><td align="left">M5 1mm Shim</td><td align="left">42</td><td align="left">M5 1mm 墊片</td><td><input type="checkbox"></td></tr><tr><td align="left">M4x6 BHCS</td><td align="left">7</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M4 Knurled Nut (DIN 466-B)</td><td align="left">4</td><td align="left">滾花手擰螺母</td><td><input type="checkbox"></td></tr><tr><td align="left">M3x40 SHCS</td><td align="left">30</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3x30 SHCS</td><td align="left">25</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3x20 SHCS</td><td align="left">22</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3x16 SHCS</td><td align="left">20</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3x12 SHCS</td><td align="left">41</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3x10 FHCS</td><td align="left">4</td><td align="left">FHCS 沉頭内六角</td><td><input type="checkbox"></td></tr><tr><td align="left">M3x6 FHCS</td><td align="left">8</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3x8 SHCS</td><td align="left">187</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3x6 BHCS</td><td align="left">11</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3 Hexnut</td><td align="left">6</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">M3 Post-install T-nut</td><td align="left">103</td><td align="left">彈性螺母 注意所有此類螺母要歐標 2020</td><td><input type="checkbox"></td></tr><tr><td align="left">M3 Hammer Head T-nuts</td><td align="left">60</td><td align="left">T 型螺母 注意所有此類螺母要歐標 2020</td><td><input type="checkbox"></td></tr><tr><td align="left">M3 Washer</td><td align="left">3</td><td align="left">墊片(washer 薄的墊片)</td><td><input type="checkbox"></td></tr><tr><td align="left">M3 Threaded Insert (M3x5x4)</td><td align="left">110</td><td align="left">熱熔螺母 注意尺寸</td><td><input type="checkbox"></td></tr><tr><td align="left">M2x10 Self-tapping Screw</td><td align="left">16</td><td align="left">自攻螺絲</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 80T Pulley (5mm ID 6mm W)</td><td align="left">4</td><td align="left">GT2 傳動輪, T 為齒數</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 20T Pulley (5mm ID 6mm W)</td><td align="left">3</td><td align="left">Pulley 傳動輪</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 20T Pulley (5mm ID 9mm W)</td><td align="left">4</td><td align="left">Toothed Idler 惰輪</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 16T Pulley (5mm ID 6mm W)</td><td align="left">4</td><td align="left">ID 通孔孔徑</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 20T Toothed Idler (5mm ID 6mm W)</td><td align="left">2</td><td align="left">W 適配皮帶寬度</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 20T Toothed Idler (5mm ID 9mm W)</td><td align="left">4</td><td align="left">傳動輪有螺絲, 惰輪沒有 注意區分</td><td><input type="checkbox"></td></tr><tr><td align="left">F695 Bearing</td><td align="left">20</td><td align="left">軸承 注意嚴格對應名字買</td><td><input type="checkbox"></td></tr><tr><td align="left">625 Bearing</td><td align="left">12</td><td align="left">不可以多字母 也不可以少字母</td><td><input type="checkbox"></td></tr><tr><td align="left">Ø5x60mm Shaft D Cut</td><td align="left">4</td><td align="left">不鏽鋼光杆</td><td><input type="checkbox"></td></tr><tr><td align="left">Ø5x35mm Shaft (trim to size)</td><td align="left">1</td><td align="left">D Cut 是銑對應位置的 D 型槽 但是實測不用也行</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 Belt Loop (6mm W) - 188mm</td><td align="left">4</td><td align="left">GT2 閉口環形皮帶 長度 188mm 寬度6mm</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 Open Belt LL-2GT-9 (9mm wide) - 1200mm</td><td align="left">4</td><td align="left">GT2 開口皮帶 寬度 9mm</td><td><input type="checkbox"></td></tr><tr><td align="left">GT2 Open Belt LL-2GT-6 (6mm wide) - 2000mm</td><td align="left">2</td><td align="left">GT2 開口皮帶 寬度 6mm</td><td><input type="checkbox"></td></tr><tr><td align="left">BMG Extruder Components Kit</td><td align="left">1</td><td align="left">BMG原版擠出機套件</td><td><input type="checkbox"></td></tr><tr><td align="left">Linear Rail MGN9H 400mm</td><td align="left">6</td><td align="left">綫性導軌</td><td><input type="checkbox"></td></tr><tr><td align="left">Linear Rail MGN12H 400mm</td><td align="left">1</td><td align="left"></td><td><input type="checkbox"></td></tr><tr><td align="left">Omron D2F-01L Micro Switch</td><td align="left">3</td><td align="left">歐姆龍微動</td><td><input type="checkbox"></td></tr><tr><td align="left">Inductive Probe (See sourcing guide)</td><td align="left">1</td><td align="left">接近開關</td><td><input type="checkbox"></td></tr><tr><td align="left">Hotend Kit (24V)</td><td align="left">1</td><td align="left">熱源</td><td><input type="checkbox"></td></tr><tr><td align="left">40x40x20 Centrifugal Fan (24V)</td><td align="left">1</td><td align="left">渦輪風扇</td><td><input type="checkbox"></td></tr><tr><td align="left">40x40x10 Axial Fan (24V)</td><td align="left">1</td><td align="left">普通風扇</td><td><input type="checkbox"></td></tr><tr><td align="left">Mini 12864 Display</td><td align="left">1</td><td align="left">128*64 小熒幕 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">TycoElectronics 10EGG1-1 Filtered Power Inlet (NA&#x2F;UK)</td><td align="left">1</td><td align="left">帶保險絲的 AC 座子, 可根據自己所在地區選購 120V 或 220V</td><td><input type="checkbox"></td></tr><tr><td align="left">TycoElectronics 10EGG1-2 Filtered Power Inlet (EU)</td><td align="left">1</td><td align="left">和上面是一樣的, 只需要買一個就行</td><td><input type="checkbox"></td></tr><tr><td align="left">Medium Blow Fuse 5x20mm 4A (220V mains)</td><td align="left">2</td><td align="left">4A 保險絲, 如果你所在地區市電是 220V 就選它</td><td><input type="checkbox"></td></tr><tr><td align="left">Medium Blow Fuse 5x20mm 8A (120v mains)</td><td align="left">1</td><td align="left">8A 保險絲, 如果你所在地區市電是 120V 就選它</td><td><input type="checkbox"></td></tr><tr><td align="left">Keystone CAT6 Insert (Optional)</td><td align="left">1</td><td align="left">網綫口 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">60x60x20 Fan (24V)</td><td align="left">3</td><td align="left">大號風扇</td><td><input type="checkbox"></td></tr><tr><td align="left">Controller with 7+ Stepper outputs</td><td align="left">1</td><td align="left">控制板, 可以用 MKS Monster 8 替代</td><td><input type="checkbox"></td></tr><tr><td align="left">TMC2209 Stepper Motor Driver</td><td align="left">7</td><td align="left">TMC 2209 電機驅動器模塊</td><td><input type="checkbox"></td></tr><tr><td align="left">USB Cable for selected controller</td><td align="left">1</td><td align="left">USB cable</td><td><input type="checkbox"></td></tr><tr><td align="left">RaspberryPi 3B+ or better</td><td align="left">1</td><td align="left">這個隨意, 如果自己有派或者電腦 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">Mean Well LRS-200-24 PSU</td><td align="left">1</td><td align="left">200W 電源, 可選輸出12V 或者 24V (注意要跟上邊風扇匹配電壓)</td><td><input type="checkbox"></td></tr><tr><td align="left">Mean Well RS-25-5 PSU</td><td align="left">1</td><td align="left">給派的 5V 電源 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">Omron G3A-210B-DC5 SSR</td><td align="left">1</td><td align="left">SSR 固態繼電器, C35 扣具兼容並且要大功率</td><td><input type="checkbox"></td></tr><tr><td align="left">DIN Rail Mount Bracket for G3A SSR</td><td align="left">1</td><td align="left">固態繼電器 C35 導軌固定件</td><td><input type="checkbox"></td></tr><tr><td align="left">BAT85 Diode</td><td align="left">1</td><td align="left">給接近開關用的二極管 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">C13 Power Cord</td><td align="left">1</td><td align="left">AC 電源綫 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">Thermal Fuse (125C)</td><td align="left">1</td><td align="left">RH溫度保險絲 (<strong>安全設備, 重要</strong>)</td><td><input type="checkbox"></td></tr><tr><td align="left">NEMA17 Motor 17HS19-2004S</td><td align="left">6</td><td align="left">42 步進電機, 最好選擇扭矩大角度小的 (比如0.9°)</td><td><input type="checkbox"></td></tr><tr><td align="left">NEMA17 Motor 17HS08-1004S</td><td align="left">1</td><td align="left">超薄 42 步進電機, 厚度必須小於 2mm, 否則裝不上</td><td><input type="checkbox"></td></tr><tr><td align="left">Rubber Foot (1.5x.75”, 38x19mm)</td><td align="left">4</td><td align="left">橡膠脚墊, 減震用</td><td><input type="checkbox"></td></tr><tr><td align="left">OpenBuilds Billet Angle Corner Connector (2020)</td><td align="left">4</td><td align="left">2020 V型材角碼</td><td><input type="checkbox"></td></tr><tr><td align="left">Misumi HFSB5-2020-340</td><td align="left">1</td><td align="left">2020 V 型材 340mm</td><td><input type="checkbox"></td></tr><tr><td align="left">Misumi HFSB5-2020-430</td><td align="left">1</td><td align="left">2020 V 型材 430mm</td><td><input type="checkbox"></td></tr><tr><td align="left">Misumi HFSB5-2020-450</td><td align="left">2</td><td align="left">2020 V 型材 450mm</td><td><input type="checkbox"></td></tr><tr><td align="left">Misumi HFSB5-2020-470-TPW</td><td align="left">10</td><td align="left">2020 V 型材 470mm (<strong>兩端 M5 攻絲</strong>)</td><td><input type="checkbox"></td></tr><tr><td align="left">Misumi HFSB5-2020-530-LCP-RCP</td><td align="left">4</td><td align="left">2020 V 型材 530mm (<strong>兩端側面開孔</strong>)</td><td><input type="checkbox"></td></tr><tr><td align="left">DIN 3 Rails (35mm W) - 465mm</td><td align="left">2</td><td align="left">C35 導軌</td><td><input type="checkbox"></td></tr><tr><td align="left">Fume Extractor Carbon Filter Element</td><td align="left">1</td><td align="left">活性炭過濾棉</td><td><input type="checkbox"></td></tr><tr><td align="left">4mm Threaded Bowden Coupler</td><td align="left">1</td><td align="left">4mm 氣動接頭 (遠程基礎機接頭)</td><td><input type="checkbox"></td></tr><tr><td align="left">3M VHB Tape 5952</td><td align="left">1</td><td align="left">3M 膠帶</td><td><input type="checkbox"></td></tr><tr><td align="left">Loctite Blue Threadlocker Stick</td><td align="left">1</td><td align="left">固體膠棒</td><td><input type="checkbox"></td></tr><tr><td align="left">Mobil EP1&#x2F;2 Grease</td><td align="left">1</td><td align="left">綫性導軌潤滑油 (WD40也行)</td><td><input type="checkbox"></td></tr><tr><td align="left">Single Sided Foam Tape 1mm Thick (5m)</td><td align="left">1</td><td align="left">海綿膠帶</td><td><input type="checkbox"></td></tr><tr><td align="left">Single Sided Foam Tape 3mm Thick (5m)</td><td align="left">1</td><td align="left">海綿膠帶</td><td><input type="checkbox"></td></tr><tr><td align="left">Ø6x3mm Neodimium Magnet</td><td align="left">8</td><td align="left">6*3mm 圓柱小磁鐵</td><td><input type="checkbox"></td></tr><tr><td align="left">PTFE Tube (4mm OD 3mm ID) - 1000mm</td><td align="left">1</td><td align="left">鐵氟龍管</td><td><input type="checkbox"></td></tr><tr><td align="left">PTFE Tube (4mm OD 2mm ID) - 300mm</td><td align="left">1</td><td align="left">OD外徑 ID内徑</td><td><input type="checkbox"></td></tr><tr><td align="left">Nylon Cable Ties, Small (.07-.10”, 1.8-2.7mm wide)</td><td align="left">42</td><td align="left">束綫帶</td><td><input type="checkbox"></td></tr><tr><td align="left">18AWG Wire (10ft&#x2F;3m total)</td><td align="left">1</td><td align="left">導綫 18AWG</td><td><input type="checkbox"></td></tr><tr><td align="left">20AWG High-flex Wire (10ft&#x2F;3m total)</td><td align="left">1</td><td align="left">導綫 20AWG</td><td><input type="checkbox"></td></tr><tr><td align="left">22-24AWG High-flex Wire (min 19 strand)(250ft&#x2F;76m total)</td><td align="left">1</td><td align="left">導綫 22-24AWG</td><td><input type="checkbox"></td></tr><tr><td align="left">Female Spade Crimp Terminal (18-22AWG, .250”, 6.35mm)</td><td align="left">7</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">Fork Spade Crimp Terminal (18-22AWG, #10)</td><td align="left">5</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">Ring Crimp Terminal (16-22AWG, #6)</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">JST XH Connector, 3 Position Male&#x2F;Female Pair plus Pins</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">Connector kit matching your controller choice (usually JST-XH)</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">Crimp Ferrule Kit (covering sizes 24AWG to 18AWG)</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Connector Plug 4 Position</td><td align="left">4</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Connector Plug 3 Position</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Connector Plug 2 Position</td><td align="left">2</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Connector Receptacle 4 Position</td><td align="left">4</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Connector Receptacle 3 Position</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Connector Receptacle 2 Position</td><td align="left">2</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MLX Power Receptacle 3 Position (bed wiring)</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MLX Power Plug 3 Position</td><td align="left">1</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MLX Male Pin</td><td align="left">6</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MLX Female Pin</td><td align="left">6</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Female Pin</td><td align="left">40</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">MicroFit3 Male Pin</td><td align="left">40</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">WAGO 221-415 Lever-Nuts</td><td align="left">3</td><td align="left">各種杜邦綫座子之類 (可選)</td><td><input type="checkbox"></td></tr><tr><td align="left">IGUS E2i-10-10-018-0 Chain (405mm [1.33ft])</td><td align="left">2</td><td align="left">坦克鏈 轉向半徑 R18 寬 10 高 10</td><td><input type="checkbox"></td></tr><tr><td align="left">IGUS E2-100-10-12PZ Chain Ends (set)</td><td align="left">2</td><td align="left">注意, <strong>一份是一對</strong> 買之前注意開孔位置</td><td><input type="checkbox"></td></tr><tr><td align="left">IGUS E2-15-10-028-0 Chain (545mm [1.79ft])</td><td align="left">1</td><td align="left">坦克鏈 轉向半徑 R28 寬 15 高 10</td><td><input type="checkbox"></td></tr><tr><td align="left">IGUS E2-150-10-12PZ Chain Ends (set)</td><td align="left">1</td><td align="left">注意, <strong>一份是一對</strong> 買之前注意開孔位置</td><td><input type="checkbox"></td></tr><tr><td align="left">Coroplast Sheet - 469x469x4 mm</td><td align="left">2</td><td align="left">瓦楞塑料板</td><td><input type="checkbox"></td></tr><tr><td align="left">Coroplast Sheet - 483x503x4 mm</td><td align="left">1</td><td align="left">瓦楞塑料板</td><td><input type="checkbox"></td></tr><tr><td align="left">Acrylic Sheet Clear - 241.5x503x3 mm</td><td align="left">2</td><td align="left">透明亞克力板</td><td><input type="checkbox"></td></tr><tr><td align="left">Acrylic Sheet Clear - 483x503x3 mm</td><td align="left">2</td><td align="left">透明亞克力板</td><td><input type="checkbox"></td></tr><tr><td align="left">Acrylic Sheet Clear - 483x483x3 mm</td><td align="left">1</td><td align="left">透明亞克力板</td><td><input type="checkbox"></td></tr><tr><td align="left">MIC6 5&#x2F;16” Plate - 14”x14”</td><td align="left">1</td><td align="left">熱床鋁質平台</td><td><input type="checkbox"></td></tr><tr><td align="left">Adhesive Magnetic Sheet - 14”x14”</td><td align="left">1</td><td align="left">磁吸 PEI 熱床平台</td><td><input type="checkbox"></td></tr><tr><td align="left">Spring Steel Flexible Print Surface - 14”x14”</td><td align="left">1</td><td align="left">磁吸 PEI 熱床平台</td><td><input type="checkbox"></td></tr><tr><td align="left">Keenovo Silicone AC Heater w&#x2F; thermistor - 300x300mm (650W)</td><td align="left">1</td><td align="left">硅膠熱床, 使用時注意接地</td><td></td></tr></tbody></table><p>終於列完了, 太多了…<br>這些東西買完差不多要 2k HKD 左右, 懶得自己配就買成品吧, 不過那就要6k了…</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;最近打算組裝一台可靠的 3D 打印機, 收到朋友安利 Voron, 看了看挺好&lt;br&gt;而且還是開源項目, 所以就沒多想, 跟隨官網向導拉清單開始采購&lt;/p&gt;</summary>
    
    
    
    <category term="Voron" scheme="https://blog.awa.moe/categories/Voron/"/>
    
    
    <category term="Voron" scheme="https://blog.awa.moe/tags/Voron/"/>
    
  </entry>
  
  <entry>
    <title>STM32 I2C 不工作的問題</title>
    <link href="https://blog.awa.moe/2022/08/16/problem-about-stm32-i2c/"/>
    <id>https://blog.awa.moe/2022/08/16/problem-about-stm32-i2c/</id>
    <published>2022-08-16T03:56:07.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<p>爲了方便調試, 我特意在它啓動的時候打印了一些字符, 在固件載入完畢之後拔掉下載綫, 啓動設備。<br>結果現在的情況是, 這些字符打印了, 但設備的 I2C 不工作。</p><span id="more"></span><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[2022-08-16 12:07:21.006]</span><br><span class="line">RX：</span><br><span class="line">[2022-08-16 12:07:25.566]</span><br><span class="line">RX：</span><br><span class="line">[2022-08-16 12:07:29.173]</span><br><span class="line">RX：埥窖_K暸乧leared.</span><br></pre></td></tr></table></figure><p>量過, 這個時候 I2C 總綫的 SCL 和 SDA 實際上是處於高電平, 也就是空閑狀態。<br>但 SR2-&gt;BUSY 位是 1, 有點靈異。</p><p><img src="/../static/problem-about-stm32-i2c/Snipaste_2022-08-17_11-58-57.jpg" alt="img"></p><p>我也去網上搜羅過很多關於 STM32 I2C 問題的解決方案, 似乎有很多人遇到過。但各種 reset 代碼都加上了, 它們都不太適用我的情況。</p><h3 id="事出有因"><a href="#事出有因" class="headerlink" title="事出有因"></a>事出有因</h3><p>文章寫到這裡, 已經是第二天了。<br>我突然開始好奇, 這個問題竟然會如此穩定的復現, 肯定是有哪寫炸了什麽的。</p><p>於是就打開 keil 開始單步代碼, 同時打開邏輯分析儀查看波形。<br>結果真就給我找到了些許端倪 (</p><p><img src="/../static/problem-about-stm32-i2c/Snipaste_2022-08-17_11-59-35.jpg" alt="img"><br><img src="/../static/problem-about-stm32-i2c/Snipaste_2022-08-17_12-00-01.jpg" alt="img"></p><p>這個地方是我正在用 axp173 給 I2C 縂綫上從設備配電。<br>從設備在上電的時候也會初始化 I2C, 然後把 SCL 綫短暫地拉低了 36us。</p><p>再次點擊單步之後我就發現 SR2-&gt;BUSY 就被置了 1, STM32 隨即開始智障,<br>什麽數據都發不出去了, 因爲它覺得自己很忙, 各種返回 HAL_BUSY。</p><p>問題也好解決, 只要先給設備上電再初始化 I2C 就行了,<br>或者在初始化之後重載一下 I2C。對於我種比較懶的人, 肯定選是後者了 XD</p><h3 id="對症下藥"><a href="#對症下藥" class="headerlink" title="對症下藥"></a>對症下藥</h3><p>然後就順手給它加上了這一句代碼,<br>本意是清除掉 BUSY 位, 讓它能夠回到正常工作的狀態。<br><img src="/../static/problem-about-stm32-i2c/Snipaste_2022-08-17_12-20-38.jpg" alt="img"></p><p>結果重新一跑, 發現這寄存器是 RO (<em>Read Only</em>) 的, 沒辦法手動清掉。(駡駡咧咧<br>不得已, 換個辦法。</p><p>我就原地重新初始化一下, 應該沒問題吧<br>不過看起來是修好了 XD<br><img src="/../static/problem-about-stm32-i2c/Snipaste_2022-08-17_12-33-09.jpg" alt="img"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;爲了方便調試, 我特意在它啓動的時候打印了一些字符, 在固件載入完畢之後拔掉下載綫, 啓動設備。&lt;br&gt;結果現在的情況是, 這些字符打印了, 但設備的 I2C 不工作。&lt;/p&gt;</summary>
    
    
    
    <category term="STM32" scheme="https://blog.awa.moe/categories/STM32/"/>
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/tags/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
  </entry>
  
  <entry>
    <title>對於電子音樂作曲的一些思考</title>
    <link href="https://blog.awa.moe/2022/08/14/abracadabra/noob-on-making-edm/"/>
    <id>https://blog.awa.moe/2022/08/14/abracadabra/noob-on-making-edm/</id>
    <published>2022-08-13T23:18:02.000Z</published>
    <updated>2024-03-17T08:02:39.839Z</updated>
    
    <content type="html"><![CDATA[<p>算是一個碎碎念吧。</p><p>這幾天閑得無事, 瞄了一眼去年就裝電腦上的 FL-Studio。<br>忽然又想起了一些心事。</p><p>回想起日常, 雖然自己對絕大多數音樂的類型非常包容, 也會懂得去欣賞,<br>但實際上在 FL 做起來是一點思緒都沒有。</p><p>不是卡在旋律, 而是感覺自己沒有勇氣去表達自己的旋律, 雖然這個時候都是自己戴著耳機, 也只有自己一個人有聼。<br>反而我覺得我對旋律比較擅長, 高興的時候時而會哼出來一些調調, 也有過想它們存起來的想法 (這是我想學 EDM 的原因之一)</p><p>問題主要出在我現在還完全不熟悉利用各種混音器插件搭配使用去做出來我想要的音色。<br>這對我來説太難了, 看著一整個窗口上密密麻麻的綫和旋鈕… 感覺寸步難行。<br>教程大抵是不管用的, 它只能教會你一些常用手段去做 SFX &#x2F; 自動化參數控制 &#x2F; 捏波形 等等,<br>但是對於自己想要的音色, 腦子裡確實能想出來它聽起來是什麽樣子的,<br>但它波形應該是什麽樣子, 怎麽去調出來, 這對我來説比單純的寫代碼, 向 cpu 表達自己想做什麽, 更加抽象。</p><p>昨天一口氣下了 100GB 的各種采樣包, 確實也有聽到了自己非常熟悉的 SFX,<br>並且非常希望把它們用在自己的曲子内。</p><span id="more"></span><h3 id="報名學習的群沒了"><a href="#報名學習的群沒了" class="headerlink" title="報名學習的群沒了"></a>報名學習的群沒了</h3><p>順帶昨天還發生了一些事情。<br>在去年自己有報名一個電子音樂新手班, 在暑假開課。<br>我從中確實也學到很多。</p><p>昨天是這個班的最後一堂課, 同時也是宣佈大家畢業。<br>老師讓大家提交自己的作品參加評比, 但我對因爲這方面確實沒什麽經驗所以就沒有提交,<br>然後發現, 大家都沒交。</p><p>所以在昨天上課之前, 老師好像生氣了, 只抛下幾句非常涼心的話, 隨即解散了群,<br>大家就這麽不歡而散…<br>當時我看上課時間到了, 就去找群。但是並沒有找到, 直到我去翻了簡訊盒子才知道群被解散了…</p><p>我是非常敬仰他的, 作爲我的第一個 EDM 作曲老師, 他無私地向我們傳授作曲思路, 各種 tricks 和合成器的使用,<br>但現在也就只能是深感遺憾, 學生不才, 我沒能達到您的要求。</p><p>説到這裡, 心情逐漸變得沉重,<br>眼淚就控制不住地流下來了。</p><h3 id="最近的一些打算"><a href="#最近的一些打算" class="headerlink" title="最近的一些打算"></a>最近的一些打算</h3><p>打算花一些時間來學習 EDM, 雖然變成了完全的自學, 但我相信我自學的能力不差。<br>另外就是朋友那邊的事情, 我決定做完了之後就推掉了。</p><p>年底之前, 先去一趟日本。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;算是一個碎碎念吧。&lt;/p&gt;
&lt;p&gt;這幾天閑得無事, 瞄了一眼去年就裝電腦上的 FL-Studio。&lt;br&gt;忽然又想起了一些心事。&lt;/p&gt;
&lt;p&gt;回想起日常, 雖然自己對絕大多數音樂的類型非常包容, 也會懂得去欣賞,&lt;br&gt;但實際上在 FL 做起來是一點思緒都沒有。&lt;/p&gt;
&lt;p&gt;不是卡在旋律, 而是感覺自己沒有勇氣去表達自己的旋律, 雖然這個時候都是自己戴著耳機, 也只有自己一個人有聼。&lt;br&gt;反而我覺得我對旋律比較擅長, 高興的時候時而會哼出來一些調調, 也有過想它們存起來的想法 (這是我想學 EDM 的原因之一)&lt;/p&gt;
&lt;p&gt;問題主要出在我現在還完全不熟悉利用各種混音器插件搭配使用去做出來我想要的音色。&lt;br&gt;這對我來説太難了, 看著一整個窗口上密密麻麻的綫和旋鈕… 感覺寸步難行。&lt;br&gt;教程大抵是不管用的, 它只能教會你一些常用手段去做 SFX &amp;#x2F; 自動化參數控制 &amp;#x2F; 捏波形 等等,&lt;br&gt;但是對於自己想要的音色, 腦子裡確實能想出來它聽起來是什麽樣子的,&lt;br&gt;但它波形應該是什麽樣子, 怎麽去調出來, 這對我來説比單純的寫代碼, 向 cpu 表達自己想做什麽, 更加抽象。&lt;/p&gt;
&lt;p&gt;昨天一口氣下了 100GB 的各種采樣包, 確實也有聽到了自己非常熟悉的 SFX,&lt;br&gt;並且非常希望把它們用在自己的曲子内。&lt;/p&gt;</summary>
    
    
    
    
    <category term="碎碎念" scheme="https://blog.awa.moe/tags/%E7%A2%8E%E7%A2%8E%E5%BF%B5/"/>
    
  </entry>
  
  <entry>
    <title>先機隨身 4G WiFi 上網卡 (一) 拆解</title>
    <link href="https://blog.awa.moe/2022/08/02/xianji-portable-wifi/teardown/"/>
    <id>https://blog.awa.moe/2022/08/02/xianji-portable-wifi/teardown/</id>
    <published>2022-08-02T11:55:43.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<h2 id="入場恨晚"><a href="#入場恨晚" class="headerlink" title="入場恨晚"></a>入場恨晚</h2><p>前天在群裡看到大佬們在討論一個 WiFi 上網卡, 據説是采用的高通 Snapdragon 410 的方案,<br>然後價格還特別香只要 19.9。</p><span id="more"></span><p>然後當我看到這則訊息的時候, 已經是一個周之後了, 價格已經被炒到了 38 元左右<br>領券購買也要 32 元(<del>這實在是太虧了</del>)。不過還是抱著試一試的心態, 買了一個。<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-02-16.jpg" alt="img"></p><h2 id="馬上拆解"><a href="#馬上拆解" class="headerlink" title="馬上拆解"></a>馬上拆解</h2><p>外觀看起來不錯, 整體構造十分簡潔, 並且還有散熱設計。<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-06-58.jpg" alt="img"></p><p>拆下 USB 頭部的兩顆螺絲,<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-15-13.jpg" alt="img"></p><p>然後用指甲劃開卡扣, 就能看到内部構造了。<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-16-48.jpg" alt="img"></p><p>電源管理方案是高通的 PM8916<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-18-24.jpg" alt="img"></p><p>處理器型號是 MSM8916, 果然是 410。<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-21-33.jpg" alt="img"></p><p>旁邊還有一顆 Skhynix 的 H9TP32A4GDBCPA-KGM,<br>是一顆集成了 4GB eNAND 和 4Gbit LPDDR2 的存儲器。<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-25-12.jpg" alt="img"></p><p>它的整體差不多就是這樣, 配置小總結:</p><ul><li>CPU Snapdragon 410</li><li>RAM LPDDR2 4Gbit (512MB)</li><li>NAND eNAND 4GB</li><li>全網通 (移動 &#x2F; 聯通 &#x2F; 電信)</li></ul><h2 id="一些疑惑"><a href="#一些疑惑" class="headerlink" title="一些疑惑"></a>一些疑惑</h2><p>看了看説明書, 這個東西開機竟然有要 30 秒,<br>這麽長的時間, 冥冥之中感覺… 它上邊這是不是跑了一個安卓系統 (<br><img src="/../static/xianji-portable-wifi/teardown/Snipaste_2022-08-02_20-29-40.jpg" alt="img"></p><p><del>那麽問題來了, 既然它性能看起來這麽不錯, 能不能拿來跑 bot 玩</del></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;入場恨晚&quot;&gt;&lt;a href=&quot;#入場恨晚&quot; class=&quot;headerlink&quot; title=&quot;入場恨晚&quot;&gt;&lt;/a&gt;入場恨晚&lt;/h2&gt;&lt;p&gt;前天在群裡看到大佬們在討論一個 WiFi 上網卡, 據説是采用的高通 Snapdragon 410 的方案,&lt;br&gt;然後價格還特別香只要 19.9。&lt;/p&gt;</summary>
    
    
    
    <category term="OpenStick" scheme="https://blog.awa.moe/categories/OpenStick/"/>
    
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    <category term="撿垃圾" scheme="https://blog.awa.moe/tags/%E6%92%BF%E5%9E%83%E5%9C%BE/"/>
    
    <category term="OpenStick" scheme="https://blog.awa.moe/tags/OpenStick/"/>
    
  </entry>
  
  <entry>
    <title>CH1115 OLED 熒幕高溫情況</title>
    <link href="https://blog.awa.moe/2022/08/01/ch1115-problem/"/>
    <id>https://blog.awa.moe/2022/08/01/ch1115-problem/</id>
    <published>2022-07-31T20:37:08.000Z</published>
    <updated>2024-03-17T08:02:39.839Z</updated>
    
    <content type="html"><![CDATA[<h2 id="問題"><a href="#問題" class="headerlink" title="問題"></a>問題</h2><p>最近在倒騰 USBKEY, 但在調試 CH1115 的時候發現, 一旦發送開屏指令,<br>在熒幕 IC 処會出現大約 90 攝氏度左右的發熱點。不是很清楚怎麽回事。</p><span id="more"></span><p>頂著這麽高的溫度竟然還 debug 了好幾個小時, 十分慶幸沒有把我房間燒起來 (<del>不</del>)<br>來看一看熱成像</p><p><img src="/../static/ch1115-problem/Snipaste_2022-08-01_04-34-04.jpg" alt="img"></p><p>溫度非常恐怖, 順帶著穩壓也開始微微發燙了。<br>但是看這溫度最少也是有午安大電牛的吧(<del>5A大電流</del>), 但是它只有 132ma 的電流, 有點意外。<br>同時也幾乎可以肯定不是短路造成的問題。<br><img src="/../static/ch1115-problem/Snipaste_2022-08-01_05-07-48.jpg" alt="img"></p><p>在發現這個問題之前, 我還在疑惑熒幕爲什麽亮了但是沒有完全亮,<br>當時是滿山遍野地在翻閲手冊找「亮度」 和 「對比度」相關的資料, 一心想在睡覺前調好, 完全沒有發覺溫度有異常。</p><p><img src="/../static/ch1115-problem/Snipaste_2022-08-01_04-41-51.jpg" alt="img"></p><p>現在一想, 看起來事情確實有點蹊蹺。</p><h2 id="原理圖"><a href="#原理圖" class="headerlink" title="原理圖"></a>原理圖</h2><p>儘管到目前爲止這種情況發生的原因尚不明確, 不過先把原理圖po出來吧。<br><img src="/../static/ch1115-problem/Snipaste_2022-08-01_04-46-48.jpg" alt="img"></p><p>這是公版的是用内置電荷泵的原理圖<br><img src="/../static/ch1115-problem/Snipaste_2022-08-01_04-49-07.jpg" alt="img"></p><p>大體上的改動是刪除了沒什麽用的 MOS 管, 考慮到設備采用 USB 供電,<br>只要漏電流不嚴重, 那還是能夠接受的。</p><p>其次就是 <code>VBAT_in</code> 処, 由於設備沒有電池, 故將其直接引到 VMCU, 也就是 3.3v。<br>(<del>應該也沒什麽問題吧</del>)</p><p>不過我總覺得事情沒這麽簡單。</p><h2 id="接錯綫了"><a href="#接錯綫了" class="headerlink" title="接錯綫了"></a>接錯綫了</h2><p>人剛剛起床。在跟賣家一番激情對綫之後, 才發現原來是綫接錯了。</p><p>需要注意的是, 熒幕的 VDD 是邏輯電壓, 一般和晶片電壓一致為 3.3v,<br>但它的 VCC 可不是 3.3v, 而會到是8v左右, 或更高。</p><p>因爲根據手冊, 在使用外置電荷泵時, 第 14 脚, 也就是 VCC 需要接入 8v 的電源, 這個脚是通往内部電荷泵輸出的。<br>注意看圖片底部注釋的 <code>VCC_in</code>。<br><img src="/../static/ch1115-problem/Snipaste_2022-08-01_17-25-23.jpg" alt="img"></p><p><strong>所以想必, 在使用内部電荷泵的時候, 這個脚應該會至少輸出 8v 左右的電壓, 並且要串濾波電容接地。</strong></p><p>然而, 我把它… 拉到了 3.3v。<br><img src="/../static/ch1115-problem/Snipaste_2022-08-01_17-30-36.jpg" alt="img"></p><p>滿身瘡痍, 哭死.wav<br>翻車, 絕對の大翻車。這就折騰修東西去了, 嗚嗚</p><h2 id="成功點亮"><a href="#成功點亮" class="headerlink" title="成功點亮"></a>成功點亮</h2><p>好耶, 修好了。只需要把 VCC 懸空就可以了。<br>亮度問題也順帶解決。 (熒幕上的白點點可以無視掉, 那只是因爲沒有刷屏直接點亮的緣故。<br><img src="/../static/ch1115-problem/Snipaste_2022-08-01_18-35-56.jpg" alt="img"></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;問題&quot;&gt;&lt;a href=&quot;#問題&quot; class=&quot;headerlink&quot; title=&quot;問題&quot;&gt;&lt;/a&gt;問題&lt;/h2&gt;&lt;p&gt;最近在倒騰 USBKEY, 但在調試 CH1115 的時候發現, 一旦發送開屏指令,&lt;br&gt;在熒幕 IC 処會出現大約 90 攝氏度左右的發熱點。不是很清楚怎麽回事。&lt;/p&gt;</summary>
    
    
    
    <category term="STM32" scheme="https://blog.awa.moe/categories/STM32/"/>
    
    
    <category term="硬體開發" scheme="https://blog.awa.moe/tags/%E7%A1%AC%E9%AB%94%E9%96%8B%E7%99%BC/"/>
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    <category term="COSMOS USBKEY" scheme="https://blog.awa.moe/tags/COSMOS-USBKEY/"/>
    
    <category term="CH1115" scheme="https://blog.awa.moe/tags/CH1115/"/>
    
  </entry>
  
  <entry>
    <title>AXP173 的故障修復</title>
    <link href="https://blog.awa.moe/2022/07/31/fix-axp173/"/>
    <id>https://blog.awa.moe/2022/07/31/fix-axp173/</id>
    <published>2022-07-31T03:02:08.000Z</published>
    <updated>2024-03-17T08:02:39.839Z</updated>
    
    <content type="html"><![CDATA[<h2 id="從安利到翻車再到白嫖"><a href="#從安利到翻車再到白嫖" class="headerlink" title="從安利到翻車再到白嫖"></a>從安利到翻車再到白嫖</h2><p>説到白嫖, 那那那那那那我可就精神了啊 XD。<br>在給 LTC佬 安利了 AXP173 PMIC 的半個月之後, 他在私訊找到我說他板子翻車了。</p><p>えええ—– ? 怎麽回事。<br>我都用的好好的東西, 爲什麽到了你的手上就翻?<br>什麽?! 你第一版板子就跑去做 SMT ?</p><p>那請務必寄給我一個, 好讓我(<del>白嫖一下</del>)康康怎麽回事 。</p><span id="more"></span><p>經過兩天的焦灼等待, 板子終於到了<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-22-33.jpg" alt="img"><br>整體來講, 板子看起來美觀, 還是很不錯的。畢竟我 LTC 佬是什麽人呐, 對不對 XD<br>先給 8 分, 扣 2 分是因爲怕他飄了。開搞開搞! XD</p><h2 id="裂開"><a href="#裂開" class="headerlink" title="裂開"></a>裂開</h2><p>貼好缺少的 AXP173之後, 上電發現 DCDC1 電感的輸出會突然衝到 4v 然後掉電。<br>以一般理性而言, 很明顯 Buck 衝飛了, 目測反饋電路有問題, 就找他要到了原理圖看。</p><p>然後人就裂開了<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_05-27-23.jpg" alt="img"></p><p>啊…這?<br>雖然不説畫的怎麽樣, 至少我看到的時候是 <code>?</code> 的。</p><h2 id="問題一-反饋電路沒有電氣連接"><a href="#問題一-反饋電路沒有電氣連接" class="headerlink" title="問題一 反饋電路沒有電氣連接"></a>問題一 反饋電路沒有電氣連接</h2><p>在仔細對照公版原理圖之後, 在47姐的提醒下 (<del>47nb!</del>) 找到了端倪<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_05-50-01.jpg" alt="img"></p><p>而在 PCB 上, 絕絕子<br>這麽不仔細, Buck 是肯定要完蛋的, 衝飛了不怕把後端負載炸了嘛。 (<del>高壓の入侵</del>)<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_05-36-45.jpg" alt="img"></p><p>飛綫之後, 爲了驗證電路是否還有問題, 於是斷開了後端負載的命脈。<br>這邊還是建議鋪銅走綫, DCDC1 後邊這麽多設備, 然而只拉了這麽一根細綫, 不是很合理。<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_05-43-14.jpg" alt="img"></p><p>修復完成, AXP173 空載輸出恢復至 3.6v<br>當然別忘了量完記得把命脈接回去x<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_05-47-26.jpg" alt="img"></p><h2 id="問題二-ACIN-和-VBUS-混淆使用"><a href="#問題二-ACIN-和-VBUS-混淆使用" class="headerlink" title="問題二 ACIN 和 VBUS 混淆使用"></a>問題二 ACIN 和 VBUS 混淆使用</h2><p>對於 AXP173 有三個輸入方式, 分別是 <code>ACIN</code>, <code>VBUS</code>, <code>VBAT</code>.<br>先抛開 VBAT 不談, 先來説一説 ACIN 和 VBUS。</p><p>ACIN 指交流電來源, 是從 5v 電源適配器的輸出來的, 一般可以輸出 1A &#x2F; 2A 或者更多。<br>VBUS 則指 PC 的 USB 總綫電源, 在 USB2.0的標準下, 最大輸出能力只有 500mA, 而 USB3.0 最大 900mA。</p><p>雖然對於 AXP173 來説二者都是可以作爲「充電」的電源來源,<br>但一般情況下只考慮充電的話, 還是推薦使用 ACIN, 可以避免許多麻煩。</p><p>然而眼前的板子, 它很奇怪。<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-00-43.jpg" alt="img"><br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-01-22.jpg" alt="img"></p><p>可以明顯的看到, ACIN 接入了 VBUS。<br>但是 VBUS 接了一個 <code>VBUS2</code>, 這是什麽草玩意?</p><p>一番搜尋, 發現這個 VBUS2 除了接了一個 TP5 之後就什麽都沒接, 它是空的 (?<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-04-00.jpg" alt="img"></p><p>并且因爲他在原理圖上把 N_VBUSEN 拉到了 GND, 導致 AXP173 在使用 ACIN 初始化完畢之後,<br>自動切換到 VBUS, 但這個 VBUS 是假的什麽都沒接… 於是它自鯊了。</p><p>解決方法自然也很簡單, 只需要把 ACIN 和 VBUS 短接<br>這樣他們就合體了, 無視 N_VBUSEN。 (這裡用了比較<del>高端</del>的手法, 直接在封裝上短接)<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-09-03.jpg" alt="img"></p><h2 id="問題三-電容接在了奇怪的地方"><a href="#問題三-電容接在了奇怪的地方" class="headerlink" title="問題三 電容接在了奇怪的地方"></a>問題三 電容接在了奇怪的地方</h2><p>最後一個問題… 也是找了很久很久才發現。<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-13-35.jpg" alt="img"><br>這個就不多説了, <del>大概就是抄錯了</del>。</p><p>解決方法, 把電容和電阻斷開, 並飛綫到 GND。<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-16-07.jpg" alt="img"></p><h2 id="修到最後"><a href="#修到最後" class="headerlink" title="修到最後"></a>修到最後</h2><p>至此, AXP173 的電路已經完成修復。<br>板子也成功上電, 好在他的後端電路沒有什麽問題, 不然又是一頓好找了。</p><p>連接到電腦, 出現了 RP2040 的 VFS 模擬分區。<br><img src="/../static/fix-axp173/Snipaste_2022-08-01_06-19-17.jpg" alt="img"></p><p>由此可見, 白嫖還是需要付出一點代價的 (<del>大霧</del>)</p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;從安利到翻車再到白嫖&quot;&gt;&lt;a href=&quot;#從安利到翻車再到白嫖&quot; class=&quot;headerlink&quot; title=&quot;從安利到翻車再到白嫖&quot;&gt;&lt;/a&gt;從安利到翻車再到白嫖&lt;/h2&gt;&lt;p&gt;説到白嫖, 那那那那那那我可就精神了啊 XD。&lt;br&gt;在給 LTC佬 安利了 AXP173 PMIC 的半個月之後, 他在私訊找到我說他板子翻車了。&lt;/p&gt;
&lt;p&gt;えええ—– ? 怎麽回事。&lt;br&gt;我都用的好好的東西, 爲什麽到了你的手上就翻?&lt;br&gt;什麽?! 你第一版板子就跑去做 SMT ?&lt;/p&gt;
&lt;p&gt;那請務必寄給我一個, 好讓我(&lt;del&gt;白嫖一下&lt;/del&gt;)康康怎麽回事 。&lt;/p&gt;</summary>
    
    
    
    <category term="修修補補的寶貴經驗" scheme="https://blog.awa.moe/categories/%E4%BF%AE%E4%BF%AE%E8%A3%9C%E8%A3%9C%E7%9A%84%E5%AF%B6%E8%B2%B4%E7%B6%93%E9%A9%97/"/>
    
    
    <category term="無聊研究" scheme="https://blog.awa.moe/tags/%E7%84%A1%E8%81%8A%E7%A0%94%E7%A9%B6/"/>
    
    <category term="正當白嫖行爲" scheme="https://blog.awa.moe/tags/%E6%AD%A3%E7%95%B6%E7%99%BD%E5%AB%96%E8%A1%8C%E7%88%B2/"/>
    
    <category term="修修補補的寶貴經驗" scheme="https://blog.awa.moe/tags/%E4%BF%AE%E4%BF%AE%E8%A3%9C%E8%A3%9C%E7%9A%84%E5%AF%B6%E8%B2%B4%E7%B6%93%E9%A9%97/"/>
    
    <category term="AXP173" scheme="https://blog.awa.moe/tags/AXP173/"/>
    
  </entry>
  
  <entry>
    <title>破解一個 IDE 的授權 (一)</title>
    <link href="https://blog.awa.moe/2022/07/08/crack/crack-an-ide/part-one/"/>
    <id>https://blog.awa.moe/2022/07/08/crack/crack-an-ide/part-one/</id>
    <published>2022-07-08T01:19:31.000Z</published>
    <updated>2024-03-17T08:02:39.839Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><blockquote><p>破解僅作爲學習交流使用, 不用作任何商業目的。<br>以下所有描述和截圖均經過脫敏處理。</p></blockquote><p>從朋友那收來了一批好玩的 IC (<del>不方便透露 XD</del>), 但是發現用它需要許可證, 好像還要簽保密協議之類的。<br>因爲自己是散戶人家肯定也不願意跟我簽的x, 所以沒辦法只能另尋他路了。</p><p>這個東西還比較小衆, 玩的人不多, 所以幾乎也沒辦法搜到太多資料。<br>於是抱著試一試的心態打開了 IDA, 想看看能不能找出來什麽東西。</p><span id="more"></span><h2 id="大吃一斤"><a href="#大吃一斤" class="headerlink" title="大吃一斤"></a>大吃一斤</h2><p>什麽? 我這麽菜的也能撿到漏? 不會吧不會吧不會吧?</p><p>來看一下它的啓動邏輯</p><p><img src="/../../../static/crack/crack-an-ide/Snipaste_2022-07-10_10-26-16.jpg" alt="img"><br><img src="/../../../static/crack/crack-an-ide/Snipaste_2022-07-10_10-32-43.jpg" alt="img"></p><p>邏輯很簡單。<br>啓動時會檢查一下授權, 如果授權不存在或者失效則彈出錯誤框, 並啓動一個授權配置程式並退出自己。<br>如果授權有效, 則加載主窗口。</p><p>不是… 就這?<br>在我對於破解的經驗中, 不應該是會讓我原地放棄的, 鋪天蓋地的混淆亂碼和一堆「Invalid Instructions」嗎?<br>怎麽今天讓我撿到漏了 (</p><h2 id="順水推舟"><a href="#順水推舟" class="headerlink" title="順水推舟"></a>順水推舟</h2><p>既然它校驗的方法這麽簡單, 那乾脆直接爆破, 改掉 <code>check_license</code> 函數的返回值就可以了,<br>比如在這個函數頂部清棧並 ret 0 就可以實現。</p><p>但萬萬沒想到的是, 它竟然在很多地方(指各種負責次要功能的 exe) 都加了這種校驗。<br>那就非常棘手了, 不可能所有文件我都去打補丁嘛, 而且找起來也是非常麻煩。</p><p>而且順帶, 我發現它竟在 exe 内嵌入了一個 RSA Public Key。<br><img src="/../../../static/crack/crack-an-ide/Snipaste_2022-07-10_10-58-18.jpg" alt="img"><br>並且驗證邏輯都是依賴於 OpenSSL 去算 RSA 簽名的。<br>那麽, 能不能把他的 Public 換成我們自己生成的呢? (<del>好像是一個更優雅的辦法</del>)</p><p>於是, 就手動生成了一個1024 位的 RSA Keypair, 再用 HXD 找到它原來 Public 的位置, 替換掉。<br>最後按照他驗證的方法去逆著生成一個假 License 喂給 IDE。<br><strong>然後它真的能用。</strong></p><p>於是乎, 矛頭就指向了無辜的 「OpenSSL」。 (<del>怎麽又是你, 太慘了</del>)<br><img src="/../../../static/crack/crack-an-ide/Snipaste_2022-07-10_10-49-34.jpg" alt="img"></p><h2 id="破解思路"><a href="#破解思路" class="headerlink" title="破解思路"></a>破解思路</h2><p>反匯編上邊那個 <code>load_key</code> 函數,<br><img src="/../../../static/crack/crack-an-ide/Snipaste_2022-07-10_11-28-06.jpg" alt="img"></p><p>畢竟破解要盡可能以保證原有功能正常為前提,<br>所以我的目光來到了 <code>BIO_new_mem_buf</code> 這個函數上。</p><p>使用它作爲破解點有幾個好處</p><ul><li>可以插入判斷 Public 的代碼, 防止破壞了原有的功能</li><li>由於是動態庫上的公開 API 函數, 方便快速定位</li><li>工作量小, 多個程式都會使用此 API 來加載 Public, 一処破解全部破解</li></ul><p>經過簡單修補之後, 換上了我們自己的 Public, 最終它變成了這樣<br><img src="/../../../static/crack/crack-an-ide/Snipaste_2022-07-10_11-40-35.jpg" alt="img"></p><p>大概是先判斷一下調用方傳過來的 Public 是不是我們想要的,<br>如果是則直接換成我們自己的, 並調用原來的 <code>BIO_new_mem_buf</code>, 否則不干涉原始執行流程。</p><p>典型的 MITM 攻擊 (<em>Man In The Middle</em>)。</p><h2 id="試一試"><a href="#試一試" class="headerlink" title="試一試"></a>試一試</h2><p>換上之前生成好的假 License,<br><img src="/../../../static/crack/crack-an-ide/Snipaste_2022-07-10_11-43-16.jpg" alt="img"></p><p>至此, 手動破解結束。</p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;破解僅作爲學習交流使用, 不用作任何商業目的。&lt;br&gt;以下所有描述和截圖均經過脫敏處理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;從朋友那收來了一批好玩的 IC (&lt;del&gt;不方便透露 XD&lt;/del&gt;), 但是發現用它需要許可證, 好像還要簽保密協議之類的。&lt;br&gt;因爲自己是散戶人家肯定也不願意跟我簽的x, 所以沒辦法只能另尋他路了。&lt;/p&gt;
&lt;p&gt;這個東西還比較小衆, 玩的人不多, 所以幾乎也沒辦法搜到太多資料。&lt;br&gt;於是抱著試一試的心態打開了 IDA, 想看看能不能找出來什麽東西。&lt;/p&gt;</summary>
    
    
    
    <category term="逆向破解" scheme="https://blog.awa.moe/categories/%E9%80%86%E5%90%91%E7%A0%B4%E8%A7%A3/"/>
    
    
  </entry>
  
  <entry>
    <title>用 OpenSCAD 繪製一個圓角正方體</title>
    <link href="https://blog.awa.moe/2022/06/02/openscad/draw-squircle-cube/"/>
    <id>https://blog.awa.moe/2022/06/02/openscad/draw-squircle-cube/</id>
    <published>2022-06-02T00:39:13.000Z</published>
    <updated>2024-03-17T08:02:39.843Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>個人覺得 OpenSCAD 入門還算很快的, 語法非常接近 C 語言。</p><p>相比常用的工業建模軟體 SolidWorks 而言,<br>它可以用程式碼去描述工件外觀和大小。具有參數化和可移植性的特點。 <del>非常適合改來改去</del></p><p>話不多説, 立刻開始。</p><span id="more"></span><h2 id="圓角正方體的平面構成"><a href="#圓角正方體的平面構成" class="headerlink" title="圓角正方體的平面構成"></a>圓角正方體的平面構成</h2><p>我們這裡説的不是通常意義上的 <code>八個邊圓角</code> 的那種, <del>一個立方體有8個邊嘛</del><br>而是 <code>四個邊圓角</code> 的類型, 即 <code>與底面垂直的四個邊</code> 是圓角。<br><img src="/../../static/openscad/draw-squircle-cube/Snipaste_2022-06-02_10-50-17.jpg" alt="img"></p><p>而我們在矢量圖形中一般是使用 <code>圓形</code> 和 <code>矩形</code> 取並集去拼合圓角矩形。<br><img src="/../../static/openscad/draw-squircle-cube/ug0ae771.gif" alt="img"><br>當然你也可以直接透過繪製四個 1&#x2F;4 Arc 來達到目的。</p><p>那麽在 OpenSCAD 中我們也有差不多的東西,<br>我們可以使用 <code>hull()</code> 來取得對象集合在空間上的極限邊距, 同時抛棄對象集合内部所有的頂點。<br><del>擺爛了, 隨便把樣子搞出來, 然後丟掉</del></p><h2 id="嘗試畫一個"><a href="#嘗試畫一個" class="headerlink" title="嘗試畫一個"></a>嘗試畫一個</h2><p>理解這些理論知識之後, 我們可以開始試著畫一個了</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// for high definition curves</span></span><br><span class="line"><span class="comment">// so set factor to 0.1</span></span><br><span class="line">$fs = <span class="number">0.1</span>;</span><br><span class="line"></span><br><span class="line">translate ([<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]) &#123;</span><br><span class="line">  <span class="comment">// get bounding box</span></span><br><span class="line">  hull() &#123;</span><br><span class="line">    <span class="comment">// translate object to [0, 0, 0]</span></span><br><span class="line">    <span class="comment">// draw a cylinder with height 5, radius 0.5</span></span><br><span class="line">    translate([<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]) cylinder(<span class="number">5</span>, <span class="number">0.5</span>, <span class="number">0.5</span>);</span><br><span class="line">    translate([<span class="number">5</span>, <span class="number">0</span>, <span class="number">0</span>]) cylinder(<span class="number">5</span>, <span class="number">0.5</span>, <span class="number">0.5</span>);</span><br><span class="line">    translate([<span class="number">0</span>, <span class="number">5</span>, <span class="number">0</span>]) cylinder(<span class="number">5</span>, <span class="number">0.5</span>, <span class="number">0.5</span>);</span><br><span class="line">    translate([<span class="number">5</span>, <span class="number">5</span>, <span class="number">0</span>]) cylinder(<span class="number">5</span>, <span class="number">0.5</span>, <span class="number">0.5</span>);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然後我們就能得到一個<br><img src="/../../static/openscad/draw-squircle-cube/Snipaste_2022-06-02_11-07-12.jpg" alt="img"></p><p>然後可以包裝一下成爲一個模塊</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">module <span class="title function_">squircle</span> <span class="params">(size = [<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>], r = <span class="number">0.5</span>, center = <span class="literal">false</span>)</span> &#123;</span><br><span class="line">  $fs = <span class="number">0.1</span>;</span><br><span class="line">  x = size[<span class="number">0</span>] - r * <span class="number">2</span>;</span><br><span class="line">  y = size[<span class="number">1</span>] - r * <span class="number">2</span>;</span><br><span class="line">  z = size[<span class="number">2</span>];</span><br><span class="line">  </span><br><span class="line">  translate(center ? [-(x / <span class="number">2</span>), -(y / <span class="number">2</span>), <span class="number">0</span>] : [r, r, <span class="number">0</span>])</span><br><span class="line">  hull() &#123;</span><br><span class="line">    translate([<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]) cylinder(z, r = r);</span><br><span class="line">    translate([x, <span class="number">0</span>, <span class="number">0</span>]) cylinder(z, r = r);</span><br><span class="line">    translate([<span class="number">0</span>, y, <span class="number">0</span>]) cylinder(z, r = r);</span><br><span class="line">    translate([x, y, <span class="number">0</span>]) cylinder(z, r = r);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>僅僅幾行代碼就能生成一個圓角正方體,<br>以後只需要簡單地修改參數, 我們就能得到不同尺寸的圓角正方體了。<br>這可比 SolidWorks 改草稿的效率要高很多。</p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;個人覺得 OpenSCAD 入門還算很快的, 語法非常接近 C 語言。&lt;/p&gt;
&lt;p&gt;相比常用的工業建模軟體 SolidWorks 而言,&lt;br&gt;它可以用程式碼去描述工件外觀和大小。具有參數化和可移植性的特點。 &lt;del&gt;非常適合改來改去&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;話不多説, 立刻開始。&lt;/p&gt;</summary>
    
    
    
    <category term="OpenSCAD" scheme="https://blog.awa.moe/categories/OpenSCAD/"/>
    
    
  </entry>
  
  <entry>
    <title>年輕人的第一台網分</title>
    <link href="https://blog.awa.moe/2022/05/29/bonjour-litevna/"/>
    <id>https://blog.awa.moe/2022/05/29/bonjour-litevna/</id>
    <published>2022-05-29T08:21:48.000Z</published>
    <updated>2024-03-17T08:02:39.839Z</updated>
    
    <content type="html"><![CDATA[<h2 id="開箱"><a href="#開箱" class="headerlink" title="開箱"></a>開箱</h2><p>LiteVNA (<em>Vector Network Analyzer</em>) 是一個開源的矢量網路分析儀,<br>可以用來分析天綫性能 &#x2F; 阻容抗匹配 &#x2F; 史密斯圖 &#x2F; 天綫增益 等。<br>因爲最近畫板子需要調試射頻, 所以就趁著價格香就買了。</p><span id="more"></span><p>它長得十分輕便小巧, 顯然沒有那些實驗室内的專業設備強, 但也夠用。<br><img src="/../static/bonjour-litevna/Snipaste_2022-05-29_17-03-49.jpg" alt="img"></p><p>隨包裝附贈了一些配件,<br>有兩根饋綫, 三個測試頭, 一個連接器和一根 TypeC 綫。<br><img src="/../static/bonjour-litevna/Snipaste_2022-05-29_17-13-25.jpg" alt="img"></p><p>不過這個中文説明書對我來説沒什麽用x <del>反正英文又不是不能看</del></p><p>需要特別説明的是, 中間三個金屬帽一樣的東西是用來校準設備用的,<br>我們下一章節中會講到如何校準設備。</p><h2 id="校準設備"><a href="#校準設備" class="headerlink" title="校準設備"></a>校準設備</h2><p>網分必須校準之後才能開始使用, 所以我們需要三個金屬帽<br><img src="/../static/bonjour-litevna/Snipaste_2022-05-29_17-13-05.jpg" alt="img"></p><p>它們從左到右分別叫<code>短路頭</code> &#x2F; <code>開路頭</code> &#x2F; <code>負載頭</code>。<br>其中負載頭一般為 50Ω。</p><p>我們首先進入 <code>CALIBRATE</code> -&gt; <code>CALIBRATE</code> 頁面,<br>能看到有 <code>OPEN</code> &#x2F; <code>SHORT</code> &#x2F; <code>LOAD</code> &#x2F; <code>ISOLN</code> &#x2F; <code>THRU</code> 這四個選項。</p><p>以下列步驟依次進行校準</p><ul><li>把開路頭接到 PORT1, 點擊一下 OPEN, 等待校準完畢</li><li>把短路頭接到 PORT1, 點擊一下 SHORT, 等待校準完畢</li><li>把負載頭接到 PORT1, 點擊一下 LOAD, 等待校準完畢</li><li>把負載頭接到 PORT2, 開路頭接到 PORT1, 點擊一下 ISOLN, 等待校準完畢</li><li>用饋綫連接 PORT1 和 PORT2, 點擊一下 THRU, 等待校準完畢</li></ul><p>當完成以上步驟之後, 別忘了點擊 DONE 保存校準數據。<br>當圖表左邊出現一些小字母的時候, 就説明校準完成了。</p><p><img src="/../static/bonjour-litevna/Snipaste_2022-05-29_17-31-59.jpg" alt="img"></p><p>不過開始測試天綫之前, 我們需要回到主界面驗證一下。<br>依次接上開路頭, 短路頭, 負載頭, 饋綫, 觀察史密斯圖 <del>就是那個綠色的玩意</del>,</p><p>有一個小口訣:</p><blockquote><p>短路在左邊, 負載在中間, 開路在右邊</p></blockquote><p>用它進行對比驗證。</p><h2 id="測試天綫和鑒別"><a href="#測試天綫和鑒別" class="headerlink" title="測試天綫和鑒別"></a>測試天綫和鑒別</h2><p>最後我們來實測一下天綫~</p><p>先測一個 2.4Ghz 小辣椒天綫, 可以看到它的表現力也就凑合。<br><img src="/../static/bonjour-litevna/VNA_20220529174532.jpg" alt="img"></p><p>再來測一根, 經驗可得出它是一個 433Mhz 的天綫。<br><img src="/../static/bonjour-litevna/VNA_20220529174637.jpg" alt="img"></p><h2 id="小插曲"><a href="#小插曲" class="headerlink" title="小插曲"></a>小插曲</h2><p>最後突然想起我去年打 NOAA 的時候手作的一根天綫。<br><img src="/../static/bonjour-litevna/Snipaste_2022-05-29_17-52-44.jpg" alt="img"></p><p>趕緊拿出來測了一測, 發現<br><img src="/../static/bonjour-litevna/Snipaste_2022-05-29_17-51-40.jpg" alt="img"></p><p>哇什麽玩意, 簡直爛到不行。<br>立刻下樓, 把天綫扔進了垃圾桶。 <del>怪不得總是失敗</del></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;開箱&quot;&gt;&lt;a href=&quot;#開箱&quot; class=&quot;headerlink&quot; title=&quot;開箱&quot;&gt;&lt;/a&gt;開箱&lt;/h2&gt;&lt;p&gt;LiteVNA (&lt;em&gt;Vector Network Analyzer&lt;/em&gt;) 是一個開源的矢量網路分析儀,&lt;br&gt;可以用來分析天綫性能 &amp;#x2F; 阻容抗匹配 &amp;#x2F; 史密斯圖 &amp;#x2F; 天綫增益 等。&lt;br&gt;因爲最近畫板子需要調試射頻, 所以就趁著價格香就買了。&lt;/p&gt;</summary>
    
    
    
    <category term="LiteVNA" scheme="https://blog.awa.moe/categories/LiteVNA/"/>
    
    
  </entry>
  
</feed>
