16 điểm bởi xguru 2021-05-31 | 2 bình luận | Chia sẻ qua WhatsApp
  • Giải thích về các công nghệ và công cụ mà một kỹ sư đang sử dụng để điều hành Winterbloom, một công ty synthesizer mã nguồn mở

  • Không chạy theo những thứ tối tân nhất, mà dùng các công cụ và công nghệ mình hiểu rõ để đạt được mục tiêu

"Lateral thinking with withered technology"

→ Tư duy theo chiều ngang rằng nếu tận dụng các công nghệ đã héo úa đi thay vì công nghệ mới, và tập trung vào niềm vui, thì có thể tạo ra những thứ hoàn toàn mới

→ Câu nói của "Yokoi Gunpei", người đã tạo nên triết lý phát triển công nghệ của Nintendo hiện đại: người đã làm ra máy chơi game cầm tay của Nintendo (Game Boy) và các trò chơi VR

  • Vi điều khiển: chọn ra 2-3 sản phẩm để tập trung

→ Microchip SAM D21, D51, D11

→ Cả ba đều hỗ trợ USB, SERCOM linh hoạt, ADC 12-bit đa kênh, bộ định thời nâng cao, v.v.

→ Ngoài ra đang cân nhắc RP2040 (khi không cần analog I/O), STM32H7 (khi cần tạo âm thanh trong firmware)

  • Thiết kế phần cứng: sử dụng KiCad, công cụ tự động hóa thiết kế điện tử mã nguồn mở

→ Đang chia sẻ trên GitHub các thư viện KiCad gồm symbol, footprint và mô hình 3D dùng chung cho các linh kiện đang sử dụng

→ Công khai danh sách các linh kiện chính được ưa dùng trên trang Notion (mô tả, mã linh kiện, datasheet, nhà sản xuất, liên kết mua hàng, mục đích sử dụng)

  • Firmware: ngôn ngữ, thư viện, hệ thống build, framework kiểm thử, v.v. (mỗi mục bên dưới một phần)

  • Ngôn ngữ C, GCC, CMSIS

→ Dùng ngôn ngữ C vì cũ nhưng quen thuộc

→ Dù có các trình biên dịch trả phí như Keil/IAR, vẫn sử dụng GCC ARM Embedded Toolchain mã nguồn mở

→ Vì HAL do Microchip cung cấp quá khó xử lý, nên trực tiếp dùng thư viện CMSIS và viết một lớp trừu tượng nhỏ ở bên trên

CMSIS là lớp trừu tượng hóa phần cứng độc lập với nhà cung cấp do ARM cung cấp

  • Thư viện firmware

→ TinyUSB: thư viện USB nhỏ gọn và rất tốt

→ Marco Paland's Printf: triển khai printf được tối ưu cho vi điều khiển

→ libfixmath: thư viện nhỏ cho tính toán số cố định (hữu ích với vi điều khiển không có đơn vị số cố định)

→ µnit: framework kiểm thử rất nhỏ nhưng hữu ích

  • Hệ thống build

→ Build bằng Python và Ninja

→ Bắt đầu với Makefile nhưng dần trở nên khó dùng nên đã chuyển đổi

  • Tooling dựa trên Python

→ Quản lý tích hợp trong repo tên là wintertools

→ Bộ sưu tập script hỗ trợ build/test liên quan đến firmware và phần cứng

  • CircuitPython

→ Một số sản phẩm không dùng firmware tùy biến mà dùng CircuitPython, vốn được dùng cho mục đích giáo dục vi điều khiển

→ Giúp khách hàng dễ tùy biến hơn

→ Giúp việc phát triển firmware/phần mềm trở nên dễ dàng hơn

→ Có một cộng đồng rất tốt do Adafruit quản lý

  • Tài liệu & hướng dẫn người dùng

→ Viết bằng Markdown. Build thành trang web tĩnh bằng MkDocs rồi host trên GitHub Pages

→ Sử dụng framework CSS Bulma

→ Để giữ mọi thứ đơn giản nên không dùng Sass/LESS, v.v.

  • JavaScript

→ Cố ý tránh hệ sinh thái Node.js quá phức tạp

→ Sử dụng JavaScript thông thường cùng module, class, arrow function, Canvas, WebMIDI, TypedArray, v.v.

→ Trong tương lai đang kỳ vọng vào Deno

2 bình luận

 
daumkakao 2023-04-12

Ngầu thật.. một mình mà làm được chừng đó..

 
xguru 2021-05-31

Bài viết và tiêu đề khá giống với bài trên, nhưng vì đây là một startup phần cứng nên câu chuyện hoàn toàn khác, đọc rất thú vị.