2025年6月12日 星期四

A batch file for monitor the new disk drive and copy the file 偵測新磁碟並複製檔案

A batch file for monitor the new disk drive and copy the file.

monitor_drives.bat


@echo off

setlocal EnableDelayedExpansion


:: 設定 Default 檔案

REM set Default_FILE=TPM_default_test.txt

REM set RSC_Default_FILE=RSC_default_test.txt



:: 檢查是否提供了 Default_FILE , Default_Startup_FILE 參數

if "%1"=="" (

    echo Error: Please provide a Default_Startup_FILE ^(e.g., monitor_drivers.bat TPM_default_ChkVer.txt TPM_default_startup_ChkVer.nsh^)

    exit /b 0

)

if "%2"=="" (

    echo Error: Please provide a Default_Startup_FILE ^(e.g., monitor_drivers.bat TPM_default_ChkVer.txt TPM_default_startup_ChkVer.nsh^)

    exit /b 0

)


set Default_FILE=%1

set Default_Startup_FILE=%2


:: 設定輸出檔案路徑

set OUTPUT_FILE=detected_drives.txt


:: 清空或創建輸出檔案

echo. > %OUTPUT_FILE%


:: 儲存初始的磁碟機清單

set "PREV_DRIVES="

for /f "tokens=*" %%d in ('wmic logicaldisk where drivetype^=2 get deviceid ^| find ":"') do (

    set "PREV_DRIVES=!PREV_DRIVES! %%d"

)


:loop

:: 等待1秒

timeout /t 1 /nobreak >nul


:: 獲取當前磁碟機清單

set "CURRENT_DRIVES="

for /f "tokens=*" %%d in ('wmic logicaldisk where drivetype^=2 get deviceid ^| find ":"') do (

set "CURRENT_DRIVES=!CURRENT_DRIVES! %%d"

)


:: 檢查是否有新磁碟機

set "NEW_DRIVE="

for %%d in (%CURRENT_DRIVES%) do (

echo %PREV_DRIVES% | find /i "%%d" >nul || set "NEW_DRIVE=%%d"

)


:: 如果檢測到新磁碟機,將其寫入檔案

if defined NEW_DRIVE (

echo %NEW_DRIVE% > %OUTPUT_FILE%

REM echo %date% %time% - New drive detected: %NEW_DRIVE% >> %OUTPUT_FILE%

echo New drive detected: %NEW_DRIVE%

REM 讀取 detected_drives.txt 中最後一行的磁碟機代號,忽略空白行

REM set "DRIVE_LETTER="

REM for /f "tokens=1 delims= " %%a in ('echo "%NEW_DRIVE%" ^| findstr /v "^\s*$"') do (

REM set "DRIVE_LETTER=%%a"

REM )

REM echo DRIVE_LETTER: %NEW_DRIVE%

if defined NEW_DRIVE (

:: 等待3秒

timeout /t 3 /nobreak >nul

:: 直接比較 UTF-16 LE 檔案

fc /b %Default_FILE% %NEW_DRIVE%\default_test.txt > nul && (

echo "The file is same default_test.txt %Default_FILE%"

) || (

echo %NEW_DRIVE%\default_test.txt

echo "%Default_FILE%"

copy /Y %Default_FILE% %NEW_DRIVE%\default_test.txt

echo "%Default_Startup_FILE%"

copy /Y %Default_Startup_FILE% %NEW_DRIVE%\startup.nsh

)

)

)


:: 更新前一次的磁碟機清單

set "PREV_DRIVES=%CURRENT_DRIVES%"


goto loop

2025年6月9日 星期一

Arduino Nano program flash the hex, bin file

 這篇說明

1. 如何用 avrdude 燒錄 Arduino

2. 如何從 Arduino IDE 取得 hex , bin file


AVRDUDE is a utility to program AVR microcontrollers
https://github.com/avrdudes/avrdude/releases



✅ 前提條件(請確認)

  • 目標板子:Arduino Nano(ATmega328P)

  • 使用哪種方式上傳:

    1. 使用 USB 直接接 Nano(內建 CH340 或 FTDI)

    2. 使用 外部 ISP 燒錄器(如 USBasp、Arduino as ISP)


🔌 方式一:直接用 USB 線連接 Arduino Nano

Nano 自帶 bootloader,可以直接用 USB 上傳。

📌 指令範例(CH340 或 FTDI 晶片):

bash
avrdude -c arduino -p m328p -P COM3 -b 57600 -U flash:w:your_program.hex:i

📌 參數說明:

參數說明
-c arduino使用 Arduino bootloader protocol
-p m328pNano 的晶片 ATmega328P
-P COM3替換成你實際的 COM port
-b 57600舊版 bootloader(通常 Nano 這個 baudrate 就對)
-U flash:w:xxx.hex:i燒錄 hex 檔進 flash

💡 若你的 Nano 是新版(或 DIY 自燒 bootloader),也可能要改為 -b 115200


🧰 方式二:使用外部 ISP(如 USBasp 或 Arduino as ISP)

這會跳過 bootloader,直接燒錄程式進 flash。

【1】USBasp 方式:

bash
avrdude -c usbasp -p m328p -U flash:w:your_program.hex:i

【2】Arduino as ISP(使用 Arduino UNO 當 ISP):

bash
avrdude -c arduino -p m328p -P COM3 -b 19200 -U flash:w:your_program.hex:i

✅ 請確保 Arduino UNO 上有燒錄「ArduinoISP」範例程式


💡 從 Arduino IDE 取得 HEX 重點回顧

  • 點選:檔案 > 導出已編譯的二進位檔

  • 在專案資料夾會出現 .ino.hex.ino.with_bootloader.hex

    • 一般使用 .ino.hex(純程式)

    • .with_bootloader.hex 是要燒錄整個 bootloader 的