คำถามติดแท็ก firmware

เฟิร์มแวร์หมายถึงซอฟต์แวร์ที่ทำงานบนระบบฝังตัวหรือไมโครคอนโทรลเลอร์เพื่อควบคุมฮาร์ดแวร์โดยตรง

9
รหัสเฟิร์มแวร์หรือข้อมูลคืออะไร?
เมื่อมีคนบอกว่าพวกเขา "กระพริบ" เฟิร์มแวร์ไปยังอุปกรณ์ฉันสงสัยว่ามันหมายถึงอะไร เฟิร์มแวร์เป็นเพียงไบนารีดั้งเดิมที่เก็บไว้ในหน่วยความจำและสามารถตีความได้โดย CPU ของอุปกรณ์ (เช่น EXE อื่น ๆ บนคอมพิวเตอร์)? หรือเฟิร์มแวร์เป็นเพียงข้อมูลที่ทำหน้าที่เป็นอินพุตให้กับโปรแกรมที่ไม่เปลี่ยนรูปแบบที่ฮาร์ดโค้ด / ต่อสายไปยังอุปกรณ์แล้วหรือไม่? หากตัวอย่างหลังไม่ใช่เฟิร์มแวร์คุณจะเรียกว่าอะไร ตัวอย่างเช่นสมมติว่าอุปกรณ์มีไบนารี่บางตัวsomeapp.exeอยู่และคุณไม่สามารถลบหรือแก้ไขไบนารี่นี้ได้ ไบนารีเมื่อวิ่งจะรับอินพุตจากชิปหน่วยความจำ คุณสามารถ "แฟลช" ข้อมูลไปยังชิปนี้และส่งผลกระทบต่ออินพุต / การกำหนดค่าของsomeapp.exeที่จะมีผลในครั้งต่อไปที่มันทำงาน หากไม่ใช่เฟิร์มแวร์สิ่งนี้จะเรียกว่าอะไร
29 flash  firmware 

2
การป้องกันเฟิร์มแวร์บนตัวควบคุม AVR และ PIC
บางคนสามารถแตกไฟล์ HEX ที่ฉันเขียนในไมโครคอนโทรลเลอร์ที่ฉันให้มาได้หรือไม่ หากเป็นไปได้ผู้อื่นจะมั่นใจได้อย่างไรว่ารหัสของพวกเขาปลอดภัยในระบบฝังตัว ในกรณีของไมโครคอนโทรลเลอร์ PIC และ AVR เราจะป้องกันเฟิร์มแวร์ของตนจากการทำซ้ำได้อย่างไร?
23 pic  avr  embedded  firmware 

4
การรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานทำงานอย่างไร
อุปกรณ์ฝังตัวทั้งหมดมีตัวเลือก "รีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน" ซึ่งอนุญาตให้ผู้ใช้รีเซ็ตอุปกรณ์ของเขาหากมีสิ่งผิดปกติ ฉันกำลังพัฒนาเฟิร์มแวร์บนบอร์ด STM32 เฟิร์มแวร์มีบูตโหลดเดอร์ที่อนุญาตให้อัปเกรดแอปพลิเคชันผ่าน UART (โดยการส่งไฟล์ไบนารีที่มีภาพใหม่) และฉันต้องการเพิ่มคุณสมบัติอื่น: รีเซ็ตเป็นค่าจากโรงงาน เมื่อผู้ใช้เลือกตัวเลือกนี้บอร์ดจะโหลดภาพต้นฉบับ การรีเซ็ตเป็นค่าเริ่มต้นจากโรงงานคืออะไร มันเกี่ยวกับการโหลดไฟล์ไบนารี่ทั้งหมดลงในหน่วยความจำอีกครั้งหรือเพียงแค่เรียกใช้ฟังก์ชันที่เริ่มต้นตัวแปรที่แก้ไขโดยผู้ใช้ปลายทางหรือไม่ วิธีปฏิบัติที่ดีที่สุดในการทำเช่นนั้นคืออะไร? จะเก็บ FW ดั้งเดิมไว้ที่ไหน มันอยู่ในแฟลชภายในหรือภายนอก?

2
ควรกำหนดกับกับดักทั้งหมดหรือไม่
ฉันได้เห็นสองกรณีตอนนี้ด้วย dsPIC 30F4013 ซึ่งตัวควบคุมถูกรีเซ็ตเนื่องจากมีกับดักที่ไม่ได้กำหนด ทำไมกับดักเหล่านี้ได้รับการยกในตอนแรกยังคงเป็นปริศนา แต่นั่นไม่ใช่คำถามของฉันทันที ฉันเริ่มที่จะคิดว่ามันจะเป็นการเขียนโปรแกรมที่ดีที่จะเสมอกำหนดดักทั้งหมดแม้ว่าดักไม่ควรจะเกิดขึ้นดังนั้นฉันได้รับอย่างน้อยข้อผิดพลาดที่ชัดเจนแทนการตั้งค่าแบบสุ่ม นี่เป็นวิธีปฏิบัติมาตรฐานที่ฉันไม่ทราบหรือไม่? ฉันควรพิจารณาข้อเสียของการฝึกนี้หรือไม่?

6
การใช้ตัวแปรโกลบอลในระบบสมองกลฝังตัว
ฉันเริ่มเขียนเฟิร์มแวร์สำหรับผลิตภัณฑ์ของฉันและฉันเป็นมือใหม่ที่นี่ ฉันได้อ่านบทความมากมายเกี่ยวกับการไม่ใช้ตัวแปรหรือฟังก์ชั่นทั่วโลก มีข้อ จำกัด ในการใช้ตัวแปรโกลบอลในระบบ 8 บิตหรือว่าเป็น 'ไม่ต้องทำ' ฉันควรใช้ตัวแปรทั่วโลกในระบบของฉันหรือฉันควรหลีกเลี่ยงพวกเขาอย่างสมบูรณ์? ฉันต้องการคำแนะนำที่มีค่าจากพวกคุณในหัวข้อนี้เพื่อทำให้เฟิร์มแวร์ของฉันมีขนาดเล็กลง
17 c  embedded  firmware 

5
ความเป็นไปได้สำหรับการจัดสรรหน่วยความจำสำหรับการออกแบบเฟิร์มแวร์แบบแยกส่วนใน C
วิธีการแบบแยกส่วนค่อนข้างมีประโยชน์โดยทั่วไป (พกพาและสะอาด) ดังนั้นฉันจึงลองโปรแกรมโมดูลเป็นอิสระจากโมดูลอื่น ๆ เท่าที่จะทำได้ แนวทางของฉันส่วนใหญ่ขึ้นอยู่กับ struct ที่อธิบายถึงโมดูลเอง ฟังก์ชั่นการเริ่มต้นจะตั้งค่าพารามิเตอร์หลักหลังจากนั้นตัวจัดการ (ตัวชี้ไปยังโครงสร้าง desriptive) จะถูกส่งผ่านไปยังฟังก์ชันใดก็ตามภายในโมดูลที่เรียกว่า ตอนนี้ฉันสงสัยว่าวิธีที่ดีที่สุดของหน่วยความจำการจัดสรรสำหรับโครงสร้างที่อธิบายถึงโมดูลอาจเป็น ถ้าเป็นไปได้ฉันต้องการสิ่งต่อไปนี้: โครงสร้างทึบแสงดังนั้นโครงสร้างอาจเปลี่ยนแปลงได้โดยการใช้ฟังก์ชั่นอินเตอร์เฟสที่มีให้เท่านั้น หลายกรณี หน่วยความจำที่จัดสรรโดย linker ฉันเห็นความเป็นไปได้ดังต่อไปนี้ซึ่งขัดแย้งกับหนึ่งในเป้าหมายของฉัน: ประกาศทั่วโลก หลายอินสแตนซ์ทั้งหมดถูกลิงค์โดย linker แต่ struct ไม่ทึบแสง (#includes) module_struct module; void main(){ module_init(&module); } malloc opaque โครงสร้างหลายอินสแตนซ์แต่ allcotion on heap ใน module.h: typedef module_struct Module; ในฟังก์ชั่น module.c init, malloc และตัวชี้กลับไปยังหน่วยความจำที่จัดสรรไว้ module_mem = …
16 c  design  firmware 

4
เป็นวิธีที่ดีสำหรับ mcu เพื่อตรวจสอบว่ารุ่นฮาร์ดแวร์ใดที่ทำงานอยู่?
ฉันทำงานเกี่ยวกับการออกแบบผลิตภัณฑ์ใหม่และอาจจะมีการเปลี่ยนแปลง / แก้ไขฮาร์ดแวร์เล็กหรือใหญ่ตลอดอายุของผลิตภัณฑ์ สำหรับการอัพเดตเฟิร์มแวร์ในอนาคตฉันต้องการวิธีการตรวจสอบการแก้ไขฮาร์ดแวร์ กลยุทธ์ที่ดีคืออะไร? ฉันกำลังดึงพินสำรองสองตัวขึ้น / ลงด้วยตัวต้านทานภายนอกและตรวจสอบรูปแบบ สิ่งนี้อนุญาตสำหรับการแก้ไขฮาร์ดแวร์ 4 ครั้งเท่านั้น แต่อาจเพียงพอสำหรับการใช้งานจริง มันอาจกลายเป็นปัญหาถ้าฉันต้องการพินเหล่านี้หนึ่งอันหรือทั้งสองอย่างในการแก้ไขฮาร์ดแวร์ในอนาคต ฉันคิดว่าวิธีที่ประหยัดกว่าอาจจะมีตัวต้านทานตัวต้านทานเชื่อมต่อกับขา ADC การแก้ไขฮาร์ดแวร์แต่ละครั้งอาจมีตัวต้านทานค่าที่แตกต่างกัน น่าเสียดายที่ฉันไม่มี ADC สำรองในการออกแบบปัจจุบันของฉัน ฉันเดาวิธีอื่นสามารถเข้ารหัสหมายเลขรุ่นฮาร์ดแวร์ใน EEPROM หรือแฟลช mcu ในระหว่างการผลิต? (เราไม่มีสิ่งอำนวยความสะดวกนั้นในขณะนี้) ฉันเดาว่าฉันกำลังมองหาคำแนะนำสำหรับวิธีการที่ยืดหยุ่นและแข็งแกร่ง [แก้ไข] เรื่อง ข้อเสนอแนะจาก @ trav1s: ฉันไม่มีบัสแอดเดรสต่อ se แต่ฉันมี 24LCxx EEPROM บนบัส I2C Slave Address 3 บิตต่ำนั้นใช้งานได้ยาก ฉันเดาว่าฉันสามารถเปลี่ยนบิตที่อยู่และค้นหา EEPROM ในระหว่างการเริ่มต้น

10
เป็นจริงหรือไม่ที่เฟิร์มแวร์จะระบุในการผลิต
มีระบบในการผลิตขนาดใหญ่ที่อนุญาตให้มีหมายเลขซีเรียลที่ไม่ซ้ำกันเพื่อโปรแกรมในเฟิร์มแวร์หรือพื้นที่หน่วยความจำว่างสำหรับ PCB แต่ละอันที่ผ่านมาหรือไม่ ฉันพบว่าองค์การอาหารและยาได้ตัดสินใจที่จะเริ่มบังคับใช้มันสำหรับอุปกรณ์เกรดทางการแพทย์ แต่เป็นสิ่งที่ง่ายต่อการสำเร็จหรือจะต้องพัฒนากระบวนการผลิตของคุณเอง?

6
แรงจูงใจในการใช้ Verilog หรือ VHDL มากกว่า C คืออะไร
ฉันมาจากพื้นหลังการเขียนโปรแกรมและไม่ยุ่งกับฮาร์ดแวร์หรือเฟิร์มแวร์มากเกินไป (อย่างน้อยอุปกรณ์อิเล็กทรอนิกส์และ Arduino) อะไรคือแรงจูงใจในการใช้ภาษาคำอธิบายฮาร์ดแวร์ (HDL) เช่น Verilog และ VHDL เหนือภาษาการเขียนโปรแกรมเช่น C หรือแอสเซมบลีบางส่วน ปัญหานี้เป็นเรื่องของการเลือกหรือไม่? ฉันอ่านว่าฮาร์ดแวร์ซึ่งเฟิร์มแวร์เขียนใน HDL นั้นมีข้อได้เปรียบที่ชัดเจนในการรันคำสั่งแบบขนาน อย่างไรก็ตามฉันรู้สึกประหลาดใจที่เห็นการอภิปรายแสดงความสงสัยว่าจะเขียนเฟิร์มแวร์ใน C หรือ Assembly (แอสเซมบลีที่เหมาะสมถ้าคุณไม่จำเป็นต้องมี CPU?) แต่ฉันสรุปว่ามันเป็นตัวเลือก ดังนั้นฉันมีคำถามสองสามข้อ (อย่าลังเลที่จะอธิบายอะไร): เฟิร์มแวร์สามารถเขียนได้ทั้งใน HDL หรือในภาษาโปรแกรมซอฟต์แวร์หรือเป็นอีกวิธีหนึ่งในการทำภารกิจเดียวกัน ฉันชอบที่จะเป็นตัวอย่างในโลกแห่งความจริง ข้อ จำกัด ใดบ้างที่เกิดขึ้นจากตัวเลือกแต่ละตัว ฉันรู้ว่าการใช้เฟิร์มแวร์โดยทั่วไปของซอฟต์แวร์นั้นอยู่ในตัวเร่งความเร็วฮาร์ดแวร์ (เช่น GPU, อะแดปเตอร์เครือข่าย, ตัวเร่งความเร็ว SSL ฯลฯ ) ตามที่ฉันเข้าใจแล้วการเร่งความเร็วนี้ไม่จำเป็นเสมอไป แต่แนะนำเท่านั้น (เช่นในกรณีของ SSL และการเร่งความเร็วของอัลกอริทึมที่ซับซ้อน) สามารถเลือกระหว่างเฟิร์มแวร์และซอฟต์แวร์ในทุกกรณีหรือไม่? ถ้าไม่ฉันยินดีที่จะให้กรณีที่เฟิร์มแวร์ที่เหมาะสมอย่างชัดเจนและชัดเจน ฉันอ่านแล้วว่าเฟิร์มแวร์ส่วนใหญ่เขียนบน ROM หรือแฟลช …

3
อะไรคือความหมายของการใช้ PROGMEM
ที่มีจำนวนมากของตัวแปรข้อความฉันได้พบมันจำเป็นที่จะต้องเก็บไว้ในหน่วยความจำแฟลชใช้PROGMEM อะไรคือผลบวกและลบของการจัดเก็บตัวแปรขนาดใหญ่ใน Flash (โดยใช้ PROGMEM) เทียบกับ SRAM และ EEPROM บน Arduino

4
การเข้ารหัสรุ่นหรือการกำหนดค่าบน PCB
ฉันต้องการเข้ารหัสข้อมูลเกี่ยวกับรุ่นหรือการกำหนดค่าบนบอร์ด / ไฟฟ้าเพื่อให้เฟิร์มแวร์สามารถตรวจสอบรูปแบบบอร์ดที่ใช้ ตัวเลือกใดบ้างที่เป็นไปได้และอะไรคือข้อดี / ข้อเสีย?

6
การทำงานของโปรแกรมเกิดขึ้นในเฟิร์มแวร์อย่างไร
ฉันได้ยินจากคนที่ทำงานในโดเมนเฟิร์มแวร์ว่าไม่มีระบบปฏิบัติการที่ควบคุมเฟิร์มแวร์ (เช่นเฟิร์มแวร์ในไดรฟ์ USB) มีเธรดเดียวที่ทำงานในขณะที่รอคำสั่งภายนอกและนี่คือจุดเริ่มต้นสำหรับการขัดจังหวะที่จะเกิดขึ้นตามด้วย ISR และการควบคุมที่ไหลไปตลอดจนถึงฮาร์ดแวร์ แต่โดยพื้นฐานแล้วอะไรคือส่วนของฮาร์ดแวร์ที่รันโค้ดเฟิร์มแวร์? มีซีพียูหรือมันเป็นรหัสตาม ASIC ซึ่งถูกเรียกใช้ตราบใดที่อุปกรณ์ใช้พลังงาน ฉันไม่เข้าใจการเปลี่ยนกระบวนทัศน์จากระบบที่ใช้ CPU-OS ปกติเป็นเฟิร์มแวร์
9 cpu  asic  firmware 

2
อัพเกรด ARM เหนืออากาศ
เราจะสร้างบอร์ด ARM พร้อมโมเด็ม GSM ในตัว เราต้องการอัพเกรดเฟิร์มแวร์ ARM บนอากาศ มีวิธีการแก้ปัญหาโอเพ่นซอร์สที่ดีน่าเชื่อถือหรือไม่ ถ้าไม่มีฟีเจอร์นี้มี OS ที่ต้องชำระเงินหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.