Ưu điểm của bộ vi xử lý 32-bit 48-96 Mhz (như trong Arduino Do)


10

Có vẻ như Arduino Because (SAM -X8E dựa trên ARM 32-bit, 84 Mhz, ARM-Cortex-M3) đã được phát hành ngày hôm nay.

Ngoài ra, rõ ràng có vô số bộ xử lý trong danh mục này (32-bit / 48-96 Mhz / ARM) cũng như các bảng tạo mẫu tương ứng:

  • NXP LPC1768 / mBed
  • STM32 / Khám phá
  • PIC32 / ChipKit
  • Cánh quạt PIC32 / Parallax
  • Bảng khởi chạy LM4F120 / TI
  • Vân vân.

Tôi đang cố gắng tìm hiểu sự hấp dẫn của các bộ vi xử lý "ở giữa" này, mà theo tôi dường như nằm ở giữa bộ vi xử lý cấp thấp AVR / MSP430 / v.v. (ưu điểm: rẻ tiền, công suất thấp, dấu chân nhỏ) và ARM7 / etc cao cấp (pro: có khả năng hướng dẫn lớn hơn nhiều mỗi giây).

Trong những tình huống hoặc cách nào bộ vi xử lý dựa trên 32-bit / 48-96 Mhz / ARM là một lựa chọn phù hợp? Cụ thể hơn, tôi tự hỏi trong những ứng dụng hoặc thông số nào họ sẽ đưa ra cho sự lựa chọn ưu việt trong quá trình thiết kế, trên cả bộ vi điều khiển 8 bit cấp thấp hoặc bộ xử lý ARM7 rất cao cấp.


Vâng, điều đầu tiên trong tâm trí tôi là bạn có thể xử lý các luồng video trực tiếp - nơi Arduino không thể xử lý việc đó. Nó cũng cho phép các thuật toán mã hóa nâng cao hoặc băm (nhanh hơn và dễ dàng hơn trong Arduino) Tôi ngạc nhiên khi Arduino xuất hiện với nền tảng 32 bit nhưng nó chỉ cho bạn thấy - Một số người chỉ muốn làm nhiều hơn là điều khiển rơle. Đó là một ngày tuyệt vời cho Arduino!
Piotr Kula

Bạn sẽ không thực hiện nhiều hơn xử lý video trực tiếp tầm thường trên bộ xử lý <100 MHz, trừ khi bạn thực hiện trong lõi chức năng đặc biệt đính kèm. Và đặc biệt là không có trong ram khá hạn chế trên các thiết bị này. Một điểm thực tế hơn là giá của các chip này không cao hơn đáng kể so với các bộ phận 8 bit; nó thực tế có thể thấp hơn ATMEGA với flash & ram tương đương.
Chris Stratton

3
Theo tôi biết, Parallax Propeller là một chip tùy chỉnh không liên quan đến PIC32. Bất kỳ nguồn để kết nối?
AndrejaKo

Câu trả lời:


12

Đây là một trong những chủ đề có thể trở thành tranh luận cao. Có rất nhiều quan điểm khác nhau, và những điều khác nhau rất quan trọng đối với những người khác nhau. Tôi sẽ cố gắng đưa ra một câu trả lời toàn diện, nhưng hiểu rằng sẽ luôn có một người không đồng ý. Chỉ cần hiểu rằng những người không đồng ý với tôi là sai. (Đùa thôi.)

Tóm tắt nhanh:

Câu trả lời này sẽ là một câu hỏi dài, vì vậy hãy để tôi tóm tắt điều này lên phía trước. Đối với đại đa số mọi người, vụ chip ARM Cortex-M0 / M3 / M4 mới nhất cung cấp giải pháp tốt nhất, các tính năng tốt nhất cho chi phí. Điều này thậm chí còn đúng khi so sánh các MCU 32 bit này với tổ tiên 8 và 16 bit của chúng như PIC và MSP430. M0 có thể được mua với giá dưới 1 đô la Mỹ / mỗi chiếc và M4 với giá dưới 2 đô la Mỹ / chiếc, ngoại trừ các ứng dụng rất nhạy cảm về giá, các giải pháp ARM rất đẹp. M0 có công suất rất thấp và đủ tốt cho hầu hết mọi người. Đối với những người rất nhạy cảm với sức mạnh, MSP430 vẫn có thể là lựa chọn tốt hơn, nhưng M0 đáng để xem xét cho cả những ứng dụng này.

Nếu bạn quan tâm đến một phân tích chuyên sâu hơn thì hãy đọc tiếp, nếu không bạn có thể ngừng đọc ngay bây giờ.

Bây giờ tôi sẽ xem xét từng khu vực và so sánh các MCU khác nhau:

Tốc độ thực hiện

Tất nhiên các MCU 32 bit sẽ nhanh hơn. Họ có xu hướng có tốc độ đồng hồ nhanh hơn, nhưng cũng làm nhiều việc hơn cho mỗi đồng hồ đó. MCU như ARM Cortex-M4 bao gồm các hướng dẫn xử lý DSP và thậm chí có thể có hỗ trợ điểm nổi trong phần cứng. CPU 8 và 16 bit có thể hoạt động trên các số 32 bit, nhưng nó không hiệu quả trong việc đó. Làm như vậy sẽ nhanh chóng tiêu thụ các thanh ghi CPU, chu kỳ xung nhịp CPU và bộ nhớ flash để lưu trữ chương trình.

Dễ phát triển

Theo tôi, đây là lý do có giá trị nhất để sử dụng MCU 32 bit hiện đại-- nhưng cũng được đánh giá thấp nhất. Trước tiên hãy để tôi so sánh điều này với PIC 8 bit. Đây là so sánh trường hợp xấu nhất, nhưng cũng là tốt nhất để minh họa quan điểm của tôi.

Các PIC nhỏ hơn về cơ bản yêu cầu lập trình phải được thực hiện bằng ngôn ngữ lắp ráp. Đúng, có các trình biên dịch C có sẵn cho cả PIC 8 bit nhưng các trình biên dịch đó là miễn phí hoặc tốt. Bạn không thể có được một trình biên dịch vừa tốt vừa miễn phí. Phiên bản miễn phí của trình biên dịch bị tê liệt ở chỗ tối ưu hóa của nó không tốt bằng phiên bản "Pro". Phiên bản Pro có giá xấp xỉ 1.000 USD và chỉ hỗ trợ một họ chip PIC (chip 8, 16 hoặc 32 bit). Nếu bạn muốn sử dụng nhiều hơn một gia đình thì bạn phải mua một bản sao khác với giá 1.000 đô la Mỹ khác. Phiên bản "Tiêu chuẩn" của trình biên dịch thực hiện mức tối ưu hóa trung bình và có giá khoảng 500 USD cho mỗi họ chip. PIC 8 bit bị chậm theo tiêu chuẩn hiện đại và yêu cầu tối ưu hóa tốt.

Để so sánh, có nhiều trình biên dịch C tốt cho ARM MCU miễn phí. Khi có giới hạn, các giới hạn đó thường nằm ở kích thước tối đa của Bộ nhớ Flash được hỗ trợ. Trên các công cụ Codewar Warrior Freescale, giới hạn này là 128Kbyte. Điều này là rất nhiều cho hầu hết mọi người trên diễn đàn này.

Ưu điểm của việc sử dụng trình biên dịch C là bạn không phải bận tâm (nhiều) với các chi tiết cấp thấp của bản đồ bộ nhớ của CPU. Phân trang trên PIC đặc biệt đau đớn và tốt nhất nên tránh nếu có thể. Một ưu điểm khác là bạn không phải bận tâm với mớ lộn xộn khi trao các số 16 và 32 bit trên MCU 8 bit (hoặc số 32 bit trên MCU 16 bit). Mặc dù không khó để thực hiện điều này trong ngôn ngữ lắp ráp, nhưng nó là một nỗi đau ở phía sau và dễ bị lỗi.

Có các trình biên dịch C không ARM khác hoạt động tốt. Trình biên dịch MSP430 dường như làm một công việc hợp lý. Các công cụ Cypress PSoC (đặc biệt là PSoC1) bị lỗi.

Mô hình bộ nhớ phẳng

Một MCU có phân trang RAM / thanh ghi / Flash chỉ là ngu ngốc. Vâng, tôi đang nói về PIC 8 bit. Ngốc, câm, câm. Điều đó đã khiến tôi tắt PIC rất nhiều đến nỗi tôi thậm chí không buồn nhìn vào những thứ mới hơn của chúng. (Tuyên bố miễn trừ trách nhiệm: điều này có nghĩa là PIC mới có thể được cải thiện và tôi chỉ không biết điều đó.)

Với MCU 8 bit, rất khó (nhưng không phải là không thể) để truy cập các cấu trúc dữ liệu lớn hơn 256 byte. Với MCU 16 bit được tăng lên 64 kbyte hoặc kwords. Với MCU 32 bit có dung lượng lên tới 4 gigabyte.

Một trình biên dịch C tốt có thể ẩn rất nhiều thứ này khỏi lập trình viên (còn gọi là Bạn), nhưng ngay cả khi đó nó cũng ảnh hưởng đến kích thước chương trình và tốc độ thực thi.

Có nhiều ứng dụng MCU mà điều này sẽ không thành vấn đề, nhưng tất nhiên có nhiều ứng dụng khác sẽ gặp vấn đề với điều này. Vấn đề chủ yếu là bạn cần bao nhiêu dữ liệu (mảng và cấu trúc) trong RAM hoặc Flash. Tất nhiên, khi tốc độ CPU tăng thì tỷ lệ sử dụng các cấu trúc dữ liệu lớn hơn!

kích cỡ gói

Một số PIC nhỏ và MCU 8 bit khác có sẵn trong các gói thực sự nhỏ. 6 và 8 chân! Hiện tại ARM Cortex-M0 nhỏ nhất mà tôi biết có trong QFN-28. Mặc dù QFN-28 đủ nhỏ cho hầu hết, nhưng nó không đủ nhỏ cho tất cả.

Giá cả

PIC rẻ nhất là khoảng một phần ba giá của ARM Cortex-M0 rẻ nhất. Nhưng đó thực sự là 0,32 đô la Mỹ so với 0,85 đô la Mỹ. Vâng, sự khác biệt giá cả quan trọng đối với một số. Nhưng tôi khẳng định rằng hầu hết mọi người trên trang web này không quan tâm đến sự khác biệt nhỏ về chi phí.

Tương tự như vậy, khi so sánh các MCU có khả năng cao hơn với ARM Cortex-M0 / M3 / M4 thường thì ARM Cortex xuất hiện "gần như đều" hoặc ở trên đầu. Khi bao thanh toán trong những thứ khác (dễ phát triển, chi phí biên dịch, v.v. thì ARM rất hấp dẫn.

Tóm tắt thứ hai

Tôi đoán câu hỏi thực sự là: Tại sao bạn KHÔNG sử dụng ARM Cortex-M0 / M3 / M4? Khi chi phí tuyệt đối là siêu quan trọng. Khi tiêu thụ năng lượng siêu thấp là rất quan trọng. Khi kích thước gói nhỏ nhất được yêu cầu. Khi tốc độ không quan trọng. Nhưng đối với phần lớn các ứng dụng, không có ứng dụng nào trong số này áp dụng và ARM hiện là giải pháp tốt nhất.

Với chi phí thấp, trừ khi có lý do chính đáng để không sử dụng ARM Cortex, thì việc sử dụng nó là hợp lý. Nó sẽ cho phép thời gian phát triển nhanh hơn và dễ dàng hơn với ít đau đầu hơn và lề thiết kế lớn hơn so với hầu hết các MCU khác.

Có các MCU 32-bit Cortex không ARM khác có sẵn, nhưng tôi cũng không thấy bất kỳ lợi thế nào cho chúng. Có nhiều lợi thế khi đi với kiến ​​trúc CPU tiêu chuẩn, bao gồm các công cụ phát triển tốt hơn và đổi mới công nghệ nhanh hơn.

Tất nhiên, mọi thứ có thể và làm thay đổi. Những gì tôi nói là hợp lệ ngày hôm nay, nhưng có thể không có giá trị trong một năm hoặc thậm chí một tháng kể từ bây giờ. Làm bài tập về nhà của riêng bạn.


1
Để truy cập bất kỳ vị trí bộ nhớ nào với ARM, trước tiên người ta phải tải một thanh ghi có địa chỉ trong phạm vi 4K của nó; nhiều thiết bị I / O được phân bổ nhiều hơn 4K không gian địa chỉ, mặc dù nhiều thiết bị chỉ sử dụng một vài địa chỉ riêng biệt. Ngược lại, PIC 18Fxx có thể hoạt động trực tiếp trên hầu hết các địa điểm I / O chỉ với một hướng dẫn duy nhất, độc lập với trạng thái ngân hàng. Các phương tiện mà hầu hết RAM bị đánh trống là khá khó chịu, nhưng đối với một số kiểu đập nhất định (mục đích mà kiến ​​trúc PIC được thiết kế trong những năm 1970) thì kiến ​​trúc PIC hoạt động rất tốt.
supercat

1
BTW, tôi thấy tò mò rằng trong khi bộ vi xử lý 8 bit phổ biến từ những năm 1970 có thể xử lý hiệu quả các cấu trúc dữ liệu 256 byte được căn chỉnh một cách tùy ý và bộ xử lý 16 bit phổ biến có thể hoạt động tốt với các cấu trúc dữ liệu 65.536 byte được căn chỉnh trên 16 -bạn ranh giới hoặc cấu trúc dữ liệu được căn chỉnh tùy ý gần như các bộ xử lý 8 bit và 16 bit mới hơn, lớn hơn khiến cho việc viết mã hiệu quả vượt qua ranh giới trang / ngân hàng trở nên khó khăn.
supercat

@supercat Phạm vi địa chỉ 4K cho hướng dẫn "Offset tức thời LDR / SRT" là đúng, nhưng thường không phải là vấn đề. Tôi không đồng ý với phần còn lại của bình luận của bạn. Nhìn vào các tài liệu M4 Freescale, mỗi thiết bị ngoại vi không chiếm quá 4K phạm vi địa chỉ nên một "con trỏ địa chỉ cơ sở" duy nhất đủ để truy cập tất cả các thanh ghi trong thiết bị ngoại vi đó. Ngoài ra còn có 32 thanh ghi mục đích chung, bất kỳ thanh ghi nào có thể được sử dụng làm con trỏ địa chỉ cơ sở - vì vậy việc truy cập nhanh vào nhiều thiết bị ngoại vi trong cùng một phần mã là tương đối không gây đau đớn.

1
@supercat Điểm thứ hai của bạn chạm vào toàn bộ cuộc tranh luận RISC so với CISC. ARM là CPU RISC, có nghĩa là nó được tối ưu hóa để thực hiện các tác vụ thường xuyên nhất. Các tác vụ không thường xuyên, như truy cập không được phân bổ, yêu cầu nhiều công việc hơn hoặc mất nhiều thời gian hơn (tùy thuộc vào CPU Arch). Tôi xem đây là một điều tích cực, không phải là một điều tiêu cực. Đó là lý do tại sao chúng tôi nhận được MCU 32 bit nhanh với giá của 8 bit cũ hơn. Ngay cả với những điều kỳ quặc này, tôi sẽ lấy một trong những CPU này qua PIC bất cứ ngày nào.

Tôi đã bỏ lỡ; Tôi không có ý ám chỉ rằng một thanh ghi cơ sở không thể xử lý toàn bộ thiết bị ngoại vi, mà thay vào đó, một thanh ghi thường sẽ phải được tải cho mỗi thiết bị ngoại vi (vì vậy người ta không thể đơn giản ví dụ như để một thanh ghi ngồi với IO_BASE_ADDR mọi lúc ). Đối với một số loại mã, việc có thể đặt bit I / O trong một chu kỳ với một lệnh như "bsf LATA, 4", mà không phải tải trước bất kỳ thanh ghi nào, có thể rất tiện dụng. Tôi thích ARM, nhưng ánh xạ I / O trực tiếp trên PIC có thể khá đẹp (quá tệ khi truy cập bộ nhớ khác không tốt lắm).
supercat

3

David Kessner là chính xác. Tôi muốn thêm vào như sau.

  1. MCU 8 bit là MCU duy nhất có sẵn trong các gói PDIP, dễ xử lý và dễ dán trong bảng mẫu.
  2. MCU 32 bit thực sự có thể sử dụng ít năng lượng hơn MCU 8 bit. Không nhất thiết là MCU <20 MHZ 8 bit sẽ sử dụng ít năng lượng hơn so với Cortex M4.
  3. MCU 8 bit thường được sử dụng bởi những người có sở thích thường không yêu cầu nhiều từ MCU. Có thể vài trăm dòng mã C đơn giản.

Tôi đồng ý rằng những ngày này có rất ít lý do để không sử dụng MCU 32 bit. Tôi sẽ chỉ sử dụng chúng [MCU 8 bit] vì 2 lý do: Tôi thích sự dễ dàng của gói PDIP (không yêu cầu hàn); Tôi thường không cần nhiều sức mạnh / độ phức tạp hơn những gì MCU 8 bit có thể cung cấp.

Công cụ thỏa thuận thực sự là các công cụ có sẵn.


Để tạo mẫu, có các ổ cắm cho LQFP, hoạt động khá tốt. Và tất nhiên bạn có thể hàn LQFP bằng tay, chỉ cần thực hành một chút. QFN, DFN và BGA Tôi sẽ không hàn bằng tay, nhưng sau đó mỗi MCU 32 bit cấp thấp duy nhất trên thị trường đều đi kèm với LQFP.
Lundin

1

Chúng tôi sử dụng MCF52259 Freescale tương đối không thời trang, MCU có khả năng 32 bit ~ 80Mhz.

Lý do / quá trình suy nghĩ cho sự lựa chọn là:

  • Nó đã thay thế một thiết bị M.Core 32 bit, do đó việc chuyển mạng tương đối đơn giản
  • Điều đó cũng có nghĩa là chúng ta có thể gắn bó với IDE hiện tại (CodeWar Warrior)
  • Chúng tôi cần rất nhiều IO: Điều khiển bước / hướng trên 3 động cơ bước, 4 kênh PWM, 3 UART và I2C và SPI.
  • Có rất nhiều điều đang diễn ra (xem điểm cuối cùng) và một số điều cần phải xảy ra kịp thời, vì vậy chúng tôi cần chắc chắn có đủ chu kỳ CPU để hoàn thành mọi việc.
  • Mã kế thừa đã va chạm với kích thước flash 256k và RAM 32k của M.Core, do đó, việc nhân đôi đèn flash & RAM giúp cuộc sống dễ dàng khởi động và chạy nhanh.

Ngày nay, việc tiết kiệm / mở rộng khả năng của phần cứng (lưu trữ, tốc độ, IO, v.v.) sẽ hiệu quả hơn về chi phí để tiết kiệm thời gian phát triển có giá trị để nén vào MCU rẻ hơn / nhỏ hơn trừ khi không gian hoặc quyền lực là vấn đề lớn.

Trong trường hợp của chúng tôi, thiết bị này có giá trị gấp đôi so với M.Core với giá chỉ bằng một nửa, đi đến MCU rẻ hơn sẽ chỉ tiết kiệm từng xu cho mỗi bảng nhưng tốn rất nhiều thời gian phát triển và hạn chế tiềm năng phát triển trong tương lai mà không thay đổi MCU một lần nữa.

Nếu chúng ta đang xây dựng một triệu bảng, sẽ đáng để thực hiện bài tập kỹ thuật chi phí để giảm bớt mọi thứ, nhưng vì nó không có giá trị thời gian phát triển.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.