Trải nghiệm RP2350 gần như đáp ứng mọi mong muốn
(dmitry.gr)- RP2040 có thế mạnh ở PIO·DMA·ép xung, nhưng vì thiếu hiệu năng lõi, RAM, GPIO, tài nguyên PIO và QSPI PSRAM nên trong một số dự án vẫn phải chuyển sang STM32H7; RP2350 đã lấp đầy khoảng trống đó đáng kể
- RP2350 cung cấp dual Cortex-M33F, hỗ trợ số thực dấu chấm động, lệnh tùy biến tăng tốc toán học độ chính xác kép, RAM gấp đôi và tùy chọn lõi RISC-V; trong nhiều dự án đã được dùng ổn định ở 300MHz
- PIO có thể tận dụng FIFO như bộ nhớ để đọc·ghi ngẫu nhiên, và nhờ 3 PIO, ngắt giữa các PIO cùng DMA được cải thiện, giờ đây thậm chí có thể hiện thực Sony Memory Stick slave và SDIO slave
- QSPI PSRAM hỗ trợ đọc·ghi và cache hoạt động bình thường; các bài test bộ nhớ từng bị treo hoặc crash trên STM32H7 vẫn tiếp tục chạy trên RP2350, đồng thời việc gắn 16MB RAM lên bo mạch thủ công 2 lớp cũng trở nên đơn giản
- Dự án RP2350 công khai đầu tiên, DEFCON 32 badge, đã trình diễn giả lập Game Boy và chạy PalmOS; RP2354A/RP2354B cung cấp 2MB flash in-package, cùng pinout và biến thể mở rộng GPIO 80 chân
Những điểm còn thiếu ở RP2040 và các cải tiến mong muốn
- RP2040 là vi điều khiển được dùng trong nhiều dự án, đặc biệt nổi bật ở PIO, DMA được thiết kế tốt và khả năng ép xung cao
- Tổ hợp PIO và DMA đã được dùng để hiện thực các hệ thống sau
- Trình điều khiển màn hình nâng cao
- Bo mạch hoạt động như toàn bộ bus hệ thống với RAM·ROM
- Cấu hình kết nối với bộ xử lý MC68328
- Những điểm còn thiếu của RP2040 tập trung vào tài nguyên ngoại vi và khả năng mở rộng bộ nhớ
- Chế độ truyền forever không làm lãng phí kênh DMA khác
- Nhiều kênh DMA hơn
- Nhiều thanh ghi hơn để lưu biến tạm trong PIO state machine
- Nhiều khối PIO hơn
- Nhiều hơn 32 khe lệnh cho mỗi PIO
- Nhiều GPIO hơn
- Xung nhịp cao phần lớn chỉ để che đi điểm yếu của lõi Cortex-M0+; nếu có lõi tốt hơn như Cortex-M4F thì sẽ có lợi hơn cho khối lượng công việc số thực dấu chấm động hoặc SIMD nhẹ
- Hỗ trợ QSPI PSRAM và nhiều RAM hơn cũng là những mong muốn quan trọng
So sánh với trải nghiệm QSPI RAM trên STM32H7
- Trong một số trường hợp sử dụng, buộc phải dùng STM32H7 thay vì RP2040, nhưng vẫn còn sự thiếu tin tưởng mạnh mẽ vào các lỗi và cách STMicro xử lý errata của STM32H7
- Việc hỗ trợ QSPI RAM trên STM32H7 bộc lộ các vấn đề sau
- Nếu ghi mà không có cache thì xảy ra mất write
- Nếu bật cache thì quanh một số write 1 byte sẽ xuất hiện dữ liệu rác ngẫu nhiên
- Nếu thực thi mã từ PSRAM thì sau hàng tỷ lần truy cập, toàn bộ chip sẽ bị treo và debugger cũng không thể gắn vào
- Dù đã báo cáo vấn đề và cung cấp demo, phản hồi từ STMicro vẫn chưa thỏa đáng
- Đã tìm được cách vòng tránh, nhưng phải trả giá 7~10% hiệu năng, làm giảm tính hữu dụng của con chip
Những cải tiến được đáp ứng trên RP2350
- Trong một năm qua, với sự hỗ trợ từ Raspberry Pi, tác giả đã dùng mẫu RP2350, báo lỗi và đề xuất ý tưởng, đồng thời xác nhận các trường hợp sử dụng RP2040 được cải thiện như thế nào
- Hiệu năng lõi và tính toán được nâng cấp đáng kể
- Trang bị 2 lõi Cortex-M33F
- Hỗ trợ số thực dấu chấm động
- Cung cấp lệnh tùy biến tăng tốc toán học độ chính xác kép, vượt ngoài khả năng single-precision thông thường của Cortex-M33F
- Phép toán double-precision không phải single-cycle, nhưng ở mức 2~3 chu kỳ mỗi op
- Cũng có thể dùng lõi RISC-V, nhưng trong các dự án thực tế thì tác giả dùng Cortex-M33
- RP2350 chạy ở 300MHz trong nhiều dự án mà không gặp vấn đề gì
- Dung lượng RAM tăng gấp đôi so với RP2040
Thay đổi ở PIO và DMA
- PIO của RP2350 có thể dùng FIFO như bộ nhớ để đọc·ghi ngẫu nhiên, giúp dễ cấu hình hơn cho các trường hợp trước đây gặp khó vì thiếu biến tạm
- Số lượng PIO trong chip tăng lên 3
- Có thể truyền ngắt giữa các PIO, nhờ đó tạo đồng bộ cross-PIO và các cấu hình phức tạp hơn
- Tổ hợp PIO và DMA được cải thiện đã được dùng trong các dự án thực tế để hiện thực
- Sony Memory Stick protocol slave: thiết bị nhận diện như một Memory Stick thật
- SDIO slave device: các thiết bị được thử nghiệm nhận diện như một thiết bị SDIO
- DMA cũng được tăng cường về tính liên tục truyền và điều khiển địa chỉ
- Có thể truyền vô hạn mà không dùng thêm kênh khác
- Có thêm nhiều cách điều chỉnh địa chỉ bộ nhớ ở mỗi lần truy cập
- Ngoài tùy chọn của RP2040 là “cùng một địa chỉ” hoặc “tăng theo kích thước truy cập”, nay còn có giảm địa chỉ và tăng theo kích thước khác
Hỗ trợ QSPI PSRAM
- RP2350 hỗ trợ QSPI PSRAM và việc đọc ghi hoạt động bình thường
- Cache cũng được cung cấp và hoạt động đúng
- Các bài test bộ nhớ từng bị treo hoặc crash trên STM32H7 vẫn tiếp tục chạy trên RP2350, không có mất dữ liệu hay chip bị treo
- Các tổ hợp khả dụng gồm
- 1 flash + 1 PSRAM
- 2 flash
- 1 boot flash + 2 runtime PSRAM
- Cấu hình đặt toàn bộ VTOR, SP, PC trên PSRAM, đồng thời thực thi nhiều lệnh LDM/STM nhắm vào PSRAM và nhận ngắt vẫn hoạt động không lỗi
- Việc cấu hình chỉ cần 3 dòng mã C, và ngay cả việc thêm 16MB RAM lên bo mạch thủ công 2 lớp cũng trở nên đơn giản
- Bo mẫu RP2350 ban đầu là Pi Pico 2 không có footprint cho PSRAM, nên PSRAM được gắn theo kiểu dead-bug, nhưng ngay cả như vậy vẫn chạy ở full speed
Những ưu điểm được giữ lại và trải nghiệm phát triển
- Khi chuyển từ RP2040 sang RP2350, chất lượng thiết kế và tài liệu hóa của ngoại vi vẫn được giữ vững
- Các ngoại vi được đánh giá là hoạt động đúng như cam kết
- SDK rõ ràng, gọn gàng và không cần tải về các bộ công cụ cồng kềnh kiểu Cube/HAL
- Mã nguồn không rơi vào macro hell và hoạt động tốt
- Bo phát triển RP2350 của Raspberry Pi tương thích rPiPico, nên nhiều dự án có thể đưa lên PiPico 2 một cách dễ dàng
Dự án RP2350 công khai đầu tiên: DEFCON 32 badge
- Một trong những dự án RP2350 công khai là DEFCON 32 badge
- Phần cứng do Entropic Engineering phát triển, còn firmware là bản port của trình giả lập Game Boy siêu nhỏ uGB
- 2 lõi được chia vai trò như sau
- Một lõi dùng lệnh SIMD của Cortex-M33 để upscale màn hình Game Boy lên 1.5 lần
- Lõi còn lại xử lý mô phỏng, UI và các công việc còn lại
- Các game Game Boy hợp lệ chạy được đến 2MB; nếu lắp chip flash lớn hơn thì cũng có thể chạy game lớn hơn
- Các game Game Boy cài sẵn được phía DEFCON tự viết
- Trong badge này, chip được chạy ở mức 125MHz khá bảo thủ
- Không có nhiều thời gian kiểm thử, và quy mô sản xuất tăng từ 10 chiếc lên 28.000 chiếc mà không có giai đoạn trung gian, cũng không có plan B
- Xung tối đa của màn hình là 62.5MHz, và vì PIO state machine phải cấp xung đó nên xung màn hình phải là bội số nguyên của xung hệ thống
Chạy PalmOS và firmware
- Cùng phần cứng DEFCON 32 badge đó cũng có thể chạy bản đầy đủ PalmOS thông qua rePalm project
- Badge mặc định không gắn PSRAM nhưng PalmOS vẫn chạy được
- Bộ nhớ khá chật, nhưng infrared beaming, SD card, game đơn giản, memo pad, audio v.v. vẫn hoạt động
- Nếu gắn chip PSRAM AP Memory 64Mbit thì có thể dùng image thứ hai, với nhiều bộ nhớ hơn để tải game hoặc phát MP4 thời gian thực qua TCPMP
- Image firmware có trong tài liệu; chỉ cần chép vào SD card với tên
FIRMWARE.BINrồi chọnfirmware updatetrong menu nútFNđể nạp - Việc khôi phục stock firmware có thể thực hiện trên bất kỳ máy tính nào qua USB và UF2 protocol, và stock image cũng có trong cùng tài liệu
RP2354 và nhiều GPIO hơn
- Kết luận là giờ đây có thể lên kế hoạch lại các dự án STM32H7 bằng RP2350
- Trước ý kiến rằng RP2350 cần SPI flash ngoài, đã có các biến thể flash tích hợp là RP2354A và RP2354B
- RP2354A/RP2354B tích hợp 2MB flash trong package
- Pinout giống hệt RP2350A/B
- Ngoài ra còn có biến thể package 80 chân cung cấp nhiều GPIO hơn
Công bố lợi ích liên quan
- Tác giả không nhận thù lao hay bất kỳ khoản đền đáp tài chính nào cho bài viết này
- Bài viết không được đặt hàng và cũng không trải qua bất kỳ phê duyệt nào
- Việc được tiếp cận sớm RP2350 không đi kèm điều kiện phải nói tích cực công khai hay đưa ra phát ngôn cụ thể nào
1 bình luận
Ý kiến trên Hacker News
Trong vài năm qua tôi đã phát triển driver động cơ không chổi than dựa trên RP2040, nên lần công bố này thật sự rất đáng mong chờ
Module driver có thể xử lý tối đa 53V, 30A liên tục và 50A đỉnh. Gần đây tôi đã tách driver thành một module riêng; nó hữu ích cho robot nông trại và cũng quan trọng khi thử nghiệm driver trong quá trình cải tiến thiết kế. Bản revision lần này trông khá ổn định, nên có lẽ sắp tới có thể dùng RP2350 để làm một driver 1 động cơ tích hợp một bo mạch giá rẻ. Với RP2040, tốc độ vòng lặp là 8kHz, đủ cho động cơ truyền động của robot nông trại cỡ lớn, nhưng trong số các driver hiệu năng cao dùng số thực dấu phẩy động cũng có loại đạt tốc độ vòng lặp 50kHz
Bo mạch đang chạy SimpleFOC, và trên forum từng có thảo luận về việc tạo một thiết kế flagship. Tuy nhiên cần điều khiển sensorless và hỗ trợ số thực dấu phẩy động, nên nếu dùng biến thể pinout lớn mới của RP2350 với 8 chân ADC, có thể đo 3 tín hiệu dòng điện và 3 điện áp cầu để tạo một driver sensorless khá ổn. Có lẽ sẽ mất vài tháng để thiết kế sẵn sàng, nhưng có thể xem tin mới nhất trên kho Git hoặc hồ sơ Twitter
https://github.com/tlalexander/rp2040-motor-controller
https://twitter.com/TLAlexander
Tôi rất thích việc dùng phụ tùng xe đạp cho chân và bánh xe
Đã có các MCU chuyên dụng với ngoại vi riêng, application note và ví dụ mã cho điều khiển BLDC có cảm biến/không cảm biến; tôi không nghĩ RP2040 là con chip được trang bị phù hợp cho việc này
Nó làm tôi nhớ lại hồi nhỏ tháo tung ô tô đồ chơi, lấy motor ra và cảm thấy như mình vừa làm được điều gì đó
Trước đây tôi khó hình dung việc dùng RP2040 trong sản phẩm thực tế, nhưng RP2350 đã sửa được phần lớn những điểm bất mãn, đến mức tôi rất muốn thử dùng
RP2040 cũng có nhiều điểm mạnh. TBMAN là một ý tưởng hay, và khả năng ép xung cũng cực kỳ tốt. PIO thật sự mang tính đột phá và rất có giá trị với nhiều công ty muốn thay thế các dòng kiểu 8051 bằng lõi Arm dạng bo con
Nhưng mỗi điểm hay lại đi kèm một điểm tiếc nuối. Tốc độ xung nhịp cỡ DSP mà lại không có FPU, cũng không có chia số nguyên bằng phần cứng. Việc boot ROM có chức năng USB DFU trên một MCU không có bảo vệ bộ nhớ cũng không phải điều đáng mong muốn. Trong các SDK bên thứ ba như Zephyr, hỗ trợ PIO cực kỳ hạn chế, làm giảm tính hữu dụng trong các dự án quy mô lớn
RP2350 đã giải quyết gần như toàn bộ những bất mãn đó nên tôi rất kỳ vọng. Tuy vậy, nếu phải triển khai các ngoại vi phổ biến như CAN hay SDMMC bằng PIO thì lập tức trở thành bất lợi. Tính linh hoạt rất tuyệt, nhưng khi cần đưa sản phẩm lên chạy nhanh, tôi không muốn phải động vào một ngôn ngữ assembly chuyên dụng. Rốt cuộc, nếu họ cung cấp các thư viện ngoại vi mềm dựng sẵn cho những chức năng phổ biến như SD/MMC, MII, Bluetooth HCI, thì việc tích hợp với Zephyr và các hệ khác sẽ dễ hơn, đồng thời mở rộng đáng kể phạm vi ứng dụng của chip
Mức độ hoàn thiện còn có thể cao hơn, nhưng đã khá gần với dạng “dựng sẵn”
PIO là một lợi thế lớn, và tôi vui vì phiên bản mới đã củng cố thêm hướng đó. Mọi người đã phát triển driver PIO cho nhiều ngoại vi khác nhau như CAN, WS2812, nên khá gần với điều tôi từng mong đợi
Hoạt động ngoại vi tự chủ, op-amp, comparator, timer capture/compare cũng tương tự. Zephyr cố cung cấp một giao diện chung như hệ điều hành desktop, nhưng điều đó không hợp lắm với embedded. Trên desktop, mẫu số chung nhỏ nhất thường là đủ, nhưng trong embedded, nhiều khi chính những tính năng không chung đó mới là lý do để chọn một nền tảng
Lý do chọn RP2040 có cả triết lý thiết kế, nhưng sau khủng hoảng thiếu chip, việc dễ mua được hàng cũng là một yếu tố lớn
Thực tế là có “ví dụ”, và sẽ tốt hơn nếu những thứ đó được cung cấp như đối tượng hỗ trợ hạng nhất
Có thể xem thông số tại đây: https://www.digikey.ca/en/product-highlight/r/raspberry-pi/r...
Dựa trên RP2350 do Raspberry Pi thiết kế tại Anh, FPU, Arm M33 kép 150MHz, SRAM 520KiB, các tính năng bảo mật như khởi động có chữ ký, OTP, SHA-256, TRNG, bộ phát hiện glitch, Arm TrustZone for Cortex-M, tùy chọn CPU RISC-V Hazard3 kép 150MHz, hoạt động tiết kiệm điện, 3 PIO v2 và 12 state machine để hỗ trợ ngoại vi tùy chỉnh, hỗ trợ PSRAM, giao diện flash XIP QSPI ngoài nhanh hơn, flash QSPI onboard 4MB, GPIO chịu được 5V, hỗ trợ SDK C/C++ mã nguồn mở và MicroPython, tương thích phần mềm Pico 1/RP2040, lập trình kéo-thả qua thiết bị lưu trữ USB, module có castellations để hàn trực tiếp lên carrier board, cùng footprint và tương thích chân với Pico 1, 26 GPIO đa chức năng gồm 3 ngõ vào analog, nhiệt độ hoạt động -20°C~+85°C, điện áp đầu vào 1.8VDC~5.5VDC
Sau này mới thấy mục 14.8.2.1 có hai loại chân digital là “Standard Digital” và “Fault Tolerant Digital”, và có vẻ chân FT Digital chịu được 5V
Đây là một ngày lớn với đội Pigweed
Một phần công việc cũng được nhắc tới trong thông báo chính thức về RP2350/Pico 2 [1], nhưng trong nhiều tháng qua họ đã làm một SDK end-to-end mới [2] xây trên Bazel [3], hỗ trợ cả RP2040 lẫn RP2350. Việc này cũng bao gồm upstream hỗ trợ Bazel vào Pico SDK. “Tour of Pigweed” mới [4] cho thấy nhiều tính năng của Pigweed như hermetic build, unit test trên thiết bị, giao tiếp xoay quanh RPC, kiểm thử kiểu nhà máy ngay trên bàn làm việc cùng hoạt động trong một codebase duy nhất. Có thể đặt câu hỏi trên Discord [5]
[1] https://www.raspberrypi.com/news/raspberry-pi-pico-2-our-new...
[2] https://opensource.googleblog.com/2024/08/introducing-pigwee...
[3] https://blog.bazel.build/2024/08/08/bazel-for-embedded.html
[4] https://pigweed.dev/docs/showcases/sense/
[5] https://discord.gg/M9NSeTA
Nhìn mọi thứ được tích hợp theo kiểu hermetic và workflow được gom lại thành một lệnh Bazel thì khác hẳn
Hơi bất ngờ vì thông báo của Pigweed hoàn toàn không nói tới chuyện này
Mong hệ sinh thái vi điều khiển bỏ Java ra
Đây là thiết kế đầu tiên tôi thấy có thể chọn giữa nhân Arm và nhân RISC-V trên cùng một die
Tò mò liệu nó có ảnh hưởng tới giá và mức tiêu thụ điện không. Nhân Hazard3 là tùy chọn; khi khởi động có thể chọn chạy cặp nhân Arm Cortex-M33 đi kèm hoặc cặp nhân Hazard3 ở 150MHz. Táo bạo hơn nữa, có thể chạy một RV cùng một Arm
Hazard3 là thiết kế mã nguồn mở và tài liệu đã được công bố. Đây là một máy RV32IMACZb* nhẹ, thực thi tuần tự 3 giai đoạn, hỗ trợ ISA RISC-V cơ bản 32-bit cùng nhân/chia phần cứng, lệnh atomic, thao tác bit, v.v.
Eben Upton giải thích: “Có thể chọn lúc khởi động. Mỗi cổng đi vào bus fabric có thể được nối qua mux tới M33 hoặc Hazard3. Nếu muốn nghịch kiểu geek, bạn cũng có thể chạy mỗi loại một nhân”
Nguồn: https://www.theregister.com/2024/08/08/pi_pico_2_risc_v/
Diện tích mà lõi thực thi lệnh thực sự chiếm thường khá nhỏ so với ngoại vi hoặc bộ nhớ nội bộ
Có thể kiểm chứng kỹ thuật lẫn mức độ chấp nhận của thị trường với chi phí thấp hơn nhiều so với tape-out một chip riêng
Việc có thể chọn RISC-V hoàn toàn mã nguồn mở nếu muốn là rất hay. Có lẽ nhân RV sẽ chậm hơn M33 về hiệu năng trên mỗi xung, và tôi dự đoán điểm benchmark của M33 sẽ tốt hơn. Lý do là Hazard3 có pipeline 3 giai đoạn, dù M33 cũng là 3 giai đoạn. Đang chờ benchmark
Bài tin chính thức: https://news.ycombinator.com/item?id=41192341
Trang sản phẩm chính thức: https://news.ycombinator.com/item?id=41192269
Doom đã được port lên RP2040: https://kilograham.github.io/rp2040-doom/
Có vẻ RP2350 còn có thể chạy Quake. Một số thay đổi thậm chí tạo cảm giác như được thiết kế gần như cho đúng mục đích này. Nó có FPU, lõi kép 150MHz, khả năng ép xung lên hơn 300MHz, và hỗ trợ PSRAM tối đa 16MB với paging đọc/ghi bằng phần cứng
Việc bo mạch phát triển dùng micro-USB thì không hay lắm. Đã là năm 2024 rồi mà vẫn vậy
Ngoài điểm đó ra thì rất tuyệt, đúng là sản phẩm cần thiết để cạnh tranh với các ông lớn hiện có
Việc sản phẩm hiện đại đều dùng USB-C là tốt, nhưng cáp micro-USB còn dư rất nhiều nên Pico và Pico 2 chính thức dùng micro-USB cũng không quá bất tiện. Có lựa chọn để chọn cổng mong muốn tùy theo dự án là điều tốt
Chip giao tiếp cũng phải phức tạp hơn, nên nhiều khả năng sẽ đắt hơn. Trên AliExpress vẫn có nhiều thiết bị giá rẻ dùng micro-USB và chắc vẫn có nhu cầu. Tùy nhóm khách hàng, người ta cũng có thể dùng nguyên bo phát triển để làm sản phẩm tiêu dùng
Việc đưa nhiều bảo mật như vậy vào vi điều khiển thứ hai của một công ty trẻ có vẻ hướng tới người tiêu dùng là hơi bất ngờ
Ban đầu tôi cảm thấy khó tin tưởng phần bảo mật vì họ thiếu kinh nghiệm. Nhưng các vi điều khiển bảo mật của những nhà cung cấp “giàu kinh nghiệm” cũng có nhiều lỗi bảo mật đã biết, và quan trọng hơn là từng có dấu hiệu cho thấy họ muốn che đậy các vấn đề đó. Việc thực hiện hai lần kiểm toán kiến trúc bảo mật, treo bug bounty 10.000 USD, và thiết kế một bo mạch phục vụ glitching giống như huy hiệu DEF CON cho thấy cam kết khá lớn với bảo mật. Tôi cũng tò mò Redundancy Coprocessor hoạt động như thế nào. Dù vậy, cũng không ngạc nhiên nếu ai đó có thể phá được ít nhất một phần
Ý là hướng tới người tiêu dùng về mặt nhận thức, còn xét từ góc độ doanh thu và nguồn cung thì có vẻ họ đã ưu tiên người dùng công nghiệp
Tôi vẫn chưa tìm được thông báo chính thức hay datasheet, nhưng theo bài này thì có vẻ đây là bước nhảy lớn so với RP2040
Có vẻ gồm 2× Cortex-M33F, DMA được cải thiện, PIO nhiều hơn và tốt hơn, hỗ trợ PSRAM ngoài, biến thể 80 chân với flash trong 2MB, RAM tăng gấp đôi lên 512KiB, và vài lõi RISC-V. Có thể là để dùng cho chế độ tiêu thụ điện thấp