เทคสแตกของบริษัทฮาร์ดแวร์ผู้หญิงที่มีพนักงานคนเดียว
(blog.thea.codes)-
อธิบายเทคโนโลยีและเครื่องมือที่วิศวกรผู้บริหาร Winterbloom บริษัทซินธิไซเซอร์โอเพนซอร์ส ใช้งานอยู่
-
ไม่ไล่ตามความล้ำสมัย แต่ใช้เครื่องมือและเทคโนโลยีที่เข้าใจดีเพื่อบรรลุเป้าหมาย
"Lateral thinking with withered technology"
→ แนวคิดแบบคิดนอกกรอบที่ว่า หากนำเทคโนโลยีที่ไม่ใหม่แล้วมาใช้เพื่อโฟกัสกับความสนุก ก็สามารถสร้างสิ่งใหม่อย่างสิ้นเชิงได้
→ คำพูดของ "Yokoi Gunpei" ผู้สร้างปรัชญาการพัฒนาเทคโนโลยีของ Nintendo ยุคใหม่: ผู้สร้างเครื่องเกมพกพาของ Nintendo (Game Boy) และเกม VR
- ไมโครคอนโทรลเลอร์: คัดเลือก 2-3 รุ่นที่จะโฟกัสกับผลิตภัณฑ์
→ Microchip SAM D21, D51, D11
→ ทั้งสามรุ่นรองรับ USB, SERCOM ที่ยืดหยุ่น, 12-bit ADC แบบหลายช่อง, ไทเมอร์ขั้นสูง เป็นต้น
→ กำลังพิจารณา RP2040 เพิ่มเติม (เมื่อไม่ต้องการ analog I/O) และ STM32H7 (เมื่อจำเป็นต้องสร้างเสียงภายในเฟิร์มแวร์)
- การออกแบบฮาร์ดแวร์: ใช้ KiCAD เครื่องมือ EDA แบบโอเพนซอร์ส
→ แชร์ไลบรารีสำหรับ KiCad บน GitHub ที่รวมสัญลักษณ์, footprint และโมเดล 3D ร่วมของชิ้นส่วนที่ใช้งาน
→ เปิดเผยรายการชิ้นส่วนหลักที่ชอบผ่านหน้า Notion (คำอธิบาย, หมายเลขชิ้นส่วน, datasheet, ผู้ผลิต, ลิงก์สั่งซื้อ, การใช้งาน)
-
เฟิร์มแวร์: ภาษา, ไลบรารี, ระบบบิลด์, เฟรมเวิร์กทดสอบ ฯลฯ (ด้านล่างแยกทีละหัวข้อ)
-
ภาษา C, GCC, CMSIS
→ ใช้ภาษา C ที่แม้จะเก่าแต่คุ้นเคย
→ แม้จะมีคอมไพเลอร์เสียเงินอย่าง Keil/IAR แต่เลือกใช้ GCC ARM Embedded Toolchain แบบโอเพนซอร์ส
→ HAL ที่บริษัท Microchip ให้มานั้นจัดการยากเกินไป จึงใช้ไลบรารี CMSIS โดยตรงและเขียน abstraction ขนาดเล็กครอบไว้ด้านบน
CMSIS คือชั้น hardware abstraction layer ที่ ARM จัดหาให้และไม่ผูกกับผู้ผลิตรายใดรายหนึ่ง
- ไลบรารีเฟิร์มแวร์
→ TinyUSB : ไลบรารี USB ที่ยอดเยี่ยมและขนาดเล็ก
→ Marco Paland's Printf : implementation ของ printf ที่ปรับให้เหมาะกับไมโครคอนโทรลเลอร์
→ libfixmath : ไลบรารีขนาดเล็กสำหรับการคำนวณ fixed-point (มีประโยชน์กับไมโครคอนโทรลเลอร์ที่ไม่มีหน่วย fixed-point)
→ µnit : เฟรมเวิร์กทดสอบที่เล็กมากและใช้งานได้ดี
- ระบบบิลด์
→ บิลด์ด้วย Python และ Ninja
→ เริ่มจาก Makefile แต่ค่อย ๆ เขียนและดูแลยากขึ้นจึงเปลี่ยนมาใช้แบบนี้
- เครื่องมือบนฐาน Python
→ รวมจัดการไว้ใน repo ชื่อ wintertools
→ ชุดสคริปต์ที่ช่วยเรื่องบิลด์/ทดสอบที่เกี่ยวข้องกับเฟิร์มแวร์และฮาร์ดแวร์
- CircuitPython
→ ผลิตภัณฑ์บางตัวไม่ได้ใช้เฟิร์มแวร์แบบคัสตอม แต่ใช้ CircuitPython ที่มักใช้เพื่อการเรียนรู้ไมโครคอนโทรลเลอร์
→ ลูกค้าปรับแต่งได้ง่าย
→ ช่วยให้การพัฒนาเฟิร์มแวร์/ซอฟต์แวร์ง่ายขึ้น
→ มีชุมชนที่ยอดเยี่ยมซึ่งดูแลโดย Adafruit
- เอกสาร & คู่มือผู้ใช้
→ เขียนด้วย Markdown บิลด์เป็นหน้าเว็บสแตติกด้วย MkDocs และโฮสต์บน GitHub Pages
→ ใช้เฟรมเวิร์ก Bulma CSS
→ เพื่อความเรียบง่ายจึงไม่ใช้ Sass/LESS เป็นต้น
- JavaScript
→ ตั้งใจหลีกเลี่ยง ecosystem ของ Node.js ที่ซับซ้อนเกินไป
→ ใช้ JavaScript แบบทั่วไป พร้อมโมดูล, คลาส, arrow function, Canvas, WebMIDI, TypedArray เป็นต้น
→ ในอนาคตคาดหวังกับ Deno
2 ความคิดเห็น
เจ๋งมาก..ทำสิ่งนั้นทั้งหมดคนเดียวได้ด้วย..
แม้บทความและชื่อจะคล้ายกับลิงก์ข้างต้น แต่เพราะเป็นสตาร์ตอัปฮาร์ดแวร์ เรื่องราวเลยแตกต่างกันไปโดยสิ้นเชิง ทำให้อ่านได้อย่างเพลิดเพลิน