> For the complete documentation index, see [llms.txt](https://taiphoon-com.gitbook.io/taiphoon.com-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taiphoon-com.gitbook.io/taiphoon.com-docs/th/firmware/px4/flash-firmware.md).

# การแฟลชเฟิร์มแวร์

Morakot มาพร้อม ArduPilot จากโรงงาน เมื่อต้องการเปลี่ยนไปใช้ PX4 ขั้นแรกให้ใช้ STM32CubeProgrammer ผ่าน USB DFU เพื่อลบข้อมูลทั้งชิป (Full chip erase) และแฟลช PX4 bootloader จากนั้นจึงแฟลชเฟิร์มแวร์ PX4 ด้วย QGroundControl (QGC)

## ก่อนเริ่ม

* ส่งอีเมลไปที่ <service@taiphoon.com.tw> พร้อมระบุรุ่นตัวควบคุมการบินและเวอร์ชันฮาร์ดแวร์ เพื่อรับไฟล์ PX4 bootloader (`.bin`) และเฟิร์มแวร์ PX4 (`.px4`) ของ Morakot
* ดาวน์โหลดและติดตั้ง STM32CubeProgrammer จาก [เว็บไซต์ทางการของ ST](https://www.st.com/en/development-tools/stm32cubeprog.html)
* ดาวน์โหลดและติดตั้ง QGroundControl จาก [หน้าดาวน์โหลด QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/getting_started/download_and_install.html)
* ใช้สาย USB ที่รองรับการส่งข้อมูล เชื่อมต่อเข้ากับพอร์ต USB ของคอมพิวเตอร์โดยตรง โดยไม่ผ่าน USB Hub

{% hint style="warning" %}
ถอดใบพัดออกก่อน การลบข้อมูลทั้งชิปจะล้างเนื้อหาทั้งหมดในหน่วยความจำแฟลชของตัวควบคุมการบิน รวมถึง bootloader และเฟิร์มแวร์ ArduPilot เดิม ระหว่างแฟลชให้คงการเชื่อมต่อ USB ไว้ และรอจนกว่าโปรแกรมจะทำงานเสร็จ
{% endhint %}

{% hint style="info" %}
ภาพหน้าจอในบทความนี้ใช้ STM32CubeProgrammer 2.20.0 และ QGroundControl Daily v5.2.0-dev ชื่อเมนูในเวอร์ชันอื่นอาจแตกต่างกัน
{% endhint %}

## 1. แฟลช PX4 bootloader ผ่าน DFU

{% stepper %}
{% step %}

### เข้าสู่โหมด DFU

ถอด USB ออกก่อน กดปุ่ม Boot บนตัวควบคุมการบินค้างไว้แล้วเสียบสาย USB เพื่อให้ตัวควบคุมการบินเข้าสู่โหมด DFU ใน Device Manager ของ Windows จะมีอุปกรณ์ DFU ปรากฏภายใต้「Universal Serial Bus devices」 โดยชื่ออาจแสดงเป็น **DFU in FS Mode** หรือ **STM32 BOOTLOADER**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/N0j5XxARaN12qoUXUhEu/px4-dfu-01-device-manager.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### เชื่อมต่อตัวควบคุมการบินผ่าน USB

เปิด STM32CubeProgrammer เลือก **USB** ในส่วนการเชื่อมต่อด้านขวา ตรวจสอบว่าช่อง **Port** แสดงรายการอุปกรณ์แล้ว (เช่น `USB1`) แล้วกด **Connect** เมื่อเชื่อมต่อแล้ว มุมขวาบนจะแสดง **Connected**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/uoURhLWJBkdKBky14HD5/px4-dfu-02-usb-port.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/CGx3ktlfUh7NLhmm6Ga0/px4-dfu-03-connected.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### ลบข้อมูลทั้งชิป

คลิกไอคอนที่สองทางด้านซ้ายเพื่อสลับไปยังหน้า **Erasing & Programming** ในแท็บ **Erase flash memory** ให้กด **Full chip erase** ในหน้าต่างยืนยัน (Are you sure you want to erase full chip flash memory?) ให้กด **ตกลง (OK)** รอจนปรากฏ `Mass erase command correctly executed.` แล้วกด **ตกลง (OK)**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/UhcI6kDc5kqV6xfujla6/px4-dfu-04-erasing-programming.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/wLXedwx5zNQStwCYiv2r/px4-dfu-05-full-chip-erase-confirm.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/6GmJaCnz5mSWHXb5j3Cz/px4-dfu-06-full-chip-erase-complete.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### เปิดไฟล์ bootloader

คลิกไอคอนแรกทางด้านซ้ายเพื่อกลับไปยังหน้า **Memory & File editing** กด **+** บนแถบแท็บ เลือก **Open file** เลือกไฟล์ bootloader (เช่น `morakot_v6_bootloader.bin`) แล้วกด **เปิด (Open)**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/bGsxdfID5WZmlpUw9Kim/px4-dfu-07-open-file-menu.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/v3JrPlypy9XZ6szMdol6/px4-dfu-08-open-bootloader.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### แฟลช bootloader

ตรวจสอบว่าแท็บใหม่แสดงชื่อไฟล์ bootloader แล้วกด **Download** Log จะแสดงแอดเดรสที่เขียน `Address : 0x08000000` และความคืบหน้าการแฟลช

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/lTmcTYAZQgyC17Z9Ornd/px4-dfu-09-bootloader-loaded.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/R5YUgqSfBCrDK4jHx3AV/px4-dfu-10-download-progress.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### แฟลชเสร็จสิ้น

เมื่อปรากฏ **File download complete** ให้กด **ตกลง (OK)** กด **Disconnect** เพื่อยุติการเชื่อมต่อ แล้วถอด USB ออก

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/u6rGIKo4vXV4RC3UrRW3/px4-dfu-11-download-complete.png" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## 2. แฟลชเฟิร์มแวร์ PX4 ด้วย QGroundControl

วิดีโอสาธิต: การแฟลชเฟิร์มแวร์ PX4 ด้วย QGroundControl หน้าต่างเลือกไฟล์เฟิร์มแวร์ไม่ได้ถูกบันทึกไว้ในวิดีโอ โปรดดูภาพหน้าจอในขั้นตอนที่ 4 ด้านล่าง

{% embed url="<https://firebasestorage.googleapis.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmvFqg0h5Ob1pRXspm7Yi%2Fuploads%2FP9EpkO7yN0aQYShpLYTF%2Fpx4-qgc-flash-firmware.mp4?alt=media&token=d93a7240-46b7-4e2c-ba5f-7e267bc524af>" %}

{% stepper %}
{% step %}

### เปิดหน้า Firmware

เปิด QGC กดไอคอน Q ที่มุมซ้ายบน เลือก **Configure** แล้วคลิก **Firmware** ทางด้านซ้าย

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/62taXQ4WwaWazP2PoC7v/px4-qgc-01-q-menu.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### เชื่อมต่อตัวควบคุมการบินและเริ่มแฟลช

เชื่อมต่อตัวควบคุมการบินผ่าน USB เมื่ออุปกรณ์ปรากฏในเมนูดรอปดาวน์แล้ว ให้กด **Flash**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/bdQriAQY7A0mWMBp5FsV/px4-qgc-02-device-selected.png" alt=""><figcaption></figcaption></figure>

เมื่อหน้าจอแสดง `Now unplug your device and plug it back in to enter bootloader mode.` ให้ถอด USB ออกแล้วเสียบกลับเข้าไปใหม่

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/x5ONwBTwREmuaEKe5kHV/px4-qgc-03-replug.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### เลือกไฟล์เฟิร์มแวร์แบบกำหนดเอง

เมื่อหน้าต่าง **Firmware Setup** ปรากฏขึ้น ให้เลือก **PX4 Pro** ทำเครื่องหมายที่ **Advanced settings** เลือก **Custom firmware file...** ในเมนูดรอปดาวน์เวอร์ชัน แล้วกด **Ok**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/XEVS4YeCdxzNGRnKNtNj/px4-qgc-04-firmware-setup.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/krmWNdjMNGBzLoMCn2Hn/px4-qgc-05-custom-firmware.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### เลือกไฟล์เฟิร์มแวร์ PX4

ในหน้าต่าง **Select Firmware File** ให้เลือกไฟล์เฟิร์มแวร์ `.px4` แล้วกด **เปิด (Open)**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/MhzMkXmllvONYBW6GMqQ/px4-qgc-06-select-px4-file.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### รอจนการแฟลชเสร็จสิ้น

QGC จะแสดงข้อความต่อไปนี้ตามลำดับ ระหว่างการแฟลชห้ามถอด USB

1. `Erasing previous program...`
2. `Programming new version...`
3. `Verifying program...`
4. `Rebooting board`
5. เมื่อปรากฏ **Upgrade complete** ถือว่าเสร็จสมบูรณ์

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/UmruTPtx2agM5KazFLh7/px4-qgc-07-flashing.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/riptg8RyHJwj3yzO0yJa/px4-qgc-08-upgrade-complete.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### ตรวจสอบเวอร์ชันเฟิร์มแวร์

หลังจากตัวควบคุมการบินรีสตาร์ตและเชื่อมต่อกับ QGC แล้ว ให้ตรวจสอบ **Firmware Version** ใน **Summary**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/KaO05n4EjvLW8dcm5WzA/px4-qgc-09-summary.png" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

{% hint style="info" %}

* เมื่อปรากฏ `Error: Open failed on port ...` หรือ `Upgrade cancelled` ให้ทำตามคำแนะนำของ QGC โดยเชื่อมต่อตัวควบคุมการบินเข้ากับพอร์ต USB ของคอมพิวเตอร์โดยตรง (ไม่ผ่าน USB Hub) ใช้ไฟเลี้ยงจาก USB เท่านั้นโดยไม่ต่อแบตเตอรี่ แล้วแฟลชใหม่อีกครั้ง
* หลังการแฟลชหรือรีสตาร์ต หาก QGC แสดง `Disconnected` ค้างอยู่ ให้ปิด QGC แล้วเปิดใหม่อีกครั้ง
  {% endhint %}

## การตั้งค่าต่อเนื่อง

ไปที่ [การตั้งค่าครั้งแรก](/taiphoon.com-docs/th/firmware/px4/first-setup.md)
