發表文章

解決Windows開機卡在歡迎畫面過久的問題

這個問題困擾著我許久,但是就這樣用了三年一直沒去研究如何解決,症狀就是開機登入後,會在歡迎畫面轉圈圈,大概等個3~5分鐘,甚至十多分鐘才能進桌面使用。看了一些資料,似乎是Windows進入桌面前會先掃描一次"C:\Users\user_name\AppData\Local\Temp",若是Temp資料夾內容很龐大,或是非常多小檔案,那就會花很久的時間。 解決方法,就是把"C:\Users\user_name\AppData\Local\Temp"這個目錄刪掉,重新開機測試,馬上就解決了。當然,保險起見是先把Temp這個資料夾改名,例如改名成Temp_bk,有問題還能夠改回去復原。 參考資料: https://www.reddit.com/r/Windows10/comments/nnkocz/login_get_stuck_at_welcome_screen_for_a_long_time/

NUC1263 LLSIClock開發筆記:LLSI與PDMA搭配使用

圖片
DMA是什麼? DMA的全稱叫做Direct Memory Access,「直接記憶體存取」。它可以直接根據使用者設定的來源位址、目標位址、長度等,直接搬移記憶體中的資料,而不用CPU的介入,幫CPU分攤一些反覆搬移的事情。尤其在搬移大量資料時,或者一些CPU負載重的應用情境之下,藉由DMA的幫忙可以顯著提高系統整體的效能。 在計算機系統中,CPU之外的硬體周邊裝置也經常會映射在一些記憶體位址中,讓使用者能像讀寫記憶體般,輕易地操作它們,稱作Memory-mapped IO。因此DMA也可以搬移硬體周邊裝置的資料。 PDMA是什麼? 不過在微控制器的應用中,資料的搬移往往需要根據周邊裝置的狀態同步。DMA前面加了一個P就是Peripheral Direct Memory Access,意即可以經由硬體周邊裝置產生的事件當成是DMA的傳輸請求,直接觸發DMA傳輸。 以這次的NUC1263為例,LLSI硬體提供了深度4-word (16-byte)的FIFO buffer,是在FIFO有足夠空間時,由LLSI硬體產生信號直接向PDMA發送傳輸請求,依序將整個Frame buffer傳輸完畢,期間就不需要CPU介入該過程。 使用PDMA的好處 透過硬體產生的事件,直接將資料搬移的任務交給PDMA,而非反覆讓CPU進中斷服務程式搬移資料,把CPU的資源留給那些真正需要運算的程式。 讓我們開始看看LLSI+PDMA的程式吧! 基於上一篇文章「運用指標提高LLSI Frame Buffer的可讀性、易用性」的程式下去修改成PDMA傳輸的版本,主要留意下面這些內容。 要記得在SYS_Init()中開啟LLSI和PDMA的clock LLSI_Open()要將工作模式設為LLSI_MODE_PDMA 首先在SYS_Init()中除了LLSI之外還要記得開啟PDMA的clock。 /* Enable LLSI0 module clock */ CLK_EnableModuleClock(LLSI0_MODULE); /* Enable PDMA peripheral clock */ CLK_EnableModuleClock(PDMA_MODULE); PDMA_Init()的部分,我使用PDMA Channel...

一次成功!Windows在WSL中建立EDK2環境

圖片
相信許多BIOS工程師,特別是Module Team或者是業餘愛好者,都會有架EDK2環境的需求。這邊就來介紹,我是怎麼在Windows 裡面架環境的。 歸功於WSL,現在在Windows中架各種環境,也適用Linux的方法,這通常比Windows的方法容易許多。WSL全名為Windows Subsystem for Linux,可以把它想像成是一個虛擬機,由於是Microsoft Windows 10、11原生提供的功能,就連kernel似乎都是專為Windows重新編譯過的,運作起來相當地高效。如何安裝WSL? 基本上照著微軟的文件,應該沒什麼困難。 https://learn.microsoft.com/zh-tw/windows/wsl/install 我自己是慣用Debian,安裝完畢以後,就會獲得一個CLI的Linux。同樣地,也可以在VS Code中的Terminal,開啟WSL。 接著就是安裝EDK2相關的工具了,除了Make和GCC (包含在build-essential裡面),還要安裝nasm和iasl,以及uuid-dev。 sudo apt install build-essential nasm iasl uuid-dev EDK2許多工具使用Python撰寫,build過程亦會使用到Python,這邊避免相容性問題,固定使用Python 3.8.5。由於各Linux發行版提供的Python版本不一定相同,所以這邊是直接下載Python的source code來編譯。當然,多數情況用apt install python3也是可以的。 cd ~/ wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz tar xvf Python-3.8.5.tar.xz cd Python-3.8.5/ ./configure --enable-optimizations make 接下來就是把EDK2 clone下來,切換到stable release,然後把submodule也clone下來。 git clone https://github.com/tianocore/edk2.git cd edk2 git checkout edk2-stable20251...

git常用指令(不定時更新)

取消commit git reset HEAD^

ffmpeg常用指令(不定時更新)

指定影片的bitrate,以800 kbps為例 ffmpeg -i input.mp4 -b 800k output.mp4 指定影片的frame rate,以30 fps為例 ffmpeg -i input.mp4 -r 30 output.mp4 使用特定codec進行轉檔,以H.265為例 ffmpeg -i input.mp4 -vcodec libx265 output.mp4 將影片製作為gif動畫 ffmpeg -i input.mp4 -filter_complex "split[s0][s1];[s0]palettegen=stats_mode=single:transparency_color=000000[p];[s1][p]paletteuse=new=1:alpha_threshold=10" output.gif 裁切影片-ss是開始時間,-to是結束時間 或-t 輸入自開始時間的時長 ffmpeg -i input.mp4 -ss mm:ss -to mm:ss output.mp4 ffmpeg -i input.mp4 -ss mm:ss -t mm:ss output.mp4 變更解析度,例如輸入影像為2K,輸出以1080p為例 ffmpeg -i input.mp4 -vf scale=-1:-1080 output.mp4 影片拼接,1.mp4、2.mp4、3.mp4,拼接合併為一個檔案output.mp4 echo 'file input1.mp4' >> f.txt #將要合併的檔案依序加入文字檔 echo 'file input2.mp4' >> f.txt echo 'file input3.mp4' >> f.txt ffmpeg -f concat -i f.txt -c copy output.mp4 #不改變編碼器(速度快) ffmpeg -f concat -i f.txt -vcodec libx265 output.mp4 #重新編碼為265 影片拼接,如果檔案frame rate等格式不一時,就要用filter_complex ffmpeg -i input1.mp4 ...

還記得Taiwanduino嗎?

圖片
還記得Taiwanduino嗎? Taiwanduino是一個Made in Taiwan的觸控、音效Arduino開發板套件,它是在2016年OpenLab.Taipei「週三來碗Arduino」聚會中發起一項的open-source hardware專案,曾經於Maker Faire Taipei展出,其營收會幫助OpenLab.Taipei及臉書社團Arduino.Taipei持續運作。 輕觸"臺灣"上的其中一個圓點,喊出「Taiwan number one」的口號,實現方式是將口號以PCM的格式錄製於5V SPI flash中,讀取後直接以PWM輸出到一顆NPN電晶體驅動喇叭;觸控也是以CapacitiveSensor函式庫來實現。電路中沒有功率放大器IC、沒有MP3播放模組,也沒有獨立的觸控IC,將所有功能集結在一顆ATmega328P當中。用最簡潔的硬體設計以韌體實現豐富功能,我認為就是一個良好的MCU應用典範。 這次收到的訂單比較特別,買家要將四個Taiwanduino帶出國交流,拜託了OpenLab.Taipei熱心志工幫忙組裝,再特別附上英文版文宣寄出。 開發心路: https://will-123456.blogspot.com/2016/05/taiwanduino.html 專案連結: https://github.com/will127534/Taiwanduino Taiwanduino的粉專: https://www.facebook.com/Taiwanduino 即刻下單: https://shopee.tw/product/174651435/5959971906/ 關於OpenLab.Taipei 2010年,創辦人鄭鴻旗先生和一群喜愛科技藝術與開源的朋友們成立OpenLab.Taipei,是台灣第一個自造者空間(maker space),Arduino.Taipei亦由OpenLab.Taipei分支出來。十多年來均以非營利的方式經營著線上及實體社群,幫助maker解決各種工具借用和疑難雜症。

NUC1263 LLSIClock開發筆記:運用指標提高LLSI Frame Buffer的可讀性、易用性

圖片
LLSI設計時大概是考量到系統整體效能,資料是以32-bit的寬度寫入LLSI FIFO的。因此最直接的方式就是將frame buffer宣告成32-bit的陣列,這個方式拿來點四色”ARGBW” LED時倒是沒什麼問題。但是當我試著用LLSI點亮三色ARGB七段顯示器的時候就有發現,1個顏色8-bit,1顆ARGB LED 3個顏色總共24-bit,資料的排列順序會就變成下面這樣 …  (第一行的註解是指第幾顆LED) // 2nd 1st 3rd 2nd 4th 3rd 6th 5th uint32_t g_au32frameBuffer[6] = {0xRRBBGGRR, 0xGGRRBBGG, 0xBBGGRRBB, 0xRRBBGGRR ...} 光用看的是不是就很頭大? 再想到之後要去個別調整每一顆ARGB LED的色彩、亮度,頭就更大了。這也讓我開始思考, 有沒有辦法將陣列宣告成8-bit,然後以32-bit的格式來讀取8-bit陣列,寫入LLSI的FIFO。 完整程式碼一樣可以看留言區或是GitHub https://github.com/danchouzhou/LLSIClock/blob/main/firmware/LLSI_RGB/main.c 從32-bit陣列轉變成8-bit陣列 陣列如果變成這樣讓g_au8frameBuffer[0]~[2],儲存第1顆ARGB LED的R, G, B;g_au8frameBuffer[3]~[5],儲存第2顆ARGB LED的R, G, B,以此類推,是不是直觀許多呢? volatile uint8_t g_au8frameBuffer[24] = { // R G B 0x80, 0x00, 0x00, // Red 0x80, 0x20, 0x00, // Orange 0x40, 0x40, 0x00, // Yellow 0x00, 0x80, 0x00, // Green 0x00, 0x00, 0xFF, // Blue 0x00, 0x40, 0x80, // Indigo 0x80, 0x00, 0xFF...

NUC1263 LLSIClock開發筆記:電路設計篇、億光ARGB七段顯示器

圖片
閱讀過上篇文章 開箱實作NUC1263 MCU!探索新唐獨家LLSI ARGB LED控制介面! 的讀者們,有沒有猜到我要做什麼了嗎? 是的,又要做時鐘啦! 先來公布畫好的電路圖和電路板 會陸續把相關的檔案更新到GitHub中: https://github.com/danchouzhou/LLSIClock NUC1263核心電路 這次訂購的晶片是封裝為LQFP48的NUC1263LD4CE,電路板空間不多就沒有把所有IO通通拉出來了,不過有把一些重要的IO集中在14-pin的SMT雙排排針J1上面,其中包含PA.0~PA.3,能同時支援I3C、I2C、SPI、UART、PWM,且能從VDDIO1電源接腳輸入IO電壓;以及主要能拿來當ADC、DAC輸入輸出的PB.12~PB.15,讓電路能有更彈性的擴充能力,未來要拿去接Wi-Fi模組、GPS、各式各樣的感測器就都不是問題! NUC1263LD4CE有內建48 MHz的RC震盪器,而且±1%的精確度已能滿足USB 2.0 Full-Speed (12Mbps)的需求,意思就是最小系統只要晶片接上電源就能運作! 不過為求單機計時精準,還是先把和003Clock同一顆的有源震盪器給畫上去了,畢竟±1%的話積少成多,一天86400秒最多可以落差到864秒 (約14分鐘)。當然,誤差也可以用GPS時間、Wi-Fi NTP或USB電腦連線來校正時間。 當初下訂時還在更小QFN33、QFN48掙扎著,不過看到QFN都沒有USB才作罷。不過雖然QFN封裝的NUC1263沒有USB,取而代之的是DDR5 SPD Hub (SPD5),應用在DRAM模組可以直接將SPD接到NUC1263,就不用額外一顆SPD晶片,內建I3C和ARGB LED介面LLSI,簡直就是電競記憶體的完美方案。 已經可以理解NUC1263是為電腦周邊推出的MCU,QFP封裝用在需要USB介面的鍵盤、滑鼠、耳麥等;QFN封裝適合用在DDR5記憶體模組。 題外話,這兩天還發現新唐M2A23同樣也有LLSI,同樣也是5V Cortex-M23,且支援3組CAN FD,工作溫度可以耐到125°C,看來是針對車用市場所推出的MCU。 ARGB七段顯示器 好了不瞞了,同學塞給我的神奇產品是他們新開發的ARGB七段顯示器,億光ELSS-4X6RGBWA/T2/S290-C...

開箱實作NUC1263 MCU!探索新唐獨家LLSI ARGB LED控制介面!

圖片
連假前看到新唐在論壇介紹NUC1263這顆MCU,除了CPU是ARMv8的Cortex-M23之外,還有一個新唐專利硬體周邊LLSI,加上億光同學塞了他們新開發的神奇產品給我,腦袋裡面馬上冒出漂亮的應用, 於是就上新唐線上商店下單一片NuMaker-NUC1263SD開發板和5顆晶片 ,沒想到隔天就到了~  新唐NUC1263系列產品帶給您炫彩的ARGB燈效控制 -LLSI介面簡易設計,方便好用- 不過作品還在設計當中,敬請期待。先來用現成的Adafruit NeoPixel Ring試玩一下NUC1263這顆MCU和它的LLSI吧!一樣會在GitHub和留言區提供完整測試程式碼喔!(看到專案名稱,知道我又要做什麼了吧XD) https://github.com/danchouzhou/LLSIClock/blob/main/firmware/LLSI_RGBW/main.c 先幫讀者整理一下這顆NUC1263重點特色 Arm Cortex-M23 72 MHz,ARMv8-M架構的CPU 內建64 KB Flash和20 KB SRAM 工作電壓2.5 V ~ 5.5 V 除了常見的UART、SPI、I2C、ADC、PWM之外,NUC1263還有I3C、USB和4個DAC,其中I3C還可以從獨立VDDIO電源接腳,輸入I3C匯流排上的電壓,讓I3C不用外接level shifter,最低就能支援0.95 V的電壓準位。不過最大的特色還是全新推出的 專利獨家功能LLSI。 第一次聽到LLSI? LLSI全稱是LED Light Strip Interface,其實就是專門為可定址LED (ARGB LED, addressable RGB LED) 設計的控制介面,常見的型號例如WS2812B、SK6812,或者是Adafruit推出的NeoPixel系列,這種介面的好處就是只要一條信號線從第一顆LED的DIN輸入,第一顆的DOUT串到第二顆的DIN,以此類推就可以控制整串的全彩LED。 由於只有一條信號線,ARGB LED的控制介面是利用信號high low時長不同,來代表資料的0和1。新唐將這種控制時序設計成硬體,取了酷酷的名字LLSI並整合進MCU裡面,成為首度推出有硬體控制ARGB LED能力的MCU公司,這也是新唐MCU才有的獨家功能。下圖節錄自N...

解決微軟注音輸入法讓KiCad用一半卡住無法操作的問題

圖片
說來從KiCad也用了快十年,從5開始用起,去年升級到6,最近才跳過7直接升級到8。 KiCad 6和8都有遇到一個共同問題,就是常常用一半卡住無法操作,就連想要按右上角的叉叉重開都按不下去,得要在工作管理員中按兩次「結束工作」才能關掉再重新開啟。很奇怪,KiCad沒有當掉,就真的單純無法操作而已。這個情形通常是操作鍵盤按一些KiCad快捷鍵時會發生,原本還以為是我裝了什麼軟體,導致了相容性的問題,不過好幾台電腦無論新舊都有相同情形,感覺又不太像。 後來查了一下,發現有人回報相同情形的bug,且說是和輸入法有關。聯想到要操作鍵盤才發生,基本上已經鎖定就是輸入法的相容性問題。再問了一下朋友,他們也是有一樣的情形,看來不是我自己的問題了。 https://gitlab.com/kicad/code/kicad/-/issues/9882 https://forum.kicad.info/t/kicad-7-and-8-windows-10-freezing-and-window-becomes-un-selectable/50279 https://forum.kicad.info/t/kicad-freezing-and-ime-bug-workaround/56583 有人說在Windows 11微軟已經修正好了,但實測結果仍然是會卡住不動。 微軟注音舊版模式 首先測過微軟注音的相容模式「使用舊版的微軟注音」雖然可以解決,但是那個選字實在太差勁了用不下去,不推薦使用。 純英文輸入法 在KiCad中將輸入法切換成純英文 [英文 (美國)],就沒有微軟注音相容性的問題,不過去瀏覽器、LINE打中文以後,回到KiCad常常會忘記切回英文,然後就又卡住了。 讓我針對每個應用程式視窗使用不同的輸入法 所以除了要新增一個[英文 (美國)]之外,還要勾選 「讓我針對每個應用程式視窗使用不同的輸入法」 ,這樣去別的軟體切成注音輸入法,回到KiCad就會自動跳回英文輸入法。我自己是將預設輸入法設成[英文 (美國)],要用中文時才切換成微軟注音。 Windows 10 設定 > 時間與語言 > 語言 > 鍵盤 Windows 11 設定 > 時間與語言 > 輸入 > 進階鍵盤設定