สารบัญ:

ตัวอย่างการเขียนโปรแกรม MTP Arduino: 5 ขั้นตอน
ตัวอย่างการเขียนโปรแกรม MTP Arduino: 5 ขั้นตอน

วีดีโอ: ตัวอย่างการเขียนโปรแกรม MTP Arduino: 5 ขั้นตอน

วีดีโอ: ตัวอย่างการเขียนโปรแกรม MTP Arduino: 5 ขั้นตอน
วีดีโอ: #3 สอน Arduino Tutorial : เขียนโปรแกรม Arduino ประกาศตัวแปร 2024, กรกฎาคม
Anonim
ตัวอย่างการเขียนโปรแกรม MTP Arduino
ตัวอย่างการเขียนโปรแกรม MTP Arduino

ในคำแนะนำนี้ เราจะแสดงวิธีใช้แบบร่างการเขียนโปรแกรม Arduino SLG46824/6 เพื่อตั้งโปรแกรมอุปกรณ์ Dialog SLG46824/6 GreenPAK™ Multiple-Time Programmable (MTP)

อุปกรณ์ GreenPAK ส่วนใหญ่เป็นแบบโปรแกรมครั้งเดียว (OTP) ซึ่งหมายความว่าเมื่อเขียนธนาคารหน่วยความจำแบบไม่ลบเลือน (NVM) แล้ว จะไม่สามารถเขียนทับได้ GreenPAK ที่มีคุณสมบัติ MTP เช่น SLG46824 และ SLG46826 มีธนาคารหน่วยความจำ NVM ประเภทอื่นที่สามารถตั้งโปรแกรมได้มากกว่าหนึ่งครั้ง

เราได้เขียนร่าง Arduino ที่อนุญาตให้ผู้ใช้ตั้งโปรแกรม MTP GreenPAK ด้วยคำสั่งมอนิเตอร์แบบอนุกรมง่ายๆ สองสามคำสั่ง ในคำแนะนำนี้ เราใช้ SLG46826 เป็น GreenPAK ของเรากับ MTP

เราจัดเตรียมโค้ดตัวอย่างสำหรับ Arduino Uno โดยใช้แพลตฟอร์มโอเพ่นซอร์สตาม C/C++ นักออกแบบควรคาดการณ์เทคนิคที่ใช้ในโค้ด Arduino สำหรับแพลตฟอร์มเฉพาะของตน

สำหรับข้อมูลเฉพาะเกี่ยวกับข้อมูลจำเพาะของสัญญาณ I2C การกำหนดที่อยู่ I2C และพื้นที่หน่วยความจำ โปรดอ้างอิง GreenPAK In-System Programming Guide ที่ให้ไว้ในหน้าผลิตภัณฑ์ SLG46826 คำแนะนำนี้มีการใช้งานคู่มือการเขียนโปรแกรมนี้อย่างง่าย

ด้านล่างนี้ เราได้อธิบายขั้นตอนที่จำเป็น ทำความเข้าใจวิธีการตั้งโปรแกรมชิป GreenPAK อย่างไรก็ตาม หากคุณต้องการเพียงแค่ผลลัพธ์ของการเขียนโปรแกรม ให้ดาวน์โหลดซอฟต์แวร์ GreenPAK เพื่อดูไฟล์การออกแบบ GreenPAK ที่เสร็จสมบูรณ์แล้ว เสียบ GreenPAK Development Kit เข้ากับคอมพิวเตอร์ของคุณและกดโปรแกรมเพื่อสร้าง IC ที่กำหนดเอง

ขั้นตอนที่ 1: การเชื่อมต่อ Arduino-GreenPAK

การเชื่อมต่อ Arduino-GreenPAK
การเชื่อมต่อ Arduino-GreenPAK
การเชื่อมต่อ Arduino-GreenPAK
การเชื่อมต่อ Arduino-GreenPAK

ในการตั้งโปรแกรม NVM ของ SLG46826 GreenPAK ของเราด้วยภาพสเก็ตช์ Arduino ก่อนอื่นเราต้องเชื่อมต่อพิน Arduino Uno สี่ตัวกับ GreenPAK ของเรา คุณสามารถเชื่อมต่อพินเหล่านี้โดยตรงกับ GreenPAK Socket Adapter หรือกับบอร์ดฝ่าวงล้อมด้วย GreenPAK ที่บัดกรี

โปรดทราบว่าตัวต้านทานแบบดึงขึ้น I2C ภายนอกจะไม่แสดงในรูปที่ 1 โปรดเชื่อมต่อตัวต้านทานแบบดึงขึ้น 4.7 kΩ จากทั้ง SCL และ SDA กับเอาต์พุต 3.3 V ของ Arduino

ขั้นตอนที่ 2: การส่งออกข้อมูล GreenPAK NVM จากไฟล์ออกแบบ GreenPAK

การส่งออกข้อมูล GreenPAK NVM จากไฟล์ออกแบบ GreenPAK
การส่งออกข้อมูล GreenPAK NVM จากไฟล์ออกแบบ GreenPAK
การส่งออกข้อมูล GreenPAK NVM จากไฟล์ออกแบบ GreenPAK
การส่งออกข้อมูล GreenPAK NVM จากไฟล์ออกแบบ GreenPAK
การส่งออกข้อมูล GreenPAK NVM จากไฟล์ออกแบบ GreenPAK
การส่งออกข้อมูล GreenPAK NVM จากไฟล์ออกแบบ GreenPAK

เราจะรวบรวมการออกแบบ GreenPAK แบบง่ายๆ เพื่อแสดงวิธีการส่งออกข้อมูล NVM การออกแบบด้านล่างเป็นตัวเปลี่ยนระดับอย่างง่าย โดยที่หมุดสีน้ำเงินทางด้านซ้ายจะผูกกับ VDD (3.3v) ในขณะที่หมุดสีเหลืองทางด้านขวาจะผูกไว้กับ VDD2 (1.8v)

ในการส่งออกข้อมูลจากการออกแบบนี้ คุณต้องเลือกไฟล์ → ส่งออก → ส่งออก NVM ดังแสดงในรูปที่ 3

จากนั้นคุณจะต้องเลือกไฟล์ Intel HEX (*.hex) เป็นประเภทไฟล์และบันทึกไฟล์

ตอนนี้ คุณจะต้องเปิดไฟล์.hex ด้วยโปรแกรมแก้ไขข้อความ (เช่น Notepad++) หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับรูปแบบไฟล์ HEX และไวยากรณ์ของ Intel โปรดดูหน้า Wikipedia สำหรับแอปพลิเคชันนี้ เราสนใจเฉพาะส่วนข้อมูลของไฟล์ดังแสดงในรูปที่ 5

ไฮไลต์และคัดลอกข้อมูลการกำหนดค่า NVM ขนาด 256 ไบต์ที่อยู่ภายในไฟล์ HEX แต่ละบรรทัดที่เรากำลังคัดลอกมีความยาว 32 อักขระ ซึ่งเท่ากับ 16 ไบต์

วางข้อมูลลงในส่วน nvmString ที่ไฮไลต์ของภาพร่าง Arduino ดังแสดงในรูปที่ 6 หากคุณใช้ไมโครคอนโทรลเลอร์ที่ไม่ใช่ Arduino คุณสามารถเขียนฟังก์ชันเพื่อแยกวิเคราะห์ nvmData ที่บันทึกไว้ในไฟล์ GreenPAK. GP6 (หากคุณเปิดไฟล์ GreenPAK ด้วยโปรแกรมแก้ไขข้อความ คุณจะเห็นว่าเราจัดเก็บข้อมูลโครงการในรูปแบบ XML ที่เข้าถึงได้ง่าย)

ในการตั้งค่าข้อมูล EEPROM สำหรับการออกแบบ GreenPAK ของคุณ ให้เลือกบล็อก EEPROM จากแผงส่วนประกอบ เปิดแผงคุณสมบัติ แล้วคลิก "ตั้งค่าข้อมูล"

ตอนนี้คุณสามารถแก้ไขแต่ละไบต์ใน EEPROM ทีละรายการด้วยอินเทอร์เฟซ GUI ของเรา

เมื่อข้อมูล EEPROM ของคุณได้รับการตั้งค่าแล้ว คุณสามารถส่งออกไปยังไฟล์ HEX ได้โดยใช้วิธีการเดียวกันกับที่อธิบายไว้ก่อนหน้านี้ในการส่งออกข้อมูล NVM แทรกข้อมูล EEPROM 256 ไบต์เหล่านี้ลงในส่วน eepromString ของร่าง Arduino

สำหรับการออกแบบที่กำหนดเองแต่ละรายการ การตรวจสอบการตั้งค่าการป้องกันภายในแท็บ "ความปลอดภัย" ของการตั้งค่าโครงการเป็นสิ่งสำคัญ แท็บนี้กำหนดค่าบิตการป้องกันสำหรับการลงทะเบียนการกำหนดค่าเมทริกซ์ NVM และ EEPROM ภายใต้การกำหนดค่าบางอย่าง การอัปโหลดลำดับ NVM สามารถล็อก SLG46824/6 ให้เป็นการกำหนดค่าปัจจุบันและลบฟังก์ชัน MTP ของชิปได้

ขั้นตอนที่ 3: ใช้ Arduino Sketch

ใช้ Arduino Sketch
ใช้ Arduino Sketch

อัปโหลดภาพร่างไปยัง Arduino และเปิดจอภาพแบบอนุกรมด้วยอัตรารับส่งข้อมูล 115200 ตอนนี้คุณสามารถใช้ข้อความแจ้ง MENU ของสเก็ตช์เพื่อดำเนินการคำสั่งต่างๆ ได้:

● อ่าน - อ่านข้อมูล NVM ของอุปกรณ์หรือข้อมูล EEPROM โดยใช้ที่อยู่รองที่ระบุ

● ลบ - ลบข้อมูล NVM ของอุปกรณ์หรือข้อมูล EEPROM โดยใช้ที่อยู่รองที่ระบุ

● เขียน - ลบแล้วเขียนข้อมูล NVM ของอุปกรณ์หรือข้อมูล EEPROM โดยใช้ที่อยู่สเลฟที่ระบุ คำสั่งนี้เขียนข้อมูลที่บันทึกไว้ในอาร์เรย์ nvmString หรือ eepromString

● ปิง - ส่งคืนรายการที่อยู่สเลฟของอุปกรณ์ที่เชื่อมต่อกับบัส I2C

ผลลัพธ์ของคำสั่งเหล่านี้จะถูกพิมพ์ไปยังคอนโซลมอนิเตอร์แบบอนุกรม

ขั้นตอนที่ 4: เคล็ดลับการเขียนโปรแกรมและแนวทางปฏิบัติที่ดีที่สุด

ตลอดระยะเวลาการสนับสนุน SLG46824/6 เราได้จัดทำเอกสารเคล็ดลับการเขียนโปรแกรมสองสามข้อเพื่อช่วยหลีกเลี่ยงข้อผิดพลาดทั่วไปที่เกี่ยวข้องกับการลบและเขียนไปยังพื้นที่ที่อยู่ NVM ส่วนย่อยต่อไปนี้จะสรุปหัวข้อนี้โดยละเอียดยิ่งขึ้น

1. การดำเนินการเขียนหน้า NVM ขนาด 16 ไบต์ที่แม่นยำ:

เมื่อเขียนข้อมูลไปยัง NVM ของ SLG46824/6 มีสามเทคนิคที่ควรหลีกเลี่ยง:

● หน้าเขียนน้อยกว่า 16 ไบต์

● หน้าเขียนมากกว่า 16 ไบต์

● หน้าเขียนที่ไม่ได้เริ่มต้นที่การลงทะเบียนครั้งแรกภายในหน้าเว็บ (IE: 0x10, 0x20 เป็นต้น)

หากมีการใช้เทคนิคใดๆ ข้างต้น อินเทอร์เฟซ MTP จะไม่คำนึงถึงการเขียน I2C เพื่อหลีกเลี่ยงไม่ให้โหลด NVM ด้วยข้อมูลที่ไม่ถูกต้อง เราแนะนำให้อ่าน I2C ของพื้นที่ที่อยู่ NVM หลังจากเขียนเพื่อตรวจสอบการถ่ายโอนข้อมูลที่ถูกต้อง

2. การถ่ายโอนข้อมูล NVM ไปยัง Matrix Configuration Registers

เมื่อเขียน NVM การลงทะเบียนการกำหนดค่าเมทริกซ์จะไม่โหลดซ้ำโดยอัตโนมัติด้วยข้อมูล NVM ที่เขียนใหม่ การถ่ายโอนต้องเริ่มต้นด้วยตนเองโดยการวน PAK VDD หรือโดยการสร้างซอฟต์รีเซ็ตโดยใช้ I2C ด้วยการตั้งค่ารีจิสเตอร์ในที่อยู่ 0xC8 อุปกรณ์จะเปิดใช้งานลำดับการรีเซ็ตการเปิดเครื่อง (POR) อีกครั้ง และโหลดข้อมูลรีจิสเตอร์จาก NVM ลงในรีจิสเตอร์อีกครั้ง

3. การรีเซ็ตที่อยู่ I2C หลังจาก NVM Erase:

เมื่อ NVM ถูกลบ ที่อยู่ NVM ที่มีที่อยู่รอง I2C จะถูกตั้งค่าเป็น 0000 หลังจากลบ ชิปจะคงที่อยู่รองปัจจุบันไว้ภายในการลงทะเบียนการกำหนดค่าจนกว่าอุปกรณ์จะถูกรีเซ็ตตามที่อธิบายไว้ข้างต้น เมื่อรีเซ็ตชิปแล้ว ต้องตั้งค่าที่อยู่รอง I2C ในที่อยู่ 0xCA ภายในการลงทะเบียนการกำหนดค่าทุกครั้งที่ GreenPAK ใช้พลังงานหมุนเวียนหรือรีเซ็ต จะต้องดำเนินการนี้จนกว่าจะมีการเขียนหน้าที่อยู่ทาสของ I2C ใหม่ใน NVM

ขั้นตอนที่ 5: การอภิปราย Errata

การสนทนา Errata
การสนทนา Errata

เมื่อเขียนไปยัง "Page Erase Byte" (ที่อยู่: 0xE3) SLG46824/6 จะสร้าง ACK ที่ไม่สอดคล้องกับ I2C หลังจากส่วน "ข้อมูล" ของคำสั่ง I2C ลักษณะการทำงานนี้อาจถูกตีความว่าเป็น NACK ขึ้นอยู่กับการใช้งานต้นแบบ I2C

เพื่อรองรับพฤติกรรมนี้ เราได้แก้ไขโปรแกรมเมอร์ Arduino โดยใส่ความคิดเห็นในโค้ดที่แสดงในรูปที่ 11 โค้ดส่วนนี้จะตรวจสอบ I2C ACK ที่ส่วนท้ายของคำสั่ง I2C ทุกคำสั่งในฟังก์ชัน EraseChip() ฟังก์ชันนี้ใช้เพื่อลบหน้า NVM และ EEPROM เนื่องจากโค้ดส่วนนี้อยู่ในลูป For ดังนั้น "return -1;" บรรทัดทำให้ MCU ออกจากฟังก์ชันก่อนกำหนด

แม้จะมี NACK อยู่ก็ตาม ฟังก์ชันการลบ NVM และ EEPROM จะทำงานได้อย่างถูกต้อง สำหรับคำอธิบายโดยละเอียดเกี่ยวกับพฤติกรรมนี้ โปรดอ้างอิง "ปัญหา 2: พฤติกรรม ACK ที่ไม่สอดคล้องกับ I2C สำหรับ NVM และ EEPROM Page Erase Byte" ในเอกสาร errata SLG46824/6 (การแก้ไข XC) บนเว็บไซต์ของ Dialog

บทสรุป

ในคำแนะนำนี้ เราจะอธิบายกระบวนการของการใช้โปรแกรมเมอร์ Arduino ที่ให้มาเพื่ออัปโหลดสตริง NVM และ EEPROM ที่กำหนดเองไปยัง GreenPAK IC รหัสใน Arduino Sketch ได้รับการแสดงความคิดเห็นอย่างละเอียด แต่ถ้าคุณมีคำถามเกี่ยวกับภาพร่าง โปรดติดต่อวิศวกรแอปพลิเคชันภาคสนามของเรา หรือโพสต์คำถามของคุณในฟอรัมของเรา สำหรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการลงทะเบียนและขั้นตอนการเขียนโปรแกรม MTP โปรดดูคู่มือการเขียนโปรแกรมในระบบของ Dialog

แนะนำ: