Đối tượng: Bài viết này hướng đến các kỹ sư firmware, quản lý sản phẩm OEM và người mua kỹ thuật cần hiểu kiến trúc firmware của bút đọc trên các nền tảng B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 và Y6, bao gồm bootloader, driver cảm biến, pipeline giải mã OID, stack MP3, luồng cập nhật OTA và quản lý năng lượng.
Firmware bút đọc là một hệ thống nhúng nhỏ nhưng có các ràng buộc thời gian thực khá nghiêm ngặt. Bút phải đánh thức từ trạng thái ngủ sâu, khóa vào mẫu chấm OID, chạy sửa lỗi Reed-Solomon, lấy khung MP3 và phát âm thanh trong 95 đến 180 mili giây. Đạt được độ trễ đó một cách ổn định trên mức BOM từ 3,8 đến 14,5 USD đòi hỏi phải phân vùng firmware cẩn thận. Bên dưới, chúng tôi đi qua từng lớp từ bootloader đến DAC âm thanh, và chỉ ra chính xác sự khác biệt giữa 11 model đang hoạt động của chúng tôi.
1. Bootloader: 16 KB quyết định tất cả phần còn lại
Mỗi bút đọc đều được xuất xưởng với bootloader hai giai đoạn. Giai đoạn 1 là vùng mask-ROM 16 KB trên MCU chính, chạy đầu tiên và xác thực chữ ký trên giai đoạn 2. Giai đoạn 2 là firmware ứng dụng 256 KB được lưu trong flash SPI. Chữ ký sử dụng ECDSA-P256 với khóa gốc của nhà máy; khách hàng OEM nhận khóa phụ theo từng thương hiệu để firmware của thương hiệu này không thể được nạp lên phần cứng của thương hiệu khác. Kiểm tra chữ ký mất 380 ms trên B1 / B2 / F8 / P2 và 240 ms trên K7 / KF1 / L5 / Q6 / Q8 / T2 / Y6.
Thời gian khởi động từ cấp nguồn đến "sẵn sàng đọc" là 1,2 giây trên B1 / B2 / F8 / P2, 0,8 giây trên K7 / KF1 / Q6 / Y6, và 0,6 giây trên L5 / Q8 / T2. Luồng khởi động là: giai đoạn 1 (kiểm tra chữ ký) -> giai đoạn 2 (khởi tạo RTOS) -> khởi tạo driver cảm biến -> khởi tạo audio codec -> idle. Chúng tôi không chạy bất kỳ stack mạng nào khi khởi động. Không có Wi-Fi hay Bluetooth trong cả 11 model, giúp bề mặt firmware cực nhỏ.
Các phiên bản firmware hiện tại là B1 / B2 2.4.7; F8 3.1.2; K7 / KF1 1.9.5; L5 4.2.0; P2 2.0.3; Q6 / Q8 3.3.1; T2 / Y6 2.6.4. Các phiên bản này ổn định trên thực tế và đã được xuất xưởng qua 86 bản phát hành firmware kể từ năm 2023.
2. Hệ điều hành thời gian thực: FreeRTOS với bộ lập lịch tùy chỉnh
Toàn bộ firmware bút đọc chạy trên FreeRTOS 10.4 với bộ lập lịch tickless tùy chỉnh. Có bốn task liên tục: (1) task cảm biến ở 200 Hz ưu tiên 5, thăm dò cảm biến hình ảnh CMOS và đẩy khung vào vòng đệm 12 khung; (2) task giải mã ở 30 Hz ưu tiên 4, kéo khung, chạy nhị phân hóa, phát hiện lưới, giải mã Reed-Solomon và tra cứu từ điển; (3) task âm thanh ở 1 kHz ưu tiên 6, quản lý pipeline giải mã MP3 và nạp DAC; (4) task idle ở ưu tiên 0, xử lý chuyển trạng thái năng lượng.
Thứ tự ưu tiên task được đảo ngược có chủ đích để task âm thanh luôn chiếm quyền xử lý trước. Vòng đệm âm thanh bị trì trệ sẽ gây lỗi âm thanh nghe được; giải mã bị trì trệ chỉ làm trễ nhận dạng vài mili giây. Task giải mã chỉ chạy khi task cảm biến báo có khung mới. Task idle được đánh thức bằng ngắt phần cứng từ cảm biến chạm.
Trên 11 model, cấu hình RTOS khác nhau ở hai điểm: tickless idle bị tắt trên B1, B2, F8 và P2 để tiết kiệm 4 KB mã; bật trên K7, KF1, L5, Q6, Q8, T2 và Y6. Điểm khác biệt thứ hai là kích thước vòng đệm âm thanh: 24 KB trên B1 / B2 / F8 / P2 và 64 KB trên L5 / Q8 / T2. Vòng đệm lớn hơn giúp giảm hiện tượng thiếu dữ liệu âm thanh trên L5 vì nó kéo amplifier 1 W có dòng tức thời lớn hơn.
| Model | RTOS tickless | Vòng đệm âm thanh | Thời gian khởi động | Kích thước mã |
|---|---|---|---|---|
| B1 / B2 | Không | 24 KB | 1,2 s | 612 KB |
| F8 / P2 | Không | 24 KB | 1,2 s | 588 KB |
| K7 / KF1 | Có | 32 KB | 0,8 s | 720 KB |
| Q6 / Y6 | Có | 32 KB | 0,8 s | 740 KB |
| L5 / Q8 / T2 | Có | 64 KB | 0,6 s | 980 KB |
3. Mô-đun Giải mã OID: 48 KB mã C fixed-point
Bộ giải mã OID là đoạn mã có yêu cầu hiệu năng khắt khe nhất trên bút. Nó được viết bằng C fixed-point (không dùng số thực dấu phẩy động) và biên dịch ra khoảng 48 KB mã ARM Thumb-2 trên các lõi Cortex-M4 được sử dụng trong B1, B2, F8, K7, KF1, P2, Q6 và Y6, và 52 KB trên các lõi Cortex-M7 được sử dụng trong L5, Q8 và T2.
Mô-đun giải mã gồm bảy chương trình con: binarize, grid-detect, perspective-correct, RS-decode, hash, dictionary-lookup và audio-offset-fetch. Mỗi chương trình chạy trong một khoảng thời gian xác định. Trên Cortex-M4 ở 168 MHz, binarize mất 8 ms cho cửa sổ 32x32; grid-detect 12 ms; RS-decode 18 ms; hash cộng lookup 14 ms; tổng 52 ms. Trên Cortex-M7 ở 240 MHz, các con số giảm xuống 5 ms, 7 ms, 11 ms, 8 ms; tổng 31 ms. Các model L5 / Q8 / T2 sử dụng bản build M7, đó là lý do chúng đạt được độ trễ toàn trình 95 ms.
Bảng tra cứu từ điển được tạo tại thời điểm biên dịch firmware từ manifest nội dung. Với một cuốn sách song ngữ 32 trang có 600 file âm thanh, bảng này khoảng 8,4 KB. Với một bộ bách khoa 96 trang có 4.200 file âm thanh, bảng này là 58,8 KB. Bảng được lưu trong cùng flash SPI với các tài sản âm thanh và được tải lười vào RAM khi cần.
Mẹo cho người mua: Nếu tựa sách của bạn có hơn 4.000 file âm thanh riêng biệt, đừng sử dụng các bút B1, B2, F8, P2 hoặc K7. Bảng tra cứu từ điển vượt quá 56 KB và bộ nhớ RAM 64 KB trên các nền tảng đó không đủ chứa tập làm việc, dẫn đến phải đọc lại flash và cộng thêm 30 đến 60 ms độ trễ. Hãy chọn L5, Q8, T2 hoặc Y6 cho các chương trình có mật độ nội dung cao.
4. Pipeline MP3: Bộ giải mã Helix và nạp DMA
Sau khi tra cứu từ điển trả về offset và độ dài âm thanh, firmware chuyển sang pipeline MP3. Pipeline sử dụng bộ giải mã MP3 Helix, một cài đặt fixed-point của RealNetworks, chiếm 28 KB dung lượng mã và chạy trên mọi model. Bộ giải mã xuất ra PCM 16-bit 44,1 kHz, được nạp vào DAC trên chip qua DMA.
DMA được cấu hình truyền double-buffered với bộ đệm 512 mẫu trên B1 / B2 / F8 / P2 / K7 / KF1 và bộ đệm 1024 mẫu trên L5 / Q8 / T2 / Y6. Bộ đệm DMA lớn hơn trên các bút cao cấp làm giảm khả năng cạn bộ đệm khi tác vụ giải mã tiền nhiệm tác vụ âm thanh. Cơ chế bảo vệ chống cạn bộ đệm được tích hợp sẵn: nếu bộ đệm DMA giảm xuống dưới 25%, firmware tạm thời hạ mức ưu tiên giải mã MP3 xuống một bậc để dành thêm thời gian CPU cho tác vụ âm thanh.
Các tần số lấy mẫu âm thanh được hỗ trợ là 8, 16, 22,05, 32, 44,1 và 48 kHz. Các tốc độ bit từ 32 kbps mono đến 320 kbps stereo đều được giải mã. Trên thực tế, chúng tôi cung cấp nội dung ở 128 kbps stereo cho phần đọc chất lượng cao và 64 kbps mono cho hiệu ứng âm thanh. Một cuốn sách 32 trang với 600 file âm thanh ở 128 kbps trung bình từ 0,9 đến 1,1 GB âm thanh; khi nén vào flash SPI, dung lượng còn khoảng 380 đến 460 MB sau mã hóa Helix. Flash 4 MB trên B1 / B2 / F8 / P2 được dành riêng cho image firmware; các tài sản âm thanh nằm trên một chip flash riêng 4 GB hoặc 8 GB trên K7 / KF1 / Q6 / Y6, hoặc trên chip 16 GB trên L5 / Q8 / T2.
Để tìm hiểu sâu hơn về phía mã hóa âm thanh, hãy xem bài viết codec âm thanh và nén MP3 của bút đọc. Về phía OID, hãy xem cách công nghệ bút đọc OID hoạt động.
5. Quản lý năng lượng: Năm trạng thái, một mục tiêu
Bút đọc chạy bằng pin và được xuất đến 47 quốc gia, nhiều nơi có điện lưới không ổn định. Firmware định nghĩa năm trạng thái nguồn. (1) Vận chuyển: deep sleep ở 8 uA, pin được bảo toàn trong 18 tháng. (2) Tắt: deep sleep ở 12 uA, công tắc bật/tắt là điện tử chứ không phải cơ học trên mọi model trừ T2. (3) Chờ: 1,2 mA, cảm biến quét ở 5 Hz để phát hiện chạm, sẵn sàng trong 8 ms. (4) Hoạt động: 60 đến 180 mA tùy theo đường âm thanh. (5) Sạc: đỉnh 380 mA, đầu vào USB-C 5 V trên mọi model trừ P2 (micro-USB) và T2 (USB-C cộng jack DC).
Sự chuyển trạng thái giữa Chờ và Hoạt động được kích hoạt bởi ngắt chạm từ cảm biến điện dung nhúng trong đầu bút. Ngắt kích hoạt khi người dùng chạm vào trang; tác vụ cảm biến đánh thức các pipeline giải mã và âm thanh. Thời gian đánh thức-và-giải mã toàn trình trên L5, Q8 và T2 là 95 ms; trên B1, B2, F8, K7, KF1, P2, Q6 và Y6 là 120 đến 180 ms.
Thời lượng pin là con số nổi bật trên mọi bảng thông số: B1 5,0 h, B2 5,5 h, F8 4,5 h, K7 / KF1 6,0 h, L5 8,5 h, P2 4,0 h, Q6 6,5 h, Q8 7,0 h, T2 14 h, Y6 11 h. Các con số này được đo ở 50% âm lượng, chu kỳ hoạt động 12% (mức sử dụng điển hình của trẻ), với cảm biến liên tục quét. Sử dụng thực tế có thể khác; bài viết an toàn pin lithium polymer của bút đọc bài viết trình bày về hóa học cell và profile sạc.
6. Cập nhật OTA: Chỉ qua USB theo thiết kế
Chúng tôi cố ý không tích hợp Wi-Fi hay Bluetooth trên bất kỳ cây đọc nào. Lý do có hai: chi phí BOM và quyền riêng tư dữ liệu trẻ em. Không có radio, bút không thể truyền dữ liệu sử dụng, giúp việc tuân thủ COPPA, GDPR-K và PIPL trở nên đơn giản. Do đó, cập nhật chỉ qua USB trên mọi model. Người dùng cắm bút vào máy tính, chạy ứng dụng cập nhật desktop 12 MB, và firmware mới được đẩy lên trong 35 đến 60 giây.
Đối với khách hàng OEM, chúng tôi cung cấp ứng dụng cập nhật có thể gắn thương hiệu được xây dựng trên Electron. Ứng dụng xác minh chữ ký firmware, hiển thị tiến trình và xóa cache từ điển. Đối với chương trình B2B từ 3.000 bút trở lên, chúng tôi cũng cung cấp công cụ flash tại dây chuyền có thể nạp 12 bút song song qua USB hub, hoàn thành lô 12 bút trong 7 phút.
OTA qua USB giữ BOM rẻ (không chip Wi-Fi, không anten, không tấm chắn RF) và phạm vi chứng nhận nhỏ gọn (không FCC ID, không test radio RED). Để biết thêm về ảnh hưởng đến chứng nhận, xem reading pen certification update after product change buying guide và reading pen software update strategy playbook.
7. Pipeline xây dựng: Từ manifest đến binary đã ký
Pipeline build firmware nhận ba đầu vào: (1) content manifest, một CSV liệt kê đường dẫn mỗi file âm thanh, ngôn ngữ đích và tọa độ trang; (2) OEM brand config, một file JSON gồm brand key, chứng chỉ chữ ký và chuỗi UI; (3) phiên bản firmware nền, hiện là một trong 11 nhánh phiên bản ở trên. Pipeline chạy trong hệ thống CI và tạo binary firmware đã ký trong 4 giờ cho một cuốn sách 32 trang điển hình.
Các giai đoạn pipeline: (1) chuẩn hóa âm thanh về -16 LUFS; (2) mã hóa MP3 ở 128 kbps stereo hoặc 64 kbps mono; (3) sinh bảng từ điển; (4) sinh parity Reed-Solomon; (5) liên kết firmware với brand config; (6) chữ ký ECDSA; (7) hash và đóng gói. Giai đoạn 1 đến 4 mất 90 phút cho thư viện âm thanh 1 GB. Bước 5 đến 7 mất 15 phút. Tổng: khoảng 105 phút thực tế cho một cuốn sách tùy chỉnh điển hình.
Đối với khách hàng OEM số lượng lớn, pipeline build được cung cấp dưới dạng API tự phục vụ. Một cuốn sách 32 trang với 600 file âm thanh trả về binary firmware đã ký trong khoảng 95 phút qua API. Chúng tôi đã thực hiện 86 bản phát hành firmware từ 2023 trên toàn bộ cơ sở lắp đặt 47.000+ bút.
8. Xử lý lỗi và phục hồi
Firmware bút đọc được thiết kế để có khả năng phục hồi. Bootloader hai giai đoạn với chữ ký ECDSA có nghĩa là image ứng dụng bị hỏng được phát hiện khi khởi động và bút chuyển về phục hồi giai đoạn 2. Chế độ phục hồi là một image tối thiểu 4 KB có thể flash lại ứng dụng qua USB. Trên 47.000+ bút đã xuất xưởng, chế độ phục hồi đã được kích hoạt 0,07% số lần, hầu như luôn do mất điện USB trong quá trình cập nhật.
Firmware cũng triển khai watchdog timer ở 4 giây. Nếu bất kỳ task nào không heartbeat, watchdog sẽ reset core Cortex-M. Task cảm biến, decoder và âm thanh đều heartbeat theo nhịp tự nhiên; task idle không được giám sát vì nó được phép ngủ vô thời hạn.
Độ tin cậy thực địa, đo trên toàn bộ cơ sở lắp đặt, là 99,4% trong 24 tháng đối với B1, B2, F8, K7, KF1, P2, Q6 và Y6, và 99,6% đối với L5, Q8 và T2. Chênh lệch 0,2 điểm là do codebase lớn hơn và nhiệt độ vận hành cao hơn của bộ khuếch đại 1 W trong dòng L5. Để biết phương pháp QA, xem reading pen aging test standards buying guide và reading pen troubleshooting playbook.
9. Chiến lược bản địa hóa: 12 ngôn ngữ, một codebase
Chúng tôi phát hành 12 phiên bản ngôn ngữ của firmware: Tiếng Anh, Tiếng Tây Ban Nha, Tiếng Pháp, Tiếng Đức, Tiếng Ý, Tiếng Bồ Đào Nha, Tiếng Ả Rập, Tiếng Do Thái, Tiếng Nga, Tiếng Trung Giản thể, Tiếng Trung Phồn thể và Tiếng Nhật. Bản địa hóa không chỉ là chuỗi UI; nó bao gồm bố cục bàn phím trên màn hình, tốc độ âm thanh mặc định, đảo UI phải-sang-trái cho Tiếng Ả Rập và Tiếng Do Thái, và định dạng lịch / thời gian.
Chuỗi UI nằm trong một vùng riêng 96 KB của flash SPI; chuyển ngôn ngữ là một selector một byte. Không cần flash lại để đổi ngôn ngữ tại nhà máy. Khách hàng OEM thường xuất 3 đến 5 biến thể ngôn ngữ cho mỗi chương trình. Pipeline build chấp nhận language manifest và tạo một binary đã ký cho mỗi ngôn ngữ từ một cây nguồn duy nhất.
Để biết thêm về chiến lược nội dung và bản địa hóa, xem reading pen content authoring workflow guide và voice language customization buying guide.
10. Các đánh đổi kỹ thuật bạn nên biết
Nếu bạn đang đánh giá kiến trúc firmware bút đọc cho một chương trình mới, có ba đánh đổi quan trọng. (1) ASIC so với FPGA decoder: ASIC rẻ hơn nhưng bị khóa vào một định dạng OID; FPGA tốn thêm 18 đến 30 cent mỗi bút và hỗ trợ nâng cấp định dạng trong tương lai. (2) Tickless idle: tiết kiệm 4 KB code space và giảm dòng standby từ 1,2 mA xuống 0,6 mA, nhưng thêm 12 KB code; được bật trên K7, KF1, L5, Q6, Q8, T2, Y6 và tắt trên B1, B2, F8, P2 để giữ chi phí BOM thấp. (3) Kích thước buffer âm thanh: 24 KB trên các bút nhỏ đủ cho nội dung mono 64 kbps nhưng chật cho stereo 128 kbps; 64 KB trên L5, Q8, T2 cho headroom cho hiệu ứng âm thanh stereo và nhạc nền.
Đối với chương trình OEM 3.000 đến 5.000 bút, khuyến nghị tiêu chuẩn là L5 hoặc Q8 với tickless idle, decoder ASIC, buffer âm thanh 64 KB và UI tùy chỉnh thương hiệu. Đối với chương trình 30.000+ bút nơi mỗi xu đều quan trọng, khuyến nghị là K7 hoặc Q6 với cấu hình tối ưu chi phí. Đối với chương trình theo đấu thầu nơi khách hàng là khu học chánh 12.000 bút, T2 với pin lớn nhất và thời lượng pin 14 giờ chiến thắng.
Để tham khảo trực quan, đây là sơ đồ ưu tiên task firmware cho dòng L5 / Q8 / T2 chạy Cortex-M7 ở 240 MHz. Âm thanh là ưu tiên cao nhất vì underrun có thể nghe được; decoder ở mức giữa vì trượt không cảm nhận được; idle thấp nhất.
FAQ
Related Reading
- How OID Reading Pen Technology Works
- OID Code Printing and Printing Accuracy
- Reading Pen Audio Codec and MP3 Compression
- Reading Pen PCB Design and EMC Compatibility
- Reading Pen Software Update Strategy
- Reading Pen Battery Lithium Polymer Safety
- Reading Pen Troubleshooting Playbook
- Reading Pen Firmware Update OEM