ดำเนินการคำแนะนำจาก RAM ในไมโครคอนโทรลเลอร์มือสมัครเล่นที่เป็นมิตร


12

หนึ่งในโครงการของฉันจะได้รับประโยชน์อย่างมากจากความสามารถในการเรียกใช้โปรแกรมที่ไม่ได้เก็บไว้ในไมโครคอนโทรลเลอร์ (แต่ถูกเก็บไว้ในการ์ด SD แทน)

ดังนั้นฉันกำลังมองหาอุปกรณ์ที่จะอนุญาตให้ฉันโหลดรหัสจากการ์ด SD ลงใน RAM แล้วเรียกใช้รหัสจาก RAM ปัจจุบันฉันมีโปรแกรมเมอร์ที่มาพร้อมกับ PicKit2 เท่านั้นดังนั้นฉันจึงอยากอยู่กับ PICs

ไม่มีใครรู้ว่า PIC ใดที่สามารถทำได้? หากไม่มี PIC ที่สามารถทำได้สิ่งนี้มีคอนโทรลเลอร์ไมโครที่แตกต่างกันบ้างที่ใช้งานได้ คนที่มีอยู่ในแพคเกจที่รองรับเขียงหั่นขนม


2
huh? ... คุณต้องการดำเนินการจาก ram ให้เป็นอะไร? และคุณหมายถึงอะไรโดย 'คงที่'? คุณไม่ได้พยายามเขียนรหัสการแก้ไขด้วยตนเองใช่หรือไม่ คุณกำลังพูดถึงการขาดการจัดสรรหน่วยความจำแบบไดนามิกหรือไม่? อาคาไม่มี malloc?
ทำเครื่องหมาย

2
@ Mark ฉันต้องการโหลดโปรแกรมจากอุปกรณ์ภายนอกเช่นการ์ด SD และเรียกใช้งาน ฉันจะพยายามอธิบายให้ดีขึ้นในโพสต์ของฉัน
Ponkadoodle

2
gotcha, PIC เดียวที่ฉันรู้ว่าน่าจะเป็น PIC32 หากคุณไม่ทำสิ่งที่บ้าคลั่งอย่างการคัดลอกจากการ์ด SD ไปยังแฟลชซึ่งจะกินวงจรแฟลชที่ค่อนข้างเร็วหากโปรแกรมสลับของคุณมักจะ uC ขนาดเล็ก 8/16 บิตส่วนใหญ่จะแบ่งส่วนอย่างมากระหว่างพื้นที่ข้อมูล (ram) และ program (flash) และไม่อนุญาตให้ตัวนับโปรแกรมระบุตำแหน่ง ram (สถาปัตยกรรม Harvard ไม่มีการป้องกันหน่วยความจำ ฯลฯ )
ทำเครื่องหมาย

คำตอบ:


5

มี PIC บางตัวที่อนุญาตให้คุณเพิ่มหน่วยความจำโปรแกรมภายนอก ฉันไม่เคยทำสิ่งนี้มาเลย แต่ Application Notes AN869และAN778มีข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้งานหน่วยความจำภายนอก


11

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

วิธีนี้ช่วยให้คุณยืดหยุ่นได้ในราคาที่ไม่แพง

มีตัวเลือกมากมายให้เลือก: การสำรวจล่าม / นักแปลภาษาระดับสูงสำหรับไมโครคอนโทรลเลอร์


1
สร้าง DSL ของคุณเอง ตัวเลือกนี้ดึงดูดความสนใจมากที่สุดสำหรับโซลูชั่นที่แนะนำ
Amos

6

อย่างที่ได้กล่าวไปแล้วว่า PIC (นอกเหนือจาก PIC32) ไม่สามารถทำได้ คุณอาจต้องไปที่โปรเซสเซอร์ขนาดใหญ่กว่าในตระกูลใด ๆ หรือโปรเซสเซอร์ที่มีบัสหน่วยความจำภายนอกเนื่องจากไมโครคอนโทรลเลอร์ส่วนใหญ่มีทรัพยากร RAM ที่ จำกัด มาก

โปรเซสเซอร์ MSP430 สามารถเรียกใช้รหัสจากพื้นที่ RAM ของพวกเขา แต่คุณจะต้องการอะไรเช่น F5438 ที่มีพื้นที่ RAM 16k - รหัสที่ทำงานใน 128 ไบต์ไม่ได้เป็นตัวเลือก!

หากโปรเซสเซอร์มีบัสภายนอกคุณสามารถใส่ RAM ลงในพื้นที่โค้ดได้ คุณอาจต้องเพิ่มตรรกะพิเศษบางอย่างเพื่อจับคู่ RAM ลงในส่วนหน่วยความจำสองส่วนหากสถาปัตยกรรมตัวประมวลผลไม่อนุญาตให้เขียนข้อมูลลงในหน่วยความจำการดำเนินการ

ฉันเรียกใช้รหัสจาก RAM ในระบบที่ใช้ 8051 แต่นั่นหมายความว่า RAM จะต้องแมปลงในพื้นที่หน่วยความจำภายนอกสำหรับการเขียนโปรแกรมแล้วกลับสู่พื้นที่ CODE สำหรับการดำเนินการ โปรแกรมโหลดเดอร์ / มอนิเตอร์จัดการการสลับและการโหลดหน่วยความจำของธนาคาร โปรดอย่าถามรหัส - ฉันทำสิ่งนี้เมื่อประมาณ 30 ปีก่อนและมันก็หายไปนาน (และเขียนด้วยภาษา PL / M-51)


5

ไม่มี PIC ระดับต่ำและระดับกลางที่สามารถเรียกใช้จาก RAM เนื่องจากสถาปัตยกรรมหน่วยความจำ

ซีพียูที่ใช้ ARM ใด ๆ ควรดำเนินการจาก RAM แม้ว่าจะมีแนวโน้มที่จะอยู่ในแพ็คเกจ smd แต่ก็มีโมดูลขนาด 'DIP' จำนวนน้อยที่โหลดไมโครคอนโทรลเลอร์แล้ว ดูที่mbedหรือLPCXpressoเช่น ทั้งสองนี้มาพร้อมกับ bootloader หรือในกรณีของ LPCXpresso อินเตอร์เฟสการดีบักพร้อมกับคอมไพเลอร์ฟรี

หากคุณต้องการที่จะอยู่กับไมโคร 8 บิตง่ายๆอาจพิจารณาบางสิ่งบางอย่างจากตระกูล HCS08 แบบฟรีสเกล สิ่งเหล่านี้สามารถดำเนินการจาก RAM และมีรหัสรุ่น จำกัด ของ codewarrior IDE และ C คอมไพเลอร์พร้อมใช้งานฟรี

ฉันค่อนข้างแน่ใจว่า MPS430 ควรทำเช่นนี้ได้ แต่ฉันไม่เคยทำด้วยตัวเองเลย


mbed จะรับไบนารีโดยทำการคัดลอกลงในแฟลชไดรฟ์ inbuilt แล้วทำการรีเซ็ต มันจะแสดงเป็นแฟลชไดรฟ์เมื่อเชื่อมต่อกับพอร์ต USB ของคอมพิวเตอร์ หากคุณสามารถหาวิธีที่จะใช้แฟลชไดรฟ์แทนการ์ด SD หรือตั้งค่าเพื่อให้ไบนารีจากการ์ด SD ถูกคัดลอกโดยอัตโนมัติไปยังแฟลชไดรฟ์และทำการรีเซ็ตคุณอาจโชคดี mbed ไม่ต้องการโปรแกรมเมอร์ฮาร์ดแวร์
Amos


3

ฉันจำได้ว่าอ่านเกี่ยวกับ bootloader สำหรับ AVR ที่จะทำการแฟลชชิปด้วยไฟล์. hex (สมมุติ) จากการ์ด SD อีกครั้ง ฉันไม่พบแหล่งที่มาดั้งเดิม แต่การค้นหาโดย Google นี้จะเปิดดูเพลงที่น่าสนใจสองสามรายการ ใช่ฉันรู้ว่านี่คือ AVR และไม่ใช่ PIC แต่คุณอาจพบว่ามีประโยชน์หากสิ่งที่ PIC ใช้ไม่ได้ผล


+1 สำหรับPIC bootloader
davidcary

3

ดังที่ผู้โพสต์คนอื่น ๆ สังเกตไว้คุณไม่สามารถดำเนินการจาก RAM บน PIC ขนาด 8 หรือ 16 บิตได้เนื่องจากพวกเขาใช้สถาปัตยกรรมฮาร์วาร์ด (แยกรหัสและพื้นที่เก็บข้อมูล) ไม่ว่าจะเป็นการโหลดโปรแกรมออกจาก SD card หรือไม่และการแฟลชไปยังหน่วยความจำรหัสนั้นขึ้นอยู่กับว่าคุณจะทำสิ่งนี้บ่อยแค่ไหน

หากคุณพยายามสร้างสภาพแวดล้อมแบบไดนามิกเช่นระบบปฏิบัติการที่มีการซ้อนทับโปรแกรมอย่างต่อเนื่องดังนั้นไม่ใช่ แต่ในกรณีของฉันฉันมีโปรแกรมที่โหลดไดรเวอร์ตามต้องการจากการ์ด SD ขนาด 2 GB PIC24FJ256GB110 มีขั้นต่ำ 10,000 / ลบรอบการเขียน แม้ว่าจะมีการทำห้าครั้งต่อวันแฟลชจะมีอายุอย่างน้อย 5 1/2 ปี

(หมายเหตุ: ตัวเลข 10,000 ขั้นต่ำสุดความทนทานในการลบ / เขียนโดยทั่วไปอาจเป็นห้าครั้ง - ดังนั้นหากคุณกำลังพัฒนาคุณอาจแฟลชโปรเซสเซอร์ได้ 140 ครั้งต่อวัน - ทุกๆ 3 1/2 นาที เป็นเวลาแปดชั่วโมง - และอาจยังคงอยู่หนึ่งปี)


2

ที่โรงเรียนของฉันเราใช้ตัวประมวลผล HC11 หรือ HC12 พร้อม RAM ภายนอกเพื่อโหลดและรันโปรแกรมบน ... แต่ฉันลืมชื่อบอร์ด / ชุด :( ในกรณีใด ๆ Freescale HC (S) -line MCUs ที่อยู่ RAM และ ROM เหมือนกัน ดังนั้นคุณสามารถโหลดรหัสลงใน RAM และดำเนินการได้

สละคิวจากblalorทางออกที่ดีที่สุดอาจจะมีการเพิ่มปุ่มบนกระดานของคุณที่สามารถ reflash รูปจากข้อมูลที่เก็บไว้ในการ์ด SD ที่คุณใส่กับ bootloader เป็น ฉันนึกภาพไม่ออกว่าโค้ดอะไรที่ไม่เหมาะกับ PIC ที่ใหญ่กว่า หากคุณมีข้อมูลคงที่ (กราฟิก, ข้อความ, เสียง) ให้เก็บไว้ในที่จัดเก็บข้อมูลภายนอก


1

คุณอาจไม่สามารถจัดสรรจาก RAM ได้ แต่สำหรับแอปพลิเคชันของคุณคุณอาจมีตัวโหลดขนาดเล็กในแฟลชซึ่งสามารถอ่านข้อมูลการ์ด SD ลงในแฟลชที่เหลือได้ ฉันใช้วิธีนี้ร่วมกับชิปแฟลชที่ควบคุม SPI เพื่ออนุญาตให้โหลดเฟิร์มแวร์จากลิงค์ไร้สายแล้วติดตั้งเมื่อได้รับอย่างสมบูรณ์ ฉันสามารถคิดได้ว่าไม่มีเหตุผลใดที่จะไม่ทำงานกับการ์ด SD แม้ว่า bootloader ที่ใช้งานร่วมกับ SD อาจกินเนื้อที่


ฉันได้ทำสิ่งที่คล้ายกันสำหรับอุปกรณ์ที่มีเฟิร์มแวร์และจุดประสงค์ที่แตกต่างกันเล็กน้อย: เขียนไฟล์ทั้งหมดไปยังแฟลช SPI ภายนอก (ซึ่งมีขนาดที่ใหญ่กว่าไมโครคอนโทรลเลอร์ส่วนใหญ่) และ reflash คอนโทรลเลอร์ด้วยรูปภาพหนึ่งรูป ด้วย bootloader หากปุ่มค้างระหว่างการรีเซ็ต
Kevin Vermeer

0

ไมโครคอนโทรลเลอร์สองสามตัวจะช่วยให้คุณทำเช่นนี้ดูเหมือนจะไม่ใช่รูป สิ่งที่คุณต้องการทำคือมี bootloader ที่ใช้ spi อ่านจาก sd การ์ดคัดลอกโปรแกรมซึ่งอาจต้องการชื่อไฟล์ที่รู้จักหรือ hardcoded อาจอยู่ในไดเรกทอรีรากแยกไฟล์นั้นลงใน ram แล้วแยก โปรแกรมใน ram คอนโทรลเลอร์ที่ใช้ ARM จะช่วยให้คุณทำสิ่งนี้ได้อย่างแน่นอน

อีกทางเลือกหนึ่งคือให้ bootloader อ่านการ์ด sd ผ่าน spi และแทนที่จะคัดลอกไปที่ ram และแยกการเบิร์นเป็นส่วนหนึ่งของแฟลช อาจต้องการปุ่มถ้ากดปุ่มเปิด / ปิดแล้วโหลดโปรแกรมใหม่จาก sd card มิฉะนั้นหากลายเซ็นหรือการตรวจสอบดูดีในส่วนที่โหลดได้ของแฟลชจากนั้นในสาขาบูตไปยังส่วนของแฟลช หรือบางทีถ้ามีการ์ด sd อยู่ให้โหลดจากนั้นแตกสาขาเป็นส่วนที่โหลดได้ของแฟลช สามารถใช้วิธีนี้กับ arm based และ avr based อาจเป็น pic ได้ แต่ประสบการณ์ pic ของฉันเก่า msp430 ฉันก็จะสมมติเช่นกัน โดยทั่วไปถ้าคุณสามารถตั้งโปรแกรมแฟลชที่คุณใช้งานได้อีกครั้งจากตัวประมวลผลไมโครคอนโทรลเลอร์


อืมจริงๆแล้วฉันยังไม่ได้ตั้งโปรแกรม avr จาก avr ขออภัยที่มีมากกว่าอนุกรมจากโฮสต์ นำเสนอโซลูชันที่สามที่คุณเห็นกระดานงานอดิเรกราคาถูกจำนวนมากที่ทำ ... ใช้ไมโครคอนโทรลเลอร์สองตัว ในกรณีนี้จะมีการตั้งค่าอื่นให้อ่านการ์ด sd โปรแกรมไมโครอื่น ๆ ผ่านทางอนุกรมหรืออื่น ๆ จากนั้นปล่อยการรีเซ็ตในไมโครอื่น ๆ กระดานงานอดิเรก / eval มักจะมี micro หนึ่งอันสำหรับอินเตอร์เฟส usb และมันมักจะ jtags ไปที่อื่น
old_timer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.