การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)

ไม่กี่ปีที่ผ่านมาฉันคุ้นเคยกับไมโครคอนโทรลเลอร์ของรัสเซียจาก Milandr ในปี 2013 เมื่อวิศวกรอภิปรายอย่างจริงจังเกี่ยวกับผลลัพธ์แรกของโครงการเป้าหมายของรัฐบาลกลาง "การพัฒนาฐานชิ้นส่วนอิเล็กทรอนิกส์และอุปกรณ์อิเล็กทรอนิกส์วิทยุ" สำหรับปี 2008-2015 ในเวลานั้น คอนโทรลเลอร์ K1986BE9x (คอร์ Cortex-M3) ได้เปิดตัวแล้ว และคอนโทรลเลอร์ 1986BE1T (คอร์ Cortex-M1) เพิ่งเปิดตัว ในกล่องพลาสติก LQFP-144 มีการกำหนด K1986BE1QI (การบิน) ในเอกสารประกอบ และการกำหนด MDR32F1QI บนตัวชิป บนเว็บไซต์ของผู้ผลิต มีคำต่อท้ายว่า "อากาศ" เนื่องจากมีอินเทอร์เฟซเฉพาะสำหรับอุตสาหกรรมอากาศยาน (ARINC 429, MIL_STD_1553)

น่าแปลกที่ในช่วงเวลาของการแจกจ่ายคอนโทรลเลอร์เหล่านี้ บริษัท Milander ได้เตรียมชุดตรวจแก้จุดบกพร่องและไลบรารีของรูทีนย่อยสำหรับการทำงานกับอุปกรณ์ต่อพ่วง "แต่ไม่มีการรับประกันและข้อผูกมัดเพิ่มเติมใดๆ เกี่ยวกับความถูกต้องของไลบรารี" ไลบรารีนี้คล้ายกับ Standard Peripheral Library จาก STMicroelectronics โดยทั่วไปแล้ว คอนโทรลเลอร์ ARM ทั้งหมดที่สร้างบนแกน Cortex-M มีหลายอย่างที่เหมือนกัน ด้วยเหตุนี้ความคุ้นเคยกับตัวควบคุมใหม่ของรัสเซียจึงดำเนินไปอย่างรวดเร็ว และสำหรับผู้ที่ซื้อชุดแก้ไขจุดบกพร่องที่เป็นกรรมสิทธิ์ จะมีการสนับสนุนด้านเทคนิคระหว่างการใช้งาน

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ชุดตรวจแก้จุดบกพร่องสำหรับไมโครคอนโทรลเลอร์ 1986BE1T, © Milandr

อย่างไรก็ตามเมื่อเวลาผ่านไป "โรคในวัยเด็ก" ของชิปและไลบรารีใหม่เริ่มปรากฏขึ้น ตัวอย่างการทดสอบของเฟิร์มแวร์ทำงานโดยไม่มีปัญหาที่มองเห็นได้ แต่ด้วยการแก้ไขที่ล้มเหลวและข้อผิดพลาดที่ลดลงอย่างมาก "กลืน" ครั้งแรกในการปฏิบัติของฉันคือความล้มเหลวที่อธิบายไม่ได้ในตัวควบคุม CAN หนึ่งปีต่อมา พบปัญหากับโมดูลในตัวควบคุม 1986BE1T (อากาศ) ของการแก้ไขก่อนหน้า MCIO (ช่องทางการแลกเปลี่ยนข้อมูลหลายช่องทาง). โดยทั่วไปแล้ว การแก้ไขทั้งหมดของไมโครคอนโทรลเลอร์เหล่านี้จนถึงปี 2016 จะถูกจำกัดการใช้งาน ต้องใช้เวลาและความกังวลมากมายในการระบุปัญหาเหล่านี้ การยืนยันสามารถพบได้ใน รายการข้อผิดพลาด (Errata).

คุณลักษณะที่ไม่พึงประสงค์คือจำเป็นต้องทำงานและจัดการกับข้อผิดพลาดที่ไม่ได้อยู่บนกระดานดีบั๊ก แต่อยู่บนกระดานของอุปกรณ์ต้นแบบที่วางแผนไว้สำหรับการผลิตในโรงงานแบบอนุกรม นอกจากตัวเชื่อมต่อ JTAG แล้ว มักจะไม่มีอะไรอยู่ที่นั่น การเชื่อมต่อกับเครื่องวิเคราะห์ลอจิกเป็นเรื่องยากและไม่สะดวก และมักจะไม่มีไฟ LED และหน้าจอ ด้วยเหตุนี้เอง ความคิดที่จะสร้าง debug board ของตัวเองจึงปรากฏขึ้นในหัวของฉัน

ในแง่หนึ่ง มีชุดดีบักที่มีตราสินค้าอยู่ในตลาด รวมถึงบอร์ดที่ยอดเยี่ยมจาก LDM-Systems จาก Zelenograd ในทางกลับกัน ราคาของผลิตภัณฑ์เหล่านี้ทำให้คนมึนงง และฟังก์ชันพื้นฐานที่ไม่มีการ์ดเอ็กซ์แพนชันไม่เป็นไปตามความคาดหวัง บอร์ดที่มีคอนโทรลเลอร์บัดกรีและพินเฮดเดอร์นั้นไม่น่าสนใจสำหรับฉัน และบอร์ดที่น่าสนใจมีราคาแพง

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
บอร์ดพัฒนา MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems

บริษัท "Milandr" มีนโยบายการกำหนดราคาและการตลาดที่ไม่เหมือนใคร ดังนั้นจึงเป็นไปได้ที่จะได้รับตัวอย่างของไมโครเซอร์กิตฟรี แต่มีให้เฉพาะนิติบุคคลเท่านั้นและเกี่ยวข้องกับภารกิจของข้าราชการ โดยทั่วไปแล้ว ไมโครเซอร์กิตในแพ็คเกจโลหะเซรามิกจะมีสีทองทั้งในแง่ตัวอักษรและเชิงอุปมาอุปไมย ตัวอย่างเช่นคอนโทรลเลอร์ 1986BE1T มีค่าใช้จ่ายในมอสโกตั้งแต่ 14 ถึง 24 รูเบิล ชิปหน่วยความจำแบบคงที่ 1645RU6U มีราคาตั้งแต่ 15000 รูเบิล และนี่คือลำดับของราคาสำหรับผลิตภัณฑ์ทั้งหมด เป็นผลให้แม้แต่สถาบันวิจัยเฉพาะทางที่มีคำสั่งของรัฐก็ประหยัดเงินและหลีกเลี่ยงราคาดังกล่าว ชิปในกล่องพลาสติกสำหรับการใช้งานพลเรือนมีราคาถูกกว่ามาก แต่ไม่มีจำหน่ายจากซัพพลายเออร์ยอดนิยม นอกจากนี้สำหรับฉันแล้วคุณภาพของชิปในกล่องพลาสติกนั้นแย่กว่า "ทอง" ตัวอย่างเช่น ฉันไม่สามารถเรียกใช้คอนโทรลเลอร์ K1986BE1QI ที่ 128MHz โดยไม่เพิ่มการตั้งค่าเวลาแฝงแฟลช ในเวลาเดียวกัน อุณหภูมิของตัวควบคุมนี้เพิ่มขึ้นเป็น 40-50C แต่คอนโทรลเลอร์ 1986BE1T ("ทอง") เริ่มต้นที่ 128 MHz โดยไม่มีการตั้งค่าเพิ่มเติมและยังคงเย็นอยู่ เขาเป็นคนที่ดีจริงๆ

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ไมโครคอนโทรลเลอร์ "Gold" 1986BE1T, (c) Milandr

ฉันโชคดีที่ไมโครคอนโทรลเลอร์ในกล่องพลาสติกยังหาซื้อได้ที่ร้านค้าปลีกจาก LDM Systems และแผงวงจรทั้งหมดมีให้ฟรี สิ่งที่ไม่ดีคือบนเว็บไซต์บนรูปภาพของคอนโทรลเลอร์มีเครื่องหมายที่ระบุว่านี่คือการแก้ไขครั้งที่ 4 ของปี 2014 เช่น มีข้อบกพร่อง ฉันคิดอยู่นานว่าจะซื้อหรือไม่ซื้อ หลายปีผ่านไป...

แนวคิดในการสร้างบอร์ดแก้ไขข้อบกพร่องไม่ได้หายไปไหน ฉันสร้างข้อกำหนดทั้งหมดทีละน้อยและคิดว่าจะวางทั้งหมดนี้ไว้บนกระดานเดียวได้อย่างไรเพื่อให้มีขนาดกะทัดรัดและไม่แพง ฉันสั่งส่วนประกอบที่ขาดหายไปจากชาวจีน ฉันไม่รีบร้อน - ฉันทำทุกอย่างเพื่อตัวเอง ซัพพลายเออร์ชาวจีนขึ้นชื่อเรื่องความสะเพร่า ฉันต้องสั่งสิ่งเดียวกันจากที่ต่างๆ เพื่อให้ได้ทุกสิ่งที่ต้องการ ยิ่งไปกว่านั้นชิปหน่วยความจำบางส่วนกลายเป็นของมือสอง - เห็นได้ชัดว่าบัดกรีจากอุปกรณ์ที่เสียหาย สิ่งนี้กระทบฉันในภายหลัง

การซื้อไมโครคอนโทรลเลอร์ Milandr K1986BE1QI (การบิน) ไม่ใช่เรื่องง่าย ในร้าน Chip and Dip เดียวกันในส่วน "ตำแหน่งที่จะสั่งซื้อ" ฉันพบ K1986BE92QI เพียง 740 รูเบิล แต่มันไม่เหมาะกับฉัน ทางเลือกเดียวคือซื้อการแก้ไขที่ไม่ใหม่จากระบบ LDM ในราคา 2000 รูเบิล เนื่องจากฉันไม่สามารถหาสิ่งทดแทนได้จากที่อื่น ฉันจึงตัดสินใจซื้อสิ่งที่มีอยู่ ด้วยความประหลาดใจที่น่ายินดี พวกเขาขายคอนโทรลเลอร์รุ่นใหม่ล่าสุดในเดือนธันวาคม 2018 รุ่นปรับปรุง 6+ (1820) ให้ฉัน และไซต์ยังมีรูปถ่ายเก่าอยู่และในขณะที่เขียนตัวควบคุมไม่พร้อมใช้งาน ...

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ไมโครคอนโทรลเลอร์ K1986BE1QI (การบิน) ในบรรจุภัณฑ์เทคโนโลยี (c) ภาพถ่ายโดยผู้เขียน

ข้อกำหนดทางเทคนิคหลักของบอร์ดพัฒนาของฉัน เอ็มดีบี1986 ต่อไปนี้:

  • ดีบักเกอร์โปรแกรมเมอร์ในตัวเข้ากันได้กับ J-Link และ CMSIS-DAP;
  • หน่วยความจำคงที่ 4Mbit (256k x 16, 10 ns);
  • ชิปหน่วยความจำแฟลช 64Mbit, Winbond 25Q64FVSIG;
  • ตัวรับส่งสัญญาณอินเตอร์เฟส RS-232 พร้อมสาย RTS และ CTS
  • อินเทอร์เฟซและตัวเชื่อมต่อสำหรับ Ethernet, USB, CAN;
  • ตัวควบคุมการแสดงผล 7 ส่วน MAX7221;
  • ขั้วต่อพินสำหรับทำงานกับ MCIO (MIL_STD_1553) และ ARINC429
  • โฟโต้ทรานซิสเตอร์ Everlight PT17-21C;
  • ไฟ LED ห้าสี ปุ่มรีเซ็ตและปุ่มผู้ใช้สองปุ่ม
  • ใช้พลังงานจากพอร์ต USB 5 โวลต์
  • ขนาดแผ่นวงจรพิมพ์ 100 x 80 มม

ฉันชอบบอร์ดของซีรีส์ STM-Discovery เพราะมี ST-Link โปรแกรมเมอร์ดีบักเกอร์ในตัว ST-Link ที่เป็นกรรมสิทธิ์เฉพาะใช้งานได้กับคอนโทรลเลอร์ STMicroelectronics เท่านั้น แต่เมื่อสองสามปีที่ผ่านมา มันเป็นไปได้ที่จะอัปเดตเฟิร์มแวร์ใน ST-Link และรับ SEGGER J-Link OB (on-board) Debugger ตามกฎหมายแล้ว มีข้อจำกัดในการใช้ดีบักเกอร์ดังกล่าวกับบอร์ด STMicroelectronics เท่านั้น แต่ในความเป็นจริงแล้ว ศักยภาพไม่ได้ถูกจำกัด ดังนั้น เมื่อมี J-Link OB คุณสามารถมีโปรแกรมเมอร์-ดีบักเกอร์ในตัวบนบอร์ดดีบั๊กได้ ฉันทราบว่าผลิตภัณฑ์ระบบ LDM ใช้ตัวแปลง CP2102 (Usb2Uart) ซึ่งสามารถแฟลชได้เท่านั้น

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ไมโครคอนโทรลเลอร์ STM32F103C8T6 จริงและไม่เป็นเช่นนั้น (c) ภาพถ่ายโดยผู้เขียน

ดังนั้นจึงจำเป็นต้องซื้อ STM32F103C8T6 ดั้งเดิม เนื่องจากเฟิร์มแวร์ของแบรนด์จะทำงานไม่ถูกต้องกับโคลน ฉันสงสัยวิทยานิพนธ์นี้และตัดสินใจลองใช้คอนโทรลเลอร์ CS32F103C8T6 จาก CKS บริษัทจีน ฉันไม่มีข้อตำหนิเกี่ยวกับคอนโทรลเลอร์ แต่เฟิร์มแวร์ ST-Link ที่เป็นกรรมสิทธิ์ใช้งานไม่ได้ J-Link ทำงานบางส่วน - ตรวจพบอุปกรณ์ USB แต่โปรแกรมเมอร์ไม่ทำงานและเตือนตลอดเวลาว่า "มีข้อบกพร่อง"

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
เกิดข้อผิดพลาดเมื่อรันดีบักเกอร์บนคอนโทรลเลอร์ที่ไม่ใช่ของแท้

ฉันไม่ได้ใจเย็นกับเรื่องนี้และเขียนเฟิร์มแวร์สำหรับการกะพริบ LED ก่อนจากนั้นจึงดำเนินการคำขอ IDCODE โดยใช้โปรโตคอล JTAG โปรแกรมเมอร์ ST-Link ที่ฉันมีบนบอร์ด Discovery และโปรแกรม ST-Link Utility แฟลช CS32F103C8T6 โดยไม่มีปัญหา ด้วยเหตุนี้ ฉันจึงแน่ใจว่าบอร์ดของฉันใช้งานได้ เพื่อความสุขของฉัน ผู้ควบคุมเป้าหมาย K1986BE1QI (การบิน) ออก IDCODE ของตนอย่างร่าเริงผ่านบรรทัด TDO

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ออสซิลโลแกรมของสายสัญญาณ TDO พร้อมการตอบสนองที่เข้ารหัส IDCODE (c) ภาพถ่ายโดยผู้เขียน

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ดังนั้นพอร์ต SWD จึงมีประโยชน์สำหรับการดีบักตัวดีบั๊กและตรวจสอบ IDCODE

มีตัวเลือกพร้อมดีบักเกอร์ CMSIS-DAP (ดีบักพอร์ตการเข้าถึง). การสร้างโครงการจากแหล่ง ARM ไม่ใช่เรื่องง่าย ฉันเอาโครงการมาจาก X893แล้วฉันก็ลองใช้ DAP42 ด้วย น่าเสียดายที่ Keil uVision ติดค้างและไม่ต้องการทำงานกับพวกเขา เป็นผลให้ฉันเปลี่ยนชิปดีบักเกอร์เป็น STM32F103C8T6 ที่เป็นกรรมสิทธิ์และไม่เคยกลับมาที่ปัญหานี้อีก

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
การดำเนินการดีบักเกอร์ในตัว J-Link STLink V2 สำเร็จ

เมื่อมีองค์ประกอบหลักทั้งหมดของบอร์ดดีบักในอนาคต ฉันเข้าไปใน Eagle CAD และพบว่าองค์ประกอบเหล่านั้นไม่ได้อยู่ในคลังองค์ประกอบ ไม่มีที่ไป - ฉันต้องวาดมันเอง ในเวลาเดียวกัน ฉันสร้างที่นั่งสำหรับหน่วยความจำ ตัวเชื่อมต่อ HanRun สำหรับอีเทอร์เน็ต และเพิ่มเฟรมสำหรับตัวต้านทานและตัวเก็บประจุ สามารถพบไฟล์โครงการและไลบรารีคอมโพเนนต์ ฉันมีมันใน GitHub.

แผนผังของบอร์ดดีบัก MDB1986การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)

บอร์ดนี้ใช้พลังงานจากแหล่งจ่ายไฟ DC 5 โวลต์จากพอร์ต USB มีพอร์ต USB Type-B สองพอร์ตบนบอร์ด อันแรกสำหรับโปรแกรมเมอร์ อันที่สองสำหรับคอนโทรลเลอร์ K1986BE1QI บอร์ดสามารถทำงานได้จากแหล่งเหล่านี้หรือทั้งสองอย่างพร้อมกัน การปรับโหลดที่ง่ายที่สุดและการป้องกันสายไฟถูกนำมาใช้กับไดโอด Schottky ในวงจร D2 และ D3 (SS24) นอกจากนี้ในแผนภาพ คุณสามารถดูฟิวส์ที่คืนตัวเองได้เอง F1 และ F2 ที่ 500mA สายสัญญาณของพอร์ต USB ได้รับการป้องกันโดยชุดไดโอด USBLC6-2SC6

หลายคนรู้จักวงจรดีบักเกอร์โปรแกรมเมอร์ ST-Link ซึ่งสามารถพบได้ในเอกสารประกอบสำหรับบอร์ด STM32-Discovery และแหล่งข้อมูลอื่นๆ สำหรับเฟิร์มแวร์หลักของโคลน ST-Link / J-Link-OB / DAP (ทางเลือก) ฉันได้นำบรรทัด SWDIO (PA13), SWCLK (PA14), GND ออกมา หลายคนใช้ UART สำหรับเฟิร์มแวร์และถูกบังคับให้ดึงจัมเปอร์ BOOT แต่ SWD สะดวกกว่าสำหรับฉัน นอกจากโปรโตคอลนี้จะอนุญาตให้แก้ไขข้อบกพร่องแล้ว

ส่วนประกอบเกือบทั้งหมดของบอร์ดใช้พลังงาน 3.3 โวลต์ซึ่งมาจากตัวควบคุมแรงดันไฟฟ้า AMS1117-3.3 เพื่อลดสัญญาณรบกวนทางแม่เหล็กไฟฟ้าและกระแสไฟกระชาก จึงใช้ตัวกรอง LC จากตัวเก็บประจุและโช้กของซีรีส์ BLM31PG

แยกกัน ควรกล่าวถึงไดรเวอร์การแสดงผล MAX7 7221-segment ตามข้อกำหนด แหล่งจ่ายไฟที่แนะนำคือตั้งแต่ 4 ถึง 5.5 โวลต์ และระดับสัญญาณสูง (ลอจิกหนึ่ง) ไม่น้อยกว่า 3.5V (0.7 x VCC) เมื่อขับเคลื่อนด้วย 5V สำหรับคอนโทรลเลอร์ K1986BE1QI (การบิน) เอาต์พุตของหน่วยลอจิคัลจะสอดคล้องกับแรงดันไฟฟ้าตั้งแต่ 2.8 ถึง 3.3V เห็นได้ชัดว่ามีระดับสัญญาณที่ไม่ตรงกันซึ่งสามารถรบกวนการทำงานปกติได้ ฉันตัดสินใจจ่ายไฟ MAX7221 จาก 4V และลดระดับสัญญาณเป็น 2.8V (0.7 x 4 = 2.8) เมื่อต้องการทำเช่นนี้ ไดโอด D4 (RS1A หรือ FR103) ได้รับการติดตั้งเป็นอนุกรมในวงจรกำลังขับ แรงดันไฟตกทั้งหมดคือ 0.9V (ไดโอด Schottky 0.3V และไดโอด 0.6V) และทุกอย่างทำงานได้

พอร์ตส่วนใหญ่บนไมโครคอนโทรลเลอร์ K1986BE1QI (การบิน) เข้ากันได้กับสัญญาณสูงสุด 5V ดังนั้นการใช้ตัวรับส่งสัญญาณ MCP2551 CAN ซึ่งทำงานจาก 5V จึงไม่ก่อให้เกิดปัญหา แผนภาพแสดงชิป MAX232 เป็นตัวรับส่งสัญญาณ RS-3232 แต่ที่จริงฉันใช้ SN65C3232D จาก Texas Instruments เนื่องจาก มันทำงานจาก 3.3V และให้ความเร็วสูงสุด 1Mbit/s

มีตัวสะท้อนควอตซ์ 4 ตัวบนบอร์ด - หนึ่งตัวสำหรับดีบักเกอร์ (8 MHz) และสามตัวสำหรับไมโครคอนโทรลเลอร์เป้าหมาย K1986BE1QI (การบิน) ที่มีค่าเล็กน้อย 32.768 kHz, 16 MHz, 25 MHz เหล่านี้เป็นองค์ประกอบที่จำเป็นเพราะ พารามิเตอร์ของเครื่องกำเนิด RC ในตัวอยู่ในช่วงกว้างตั้งแต่ 6 ถึง 10 MHz ต้องใช้ความถี่ 25 MHz สำหรับการทำงานของตัวควบคุมอีเทอร์เน็ตในตัว ด้วยเหตุผลบางประการ เว็บไซต์ของ Milandra (อาจผิดพลาด) ระบุว่าไม่มีอีเทอร์เน็ตในกล่องพลาสติก แต่เราจะขึ้นอยู่กับข้อกำหนดและข้อเท็จจริง

สิ่งจูงใจที่สำคัญสำหรับการสร้างบอร์ดดีบักของคุณเองคือโอกาสในการทำงานร่วมกับบัสระบบ EBC (ตัวควบคุมบัสภายนอก) ภายนอก ซึ่งโดยพื้นฐานแล้วเป็นพอร์ตขนาน ไมโครคอนโทรลเลอร์ K1986BE1QI (การบิน) ช่วยให้คุณสามารถเชื่อมต่อและทำงานร่วมกับชิปหน่วยความจำภายนอกและอุปกรณ์ต่อพ่วง เช่น ADC, FPGA เป็นต้น ความเป็นไปได้ของบัสระบบภายนอกนั้นค่อนข้างใหญ่ - คุณสามารถทำงานกับ RAM, ROM และ NAND Flash แบบ 8 บิต, 16 บิตและ 32 บิต สำหรับการอ่าน / เขียนข้อมูล 32 บิต คอนโทรลเลอร์สามารถดำเนินการที่สอดคล้องกัน 2 รายการโดยอัตโนมัติสำหรับไมโครเซอร์กิต 16 บิต และ 8 การดำเนินการสำหรับวงจร 4 บิต เห็นได้ชัดว่า การดำเนินการ I/O แบบ 32 บิตจะเร็วที่สุดเมื่อใช้บัสข้อมูลแบบ 32 บิต ข้อเสียรวมถึงความจำเป็นที่โปรแกรมต้องทำงานกับข้อมูล 32 บิตและบอร์ดจะต้องวาง 32 แทร็ก

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ใช้ชิป SRAM (เดาว่าอันไหนเสีย)

วิธีแก้ปัญหาที่สมดุลคือการใช้ชิปหน่วยความจำ 16 บิต ฉันลงเอยด้วยชิป Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16x256k, 10ns, 3.3V) แน่นอน บริษัท "Milandr" มีชิปหน่วยความจำแบบคงที่ของตัวเอง ซีรีส์ 1645RUแต่มีราคาแพงเกินไปและไม่มีจำหน่าย หรือมี Samsung K6R4016V1D ที่เข้ากันได้กับพิน ฉันได้กล่าวไว้ก่อนหน้านี้ว่า ICs เป็นของมือสอง และสำเนาที่ฉันติดตั้งในตอนแรกไม่แน่นอนและไม่แน่นอนในบรรทัดข้อมูลที่ 15 ต้องใช้เวลาหลายวันในการค้นหาข้อผิดพลาดของฮาร์ดแวร์ และยิ่งรู้สึกพึงพอใจมากขึ้นเมื่อฉันเปลี่ยนชิปที่เสียหายด้วยชิปที่ใช้งานได้ อย่างไรก็ตามความเร็วในการทำงานกับหน่วยความจำภายนอกนั้นเป็นที่ต้องการอย่างมาก

บัสภายนอกและโหมดสแตนด์อโลนไมโครคอนโทรลเลอร์ K1986BE1QI (การบิน) มีโหมดสแตนด์อโลนที่ไม่เหมือนใคร ซึ่งออกแบบมาสำหรับการเข้าถึงโดยตรงจากภายนอกไปยังอีเทอร์เน็ตและคอนโทรลเลอร์ MCIO (MIL_STD_1553) ผ่านบัสภายนอก ในขณะที่คอร์อยู่ในสถานะรีเซ็ต เช่น ไม่ได้ใช้. โหมดนี้มีประโยชน์สำหรับโปรเซสเซอร์และ FPGA ที่ไม่มีอีเทอร์เน็ตและ/หรือ MCIO
แผนภาพการเชื่อมต่อมีดังนี้:

  • ดาต้าบัส MCU(D0-D15) => SRAM(I/O0-I/O15),
  • แอดเดรสบัส MCU(A1-A18) => SRAM(A0-A17),
  • การควบคุม MCU (nWR,nRD,PortC2) => SRAM (WE,OE,CE),
  • SRAM(UB,LB) เชื่อมต่อหรือดึงลงกราวด์ผ่านตัวต้านทาน

สาย CE ถูกดึงขึ้นเพื่อจ่ายไฟผ่านตัวต้านทาน ไม่ได้ใช้พินการดึงข้อมูลไบต์ของ MCU (BE0-BE3) ใต้สปอยเลอร์ฉันให้รหัสสำหรับการเริ่มต้นพอร์ตและตัวควบคุมบัสภายนอก

การเริ่มต้นพอร์ตและตัวควบคุม EBC (ตัวควบคุมบัสภายนอก)

void SRAM_Init (void)
{
	EBC_InitTypeDef          EBC_InitStruct = { 0 };
	EBC_MemRegionInitTypeDef EBC_MemRegionInitStruct = { 0 };
	PORT_InitTypeDef         initStruct = { 0 };

	RST_CLK_PCLKcmd (RST_CLK_PCLK_EBC, ENABLE);

	PORT_StructInit (&initStruct);
	//--------------------------------------------//
	// DATA PA0..PA15 (D0..D15)                   //
	//--------------------------------------------//
	initStruct.PORT_MODE      = PORT_MODE_DIGITAL;
	initStruct.PORT_PD_SHM    = PORT_PD_SHM_ON;
	initStruct.PORT_SPEED     = PORT_SPEED_FAST;
	initStruct.PORT_FUNC      = PORT_FUNC_MAIN;
	initStruct.PORT_Pin       = PORT_Pin_All;
	PORT_Init (MDR_PORTA, &initStruct);	
	//--------------------------------------------//
	// Address PF3-PF15 (A0..A12), A0 - not used. //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_ALTER;
	initStruct.PORT_Pin       = PORT_Pin_4  | PORT_Pin_5  |
	                            PORT_Pin_6  | PORT_Pin_7  |
	                            PORT_Pin_8  | PORT_Pin_9  |
								PORT_Pin_10 | PORT_Pin_11 |
	                            PORT_Pin_12 | PORT_Pin_13 |
								PORT_Pin_14 | PORT_Pin_15;
	PORT_Init (MDR_PORTF, &initStruct);	
	//--------------------------------------------//
	// Address PD3..PD0 (A13..A16)                //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_OVERRID;
	initStruct.PORT_Pin       = PORT_Pin_0 | PORT_Pin_1 |
	                            PORT_Pin_2 | PORT_Pin_3;
	PORT_Init (MDR_PORTD, &initStruct);	
	//--------------------------------------------//
	// Address PE3, PE4 (A17, A18)                //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_ALTER;
	initStruct.PORT_Pin       = PORT_Pin_3 | PORT_Pin_4;
	PORT_Init (MDR_PORTE, &initStruct);	
	//--------------------------------------------//
	// Control PC0,PC1 (nWE,nOE)                  //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_MAIN;
	initStruct.PORT_Pin       = PORT_Pin_0 | PORT_Pin_1;
	PORT_Init (MDR_PORTC, &initStruct);	
	//--------------------------------------------//
	// Control PC2 (nCE)                          //
	//--------------------------------------------//
	initStruct.PORT_PD        = PORT_PD_DRIVER;
	initStruct.PORT_OE        = PORT_OE_OUT;
	initStruct.PORT_FUNC      = PORT_FUNC_PORT;
	initStruct.PORT_Pin       = MDB_SRAM_CE;
	PORT_Init (MDR_PORTC, &initStruct);	

	//--------------------------------------------//
	// Initialize EBC controler                   //
	//--------------------------------------------//
	EBC_DeInit();
	EBC_StructInit(&EBC_InitStruct);
	EBC_InitStruct.EBC_Mode             = EBC_MODE_RAM;
	EBC_InitStruct.EBC_WaitState        = EBC_WAIT_STATE_3HCLK;
	EBC_InitStruct.EBC_DataAlignment    = EBC_EBC_DATA_ALIGNMENT_16;
	EBC_Init(&EBC_InitStruct);
	
	EBC_MemRegionStructInit(&EBC_MemRegionInitStruct);
	EBC_MemRegionInitStruct.WS_Active   = 2;
	EBC_MemRegionInitStruct.WS_Setup    = EBC_WS_SETUP_CYCLE_1HCLK;
	EBC_MemRegionInitStruct.WS_Hold     = EBC_WS_HOLD_CYCLE_1HCLK;
	EBC_MemRegionInitStruct.Enable_Tune = ENABLE;
	EBC_MemRegionInit (&EBC_MemRegionInitStruct, EBC_MEM_REGION_60000000);
	EBC_MemRegionCMD(EBC_MEM_REGION_60000000, ENABLE);

	// Turn ON RAM (nCE)
	PORT_ResetBits (MDR_PORTC, MDB_SRAM_CE);
}

ไมโครคอนโทรลเลอร์ในแพ็คเกจ LQFP-144 และหน่วยความจำในแพ็คเกจ TSOP-44 มีพินเชื่อมต่อจำนวนมากและใช้พื้นที่ PCB มาก ด้วยประสบการณ์ในการแก้ปัญหาการเพิ่มประสิทธิภาพในด้านเศรษฐศาสตร์ เห็นได้ชัดว่าควรวางไมโครเซอร์กิตเหล่านี้ไว้บนกระดานตั้งแต่แรก ในแหล่งต่าง ๆ ฉันพบบทวิจารณ์ที่น่ายกย่องเกี่ยวกับ CAD TopoR (เราเตอร์ทอพอโลยี). ฉันดาวน์โหลดรุ่นทดลองและสามารถส่งออกโครงการของฉันจาก Eagle CAD ที่นั่นได้ก็ต่อเมื่อฉันลบส่วนประกอบเกือบทั้งหมด น่าเสียดายที่โปรแกรม TopoR ไม่ได้ช่วยฉันวางองค์ประกอบแม้แต่ 10 ชิ้นบนกระดาน ขั้นแรกให้วางส่วนประกอบทั้งหมดไว้ที่มุมหนึ่งแล้วจัดเรียงตามขอบ ตัวเลือกนี้ไม่เป็นที่พอใจของฉัน และฉันใช้เวลานานในการติดตามบอร์ดด้วยตนเองในสภาพแวดล้อม Eagle CAD ที่คุ้นเคย

การพิมพ์สกรีนเป็นองค์ประกอบสำคัญของแผงวงจรพิมพ์ บนบอร์ดดีบั๊ก ไม่เพียงแต่ต้องมีลายเซ็นสำหรับชิ้นส่วนอิเล็กทรอนิกส์เท่านั้น แต่ต้องมีการเซ็นชื่อตัวเชื่อมต่อทั้งหมดด้วย ที่ด้านหลังของบอร์ด ฉันวางตัวเตือนตารางพร้อมฟังก์ชันของพอร์ตคอนโทรลเลอร์ (หลัก, ทางเลือก, ลบล้าง, จริง) ฉันสั่งผลิตแผงวงจรพิมพ์ในประเทศจีนที่สำนักงาน PCBWay ที่มีชื่อเสียง ฉันจะไม่สรรเสริญเพราะคุณภาพดี พวกเขาสามารถทำได้ดีกว่าด้วยความคลาดเคลื่อนที่น้อยลง แต่ สำหรับค่าธรรมเนียม.

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
ผลิตแผงวงจรพิมพ์ MDB1986, (c) ภาพถ่ายโดยผู้เขียน

ฉันต้องแกะส่วนประกอบ "ที่หัวเข่า" ด้วยหัวแร้ง 40 วัตต์และหัวแร้ง POS-61 เพราะฉันไม่ค่อยบัดกรี 1-2 ครั้งต่อปี และหัวแร้งบัดกรีก็แห้ง ฉันยังต้องเปลี่ยนคอนโทรลเลอร์ CS32F103 ภาษาจีนเป็น STM32F103 ดั้งเดิม จากนั้นเปลี่ยนหน่วยความจำด้วย โดยทั่วไปแล้ว ตอนนี้ฉันพอใจกับผลลัพธ์อย่างสมบูรณ์ แม้ว่าฉันจะยังไม่ได้ตรวจสอบการทำงานของ RS-232 และ CAN

การพัฒนา debug board สำหรับ K1986BE1QI (การบิน)
บอร์ดดีบั๊ก MDB1986 กำลังทำงาน — ส่องสว่างและอุ่นขึ้น (с) ภาพถ่ายโดยผู้เขียน

บนเว็บไซต์ "Milandra" คุณสามารถค้นหาได้เพียงพอ สื่อการเรียนรู้สำหรับผู้ควบคุมการเรียนรู้ ซีรีส์ 1986BE9 (คอร์ Cortex-M3) แต่สำหรับไมโครคอนโทรลเลอร์ K1986BE1QI (การบิน) ฉันไม่เห็นอะไรเลย หลังจากตรวจสอบเอกสารคู่มือและห้องปฏิบัติการสำหรับมหาวิทยาลัยที่เผยแพร่ที่นั่นแล้ว ฉันดีใจที่บุคลากรได้รับการฝึกอบรมทั่วประเทศเพื่อทำงานร่วมกับผู้ควบคุมของรัสเซีย เอกสารการฝึกอบรมส่วนใหญ่จัดทำขึ้นเพื่อทำงานร่วมกับพอร์ต I / O, ตัวจับเวลา, ADC, DAC, SPI, UART ใช้ IDE ที่แตกต่างกัน (Keil, IAR, CodeMaster) บางแห่งเขียนโปรแกรมโดยใช้การลงทะเบียน CMSIS และบางแห่งใช้ไลบรารี MDR ต้องระบุทรัพยากร เริ่มมิลานซึ่งมีบทความมากมายจากโปรแกรมเมอร์ฝึกหัด และแน่นอนว่าเราไม่ควรลืม ฟอรัมมิลานดรา.

คิดถึงมิลินทราไมโครอิเล็กทรอนิกส์ในรัสเซียกำลังพัฒนาและ บริษัท "Milandr" มีบทบาทสำคัญในกระบวนการนี้ ไมโครคอนโทรลเลอร์ใหม่ที่น่าสนใจปรากฏขึ้นเช่น 1986BE81T และ Elektrosila พร้อมอินเทอร์เฟซ SpaceWire และ MKIO (เหมือนกับในปี 1986BE1 และอาจมีปัญหาเดียวกัน) เป็นต้น แต่สำหรับนักเรียนทั่วไป ครู และวิศวกรโยธา การซื้อไมโครเซอร์กิตดังกล่าวนั้นไม่ใช่เรื่องจริง ซึ่งหมายความว่าชุมชนวิศวกรรมจะไม่สามารถระบุข้อผิดพลาดและปัญหาของชิปนี้ได้อย่างรวดเร็ว สำหรับฉันแล้วดูเหมือนว่าก่อนอื่นจำเป็นต้องผลิตไมโครวงจรในกล่องพลาสติกแจกจ่ายให้กับผู้มีส่วนได้เสียทั้งหมดและหลังจากได้รับการอนุมัติแล้วเท่านั้น (ละติน approbatio - การอนุมัติการจดจำ) ผู้เชี่ยวชาญสามารถเตรียมการแก้ไขในกล่องโลหะเซรามิกพร้อมการป้องกัน ปัจจัยที่น่ากลัวทั้งหมด ฉันหวังว่าในอนาคตอันใกล้เราทุกคนจะพอใจกับโครงการใหม่ที่ประกาศในนิทรรศการ
ทุกคนสามารถทำซ้ำ แก้ไข และใช้บอร์ดดีบั๊กที่ฉันได้พัฒนาในขั้นตอนการศึกษา ก่อนอื่นฉันสร้างบอร์ดสำหรับตัวเอง แต่กลับกลายเป็นว่าดี ฉันตัดสินใจที่จะแบ่งปันกับทุกคน.

K1986BE1QI (อากาศ) เป็นคอนโทรลเลอร์ที่น่าสนใจมากพร้อมอินเทอร์เฟซเฉพาะที่สามารถใช้ในมหาวิทยาลัยเพื่อการสอนนักเรียน ฉันคิดว่าหลังจากแก้ไขข้อผิดพลาดที่ระบุในคอนโทรลเลอร์และผ่านการทดสอบการรับรองแล้ว คอนโทรลเลอร์จะบินตามความหมายที่แท้จริงของคำ!

ที่มา: will.com

เพิ่มความคิดเห็น