สารบัญ:

การเขียนโปรแกรม Arduino Over the Air (OTA) - Ameba Arduino: 4 ขั้นตอน
การเขียนโปรแกรม Arduino Over the Air (OTA) - Ameba Arduino: 4 ขั้นตอน

วีดีโอ: การเขียนโปรแกรม Arduino Over the Air (OTA) - Ameba Arduino: 4 ขั้นตอน

วีดีโอ: การเขียนโปรแกรม Arduino Over the Air (OTA) - Ameba Arduino: 4 ขั้นตอน
วีดีโอ: EP27. ไม่ต้องใช้สาย ESP32 Over The Air programming 2024, พฤศจิกายน
Anonim
การเขียนโปรแกรม Arduino Over the Air (OTA) - Ameba Arduino
การเขียนโปรแกรม Arduino Over the Air (OTA) - Ameba Arduino

มีไมโครคอนโทรลเลอร์ Wi-Fi มากมายในท้องตลาด ผู้ผลิตจำนวนมากสนุกกับการเขียนโปรแกรมไมโครคอนโทรลเลอร์ Wi-Fi โดยใช้ Arduino IDE อย่างไรก็ตาม หนึ่งในคุณสมบัติที่ยอดเยี่ยมที่สุดที่ไมโครคอนโทรลเลอร์ Wi-Fi มีมักจะถูกมองข้าม นั่นคือการเขียนโปรแกรมและอัปโหลดรหัสของคุณจากระยะไกลและแบบไร้สายโดยใช้ฟังก์ชัน OTA (Over-The-Air)

ในคำแนะนำนี้ ฉันจะแสดงวิธีตั้งค่า OTA บนไมโครคอนโทรลเลอร์ Wi-Fi โดยใช้ Arduino IDE ที่แพร่หลายบนไมโครคอนโทรลเลอร์ Ameba Arduino Wi-Fi!

เสบียง

อะมีบา Arduino x 1

ขั้นตอนที่ 1: OTA

OTA
OTA

OTA (Over-The-Air) หมายถึงกลไกการอัปเกรดออนไลน์ผ่านอินเทอร์เน็ต

Arduino IDE นำเสนอคุณสมบัติ OTA ซึ่งเป็นไปตามเวิร์กโฟลว์ในรูปด้านบน

(i) Arduino IDE ค้นหาผ่าน mDNS สำหรับอุปกรณ์ที่มีบริการ Arduino IDEOTA ในเครือข่ายท้องถิ่น

(ii) เนื่องจากบริการ mDNS ทำงานบน Ameba, Ameba จะตอบสนองต่อการค้นหา mDNS และเปิดพอร์ต TCP เฉพาะสำหรับการเชื่อมต่อ

(iii) ผู้ใช้พัฒนาโปรแกรมใน Arduino IDE เมื่อเสร็จแล้ว เลือกพอร์ตเครือข่าย

(iv) คลิกอัปโหลด จากนั้น Arduino IDE จะส่งอิมเมจ OTA ไปยัง Ameba ผ่าน TCP, Ameba จะบันทึกรูปภาพไปยังที่อยู่ที่ระบุและตั้งค่าตัวเลือกการบูตเพื่อบูตจากอิมเมจนี้ในครั้งต่อไป

เวิร์กโฟลว์ประกอบด้วยสามส่วน: mDNS, TCP และ OTA กระบวนการอิมเมจ รายละเอียดที่เกี่ยวข้องกับ mDNS มีอธิบายไว้ในบทช่วยสอน mDNS การเขียนโปรแกรมซ็อกเก็ต TCP ใช้ในการถ่ายโอนภาพและมีให้ใน OTA API แล้ว

ในส่วนถัดไป เราจะพูดถึงวิธีประมวลผลอิมเมจ OTA และแนะนำความรู้พื้นฐานเกี่ยวกับเลย์เอาต์หน่วยความจำแฟลชของ Ameba และขั้นตอนการบูต

ขั้นตอนที่ 2: เลย์เอาต์หน่วยความจำแฟลชอะมีบา

เค้าโครงหน่วยความจำแฟลชอะมีบา
เค้าโครงหน่วยความจำแฟลชอะมีบา

ขนาดหน่วยความจำแฟลชของ Ameba RTL8195A คือ 2MB ช่วงตั้งแต่ 0x00000000 ถึง 0x00200000 อย่างไรก็ตาม ขนาดหน่วยความจำแฟลชของ Ameba RTL8710 คือ 1MB เพื่อให้เหมาะสมกับการใช้งานบอร์ดต่างๆ เราถือว่าเลย์เอาต์หน่วยความจำแฟลชคือ 1MB

ดังแสดงในรูปด้านบน โปรแกรม Ameba ใช้หน่วยความจำแฟลชสามส่วน:

- ภาพบูต:

นั่นคือ bootloader เมื่อ Ameba บูทขึ้น มันจะวางอิมเมจสำหรับบูตไปที่หน่วยความจำและดำเนินการเริ่มต้น นอกจากนี้ยังกำหนดตำแหน่งที่จะดำเนินการหลังจาก bootloader Bootloader จะดูที่อยู่ OTA และพินการกู้คืนในพื้นที่ข้อมูลระบบ และกำหนดว่าอิมเมจใดที่จะดำเนินการในภายหลัง ที่ส่วนท้ายของ bootloader จะวางอิมเมจไว้ในหน่วยความจำและดำเนินการต่อไป

- รูปภาพเริ่มต้น 2:

รหัสนักพัฒนาวางอยู่ในส่วนนี้ ที่อยู่เริ่มต้นจาก 0x0000B000 16 ไบต์แรกคือส่วนหัวของรูปภาพ 0x0000B008~0x0000B00F ประกอบด้วยลายเซ็น ซึ่งใช้เพื่อตรวจสอบว่ารูปภาพนั้นถูกต้องหรือไม่ ฟิลด์ลายเซ็นมีค่าที่ถูกต้องสองค่าเพื่อแยกความแตกต่างระหว่างรูปภาพใหม่จากรูปภาพเก่า

- ภาพ OTA:

ข้อมูลในส่วนนี้ยังเป็นรหัสของนักพัฒนาอีกด้วย โดยค่าเริ่มต้น หน่วยความจำส่วนนี้เริ่มต้นจาก 0x00080000 (สามารถเปลี่ยนแปลงได้) ความแตกต่างหลักระหว่างรูปภาพ OTA และรูปภาพเริ่มต้น 2 คือที่อยู่หน่วยความจำแฟลชและค่าลายเซ็น

นอกเหนือจากโค้ดแล้ว ยังมีบล็อคข้อมูลบางส่วน:

- ข้อมูลระบบ:

บล็อกข้อมูลระบบเริ่มต้นจาก 0x00009000 มีข้อมูลที่เกี่ยวข้องกับ OTA สองรายการ:

1. ที่อยู่ OTA:ข้อมูล 4 ไบต์เริ่มต้นจาก 0x00009000 มันบอกที่อยู่ภาพ OTA หากค่าที่อยู่ OTA ไม่ถูกต้อง (เช่น 0xFFFFFFFF) อิมเมจ OTA ในหน่วยความจำแฟลชจะไม่สามารถโหลดได้อย่างถูกต้อง

2. Recovery Pin:ข้อมูล 4 ไบต์เริ่มต้นจาก 0x00009008 พินการกู้คืนใช้เพื่อกำหนดว่าอิมเมจใด (อิมเมจเริ่มต้น 2 หรืออิมเมจ OTA) ที่จะดำเนินการเมื่อทั้งสองอิมเมจถูกต้อง หากค่าพินการกู้คืนไม่ถูกต้อง (เช่น 0xFFFFFFFF) รูปภาพใหม่จะถูกดำเนินการตามค่าเริ่มต้น

ข้อมูลระบบจะถูกลบออกเมื่อเราอัปโหลดโปรแกรมไปยัง Ameba ผ่าน DAP กล่าวคือ ที่อยู่ OTA จะถูกลบออก และอะมีบาจะพิจารณาว่าไม่มีอิมเมจ OTA

- ข้อมูลการสอบเทียบ: ข้อมูลการสอบเทียบอุปกรณ์ต่อพ่วงอยู่ในบล็อกนี้ โดยปกติข้อมูลเหล่านี้ไม่ควรถูกลบ

ขั้นตอนที่ 3: Boot Flow

บูตโฟลว์
บูตโฟลว์

จากภาพข้างบนนี้

เราพูดถึงสถานการณ์ต่อไปนี้: (i) ไม่ใช้ OTA ใช้ DAP เพื่ออัปโหลดโปรแกรม:

ในสถานการณ์นี้ bootloader จะตรวจสอบลายเซ็นของอิมเมจเริ่มต้น 2 และที่อยู่ OTA เนื่องจากที่อยู่ OTA ถูกลบ รูปภาพเริ่มต้น 2 จะถูกเลือกเพื่อดำเนินการ

(ii) อิมเมจ OTA ถูกโอนไปยัง Ameba, ตั้งค่าที่อยู่ OTA อย่างถูกต้อง, ไม่ได้ตั้งค่าพินการกู้คืน:

Ameba ได้รับรูปภาพที่อัปเดตผ่าน OTA แล้ว ลายเซ็นของรูปภาพเริ่มต้น 2 จะถูกตั้งค่าเป็นลายเซ็นเก่า

Bootloader ตรวจสอบลายเซ็นของอิมเมจเริ่มต้น 2 และที่อยู่ OTA จะพบว่าที่อยู่ OTA มีภาพ OTA ที่ถูกต้อง เนื่องจากไม่ได้ตั้งค่าพินการกู้คืน ระบบจะเลือกอิมเมจใหม่ (เช่น อิมเมจ OTA) ที่จะดำเนินการ

(iii) อิมเมจ OTA ถูกถ่ายโอนไปยัง Ameba, ตั้งค่าที่อยู่ OTA อย่างถูกต้อง, ตั้งค่าพินการกู้คืน:

Ameba ได้รับรูปภาพที่อัปเดตผ่าน OTA แล้ว ลายเซ็นของรูปภาพเริ่มต้น 2 จะถูกตั้งค่าเป็นลายเซ็นเก่า

Bootloader ตรวจสอบลายเซ็นของอิมเมจเริ่มต้น 2 และที่อยู่ OTA จะพบว่าที่อยู่ OTA มีภาพ OTA ที่ถูกต้อง จากนั้นตรวจสอบค่าพินการกู้คืน หากพินการกู้คืนเชื่อมต่อกับ LOW รูปภาพใหม่ (เช่นอิมเมจ OTA) จะถูกดำเนินการ หากพินการกู้คืนเชื่อมต่อกับ HIGH อิมเมจเก่า (เช่นอิมเมจเริ่มต้น 2) จะถูกดำเนินการ

ขั้นตอนที่ 4: ตัวอย่าง

ตัวอย่าง
ตัวอย่าง
ตัวอย่าง
ตัวอย่าง
ตัวอย่าง
ตัวอย่าง
ตัวอย่าง
ตัวอย่าง

ในการใช้คุณสมบัติ OTA โปรดอัปเกรดเฟิร์มแวร์ DAP เป็นเวอร์ชัน > 0.7 (ไม่รวม v0.7) เฟิร์มแวร์ DAP เริ่มต้นจากโรงงานคือเวอร์ชัน 0.7 โปรดปฏิบัติตามคำแนะนำในการอัพเกรดเฟิร์มแวร์ DAP:

เปิดตัวอย่าง: "ไฟล์" -> "ตัวอย่าง" -> "AmebaOTA" -> "ota_basic"

กรอกข้อมูล ssid และรหัสผ่านในโค้ดตัวอย่างสำหรับการเชื่อมต่อเครือข่าย

มีพารามิเตอร์บางอย่างที่เกี่ยวข้องกับ OTA:

§ MY_VERSION_NUMBER:ในเวอร์ชันแรก เราจำเป็นต้องตั้งค่าที่อยู่ OTA และพินการกู้คืน เนื่องจากครั้งนี้เราอัปโหลดผ่าน USB เป็นเวอร์ชันแรก เราจึงไม่จำเป็นต้องเปลี่ยนค่านี้

§ OTA_PORT:Arduino IDE จะค้นหา Ameba ผ่าน mDNS Ameba จะบอก Arduino IDE ว่าจะเปิดพอร์ต TCP 5000 เพื่อรออิมเมจ OTA

§ RECOVERY_PIN:กำหนดค่าพินที่ใช้สำหรับการกู้คืน เราใช้พิน 18 ที่นี่

จากนั้นเราก็ใช้โปรแกรมอัพโหลด USB ไปที่ Ameba คลิกเครื่องมือ -> พอร์ต ตรวจสอบพอร์ตอนุกรมที่จะใช้:

โปรดทราบว่า Arduino IDE ใช้พอร์ตเดียวสำหรับการอัปโหลดโปรแกรมและบันทึกเอาต์พุต เพื่อหลีกเลี่ยงสถานการณ์ที่บันทึกไม่สามารถส่งออกได้เมื่อเราใช้ OTA เราใช้เทอร์มินัลพอร์ตอนุกรมอื่น (เช่น คำ Tera หรือสีโป๊ว) แทนจอภาพอนุกรมเพื่อดูข้อความบันทึก

จากนั้นคลิกอัปโหลดและกดปุ่มรีเซ็ต

ในข้อความบันทึก:

1. ระหว่าง “===== Enter Image 1====” และ “Enter Image 2 ====” คุณจะพบ “Flash Image 2:Addr 0xb000” ซึ่งหมายความว่า Ameba กำหนดที่จะบูตจาก Default Image 2 ที่ 0xb000

2. หลังจาก “Enter Image 2 ====” คุณจะพบ “This is version 1” นี่คือข้อความบันทึกที่เราเพิ่มลงในแบบร่าง

3. หลังจากที่ Ameba เชื่อมต่อกับ AP และได้รับที่อยู่ IP “192.168.1.238” มันจะเปิดใช้งาน mDNS และรอไคลเอนต์

ต่อไป เราแก้ไข "MY_VERSION_NUMBER" เป็น 2

คลิก "เครื่องมือ" -> "พอร์ต" คุณจะเห็นรายการ "พอร์ตเครือข่าย" ค้นหา "MyAmeba at 192.168.1.238 (Ameba RTL8195A)" MyAmeba คือชื่ออุปกรณ์ mDNS ที่เราตั้งค่าในโค้ดตัวอย่าง และ "192.168.1.238" คือ IP ของ Ameba

หากคุณไม่พบพอร์ตเครือข่ายของ Ameba โปรดยืนยัน:

- คอมพิวเตอร์ของคุณและอะมีบาอยู่ในเครือข่ายเดียวกันหรือไม่?

- ลองรีสตาร์ท Arduino IDE

- ตรวจสอบข้อความบันทึกใน Serial Monitor เพื่อดูว่า Ameba เชื่อมต่อกับ AP สำเร็จหรือไม่

จากนั้นคลิกอัปโหลด คราวนี้โปรแกรมจะอัพโหลดผ่าน TCP ในเทอร์มินัลบันทึก คุณสามารถดูข้อมูลการเชื่อมต่อไคลเอ็นต์ได้

เมื่อดาวน์โหลดอิมเมจ OTA สำเร็จแล้ว Ameba จะรีบูตและบันทึกต่อไปนี้จะแสดงในเทอร์มินัลบันทึก

- ระหว่าง “===== Enter Image 1====” และ “Enter Image 2 ====” คุณจะเห็นข้อความบันทึก “Flash Image 2:Addr 0x80000” ซึ่งหมายความว่า Ameba กำหนดที่จะบูตจาก OTA Image ที่ 0x80000

- หลังจาก “Enter Image 2 ====” บันทึก “This is version 2” เป็นข้อความที่เราเพิ่มลงในแบบร่าง

หากต้องการกู้คืนรูปภาพก่อนหน้าหลังจากดาวน์โหลดอิมเมจ OTA ไปยัง Ameba แล้ว โปรดเชื่อมต่อพินกู้คืนที่เราตั้งค่าไว้ในแบบร่าง (เช่น พิน 18) กับ HIGH (3.3V) แล้วกดรีเซ็ต

จากนั้น Default image 2 จะถูกเลือกเมื่อทำการบูท โปรดทราบว่าอิมเมจ OTA ที่ดาวน์โหลดจะไม่ถูกลบ เมื่อพินการกู้คืนถูกตัดการเชื่อมต่อจาก HIGH อิมเมจ OTA จะถูกดำเนินการ

เราสรุปขั้นตอนการพัฒนาโดยใช้ OTA ในรูปต่อไปนี้

แนะนำ: