Có sự khác biệt nào giữa việc sử dụng mô-đun SPI tích hợp và đập bit không?


Câu trả lời:


33

Một thiết bị ngoại vi bộ điều khiển SPI thực tế trong MCU thường có thể chạy nhanh hơn nhiều so với đập vào giao diện. Tất nhiên, nó phụ thuộc vào MCU, nhưng tôi sẽ không ngạc nhiên khi thấy bộ điều khiển SPI chạy ở tốc độ 30+ MHz, trong khi tiếng đập bit có thể bị giới hạn ở khoảng 1 MHz (nếu bạn may mắn).

Nhưng còn nhiều điều hơn thế. Khi đập bit, MCU đang bận đập nó. Nó đang dịch chuyển dữ liệu ra và xoay các dòng GPIO. Có nghĩa là, nó không thể làm bất cứ điều gì khác. Khi sử dụng bộ điều khiển SPI, bộ điều khiển bận rộn làm tất cả những thứ đó và MCU có thể tự do làm những việc khác.

Vì vậy, với bộ điều khiển SPI thực tế, quá trình chuyển SPI thực tế nhanh hơn nhiều và MCU lấy lại một số chu kỳ mà nó có thể sử dụng để làm những việc khác.


11

Không có sự khác biệt về các điều khoản mà bạn có thể đạt được cùng một kết quả bằng cả hai phương pháp nhưng có một vài lý do tại sao bạn lại chọn phương thức này.

Sử dụng thiết bị ngoại vi SPI sẽ giúp bộ xử lý không phải quan tâm đến việc tạo thời gian để bit đập vào các chân I / O, cho phép nó thực hiện các tác vụ tính toán khác và đơn giản hóa việc lập trình CPU của bạn. Bởi vì thiết bị ngoại vi được triển khai trong phần cứng, nó sẽ chạy nhanh hơn và sử dụng ít năng lượng hơn so với I / O đập bit. Có thể có trường hợp bạn muốn bit I / O để giao tiếp với SPI nếu ứng dụng của bạn yêu cầu bạn chọn bộ xử lý không có thiết bị ngoại vi SPI. Vì lý do tỉnh táo, tôi khuyên bạn nên tránh điều đó trừ khi thực sự cần thiết.


Lý do tỉnh táo là rác rưởi. Thường thì việc thiết lập phần cứng SPI thành chính xác cấu hình mà bạn yêu cầu mất nhiều thời gian hơn để đọc biểu dữ liệu ngoại vi SPI thay vì chỉ viết mã chính SPI và do đó chỉ phải đọc biểu dữ liệu thiết bị phụ.
Olin Lathrop

Tôi sẽ thừa nhận rằng tôi là một người theo chủ nghĩa giật gân một chút với nhận xét tỉnh táo của mình nhưng ý định (không được thừa nhận) là khi độ phức tạp của ứng dụng tăng lên, do đó, gánh nặng của việc đảm bảo rằng toàn bộ hệ thống sẽ tiếp tục hoạt động theo thời gian dự định. Tôi đã thực hiện cả hai cách và tôi biết rằng tôi thích sử dụng thiết bị ngoại vi hơn, ngay cả khi tôi phải mất thêm vài phút để đọc bảng dữ liệu.
Amoch

6

SPI là một giao diện đồng bộ , với chủ điều khiển đồng hồ. Điều đó có nghĩa là nếu bạn là bậc thầy, bạn có thể chọn tốc độ và thời gian của đồng hồ. Các thiết bị nô lệ sẽ có một số giới hạn trên về tần số đồng hồ mà chúng có thể xử lý, nhưng thường không quan tâm đến việc đồng hồ chậm như thế nào dưới mức đó. Cụ thể hơn, thường có thời gian tối thiểu mà mỗi nô lệ cần để xem đồng hồ ở trạng thái cao và thấp trước khi có thể chuyển đổi lại và sẽ có một số thiết lập dữ liệu tối thiểu và giữ giới hạn trên đường dữ liệu xung quanh cạnh đồng hồ trên đó nô lệ đọc dòng dữ liệu.

Bởi vì điều này, việc cấy ghép một SPI master trong firmware thực sự khá dễ dàng. Tôi đã thực hiện việc này thường xuyên để thuận tiện cho việc sử dụng các chân nhất định, khi không có phần cứng SPI tích hợp hoặc không có sẵn cho mục đích đó vì bất kỳ lý do gì. Làm một chủ SPI trong phần sụn là dễ dàng như nó được.

Nhiều thiết bị nô lệ SPI khá nhanh, do đó, thường thì thời gian thiết lập và thời gian thiết lập tối thiểu được đáp ứng đơn giản bằng cách đảm bảo mỗi thiết bị có ít nhất một chu kỳ lệnh. Trong trường hợp đó, mã rất ngắn và nhanh. Trong một số trường hợp, một thiết bị nô lệ có thể yêu cầu hai hoặc ba chu kỳ hướng dẫn cho mỗi pha đồng hồ, nhưng điều đó thực sự không khó để đảm bảo. Vòng lặp bit SPI mức thấp yêu cầu thực hiện một số dịch chuyển của bit đầu ra tiếp theo vào vị trí, lấy bit đầu vào và kiểm tra bộ đếm vòng lặp. Bạn thường có thể đáp ứng hai hoặc ba yêu cầu về thời gian tối thiểu theo chu kỳ chỉ bằng cách sắp xếp khi bạn lái xe và lấy mẫu các dòng với một số chi phí khác được chèn vào đúng chỗ. Nếu tốc độ là quan trọng, bạn có thể sử dụng bộ tiền xử lý trình biên dịch để viết một vòng lặp không được kiểm soát. Với những kỹ thuật như thế này,

Có một số lợi thế để làm chủ SPI trong phần sụn. Phần cứng SPI đôi khi hơi vô lý trong cách nó có thể được cấu hình. Luôn luôn có vấn đề chính xác những gì được cho là xảy ra ngay lập tức khi lựa chọn nô lệ được khẳng định. Là bit đầu tiên được ghi vào các dòng dữ liệu sau đó? Điều gì sẽ xảy ra nếu đồng hồ bắt đầu ở mức thấp và các đường dữ liệu được cho là chốt ở cạnh rơi xuống? Đôi khi điều này quan trọng, đôi khi nó không. Với một chủ SPI phần sụn, bạn có thể dễ tha thứ hơn và có thể sử dụng cùng một thói quen để giao tiếp với các nô lệ khác nhau. Ví dụ: bạn có thể đảm bảo rằng dòng dữ liệu MOSI (Master Out Slave In) ổn định trên cả hai cạnh của đồng hồ. Phần cứng SPI thường sẽ không làm điều đó, vì vậy phần cứng như vậy sẽ cần phải được cấu hình lại tùy thuộc vào loại nô lệ mà nó đang liên lạc vào thời điểm đó.

Một ưu điểm khác của chủ SPI phần sụn là bạn có thể chọn số bit tùy ý trên mỗi chuỗi SPI. Phần cứng thường được giới hạn ở bội số của 8 bit. Hầu hết các thiết bị được thiết kế để cho phép chuyển toàn bộ byte, nhưng thường không yêu cầu chúng. Ví dụ, A / D 10 bit có thể sẽ gửi 10 bit dữ liệu trước, sau đó gửi 0 hoặc rác sau đó nếu bạn tiếp tục theo dõi nó. Nếu sử dụng SPI phần cứng, bạn sẽ buộc phải chuyển 16 bit và che giấu rác. Mọi thứ sẽ hoạt động tốt, nhưng một chủ SPI phần sụn thực sự có thể nhanh hơn phần cứng trong trường hợp này do nó chỉ làm giảm tối thiểu 10 bit cần thiết.

Ưu điểm chính của các bậc thầy SPI phần cứng là phần sụn có thể bắt đầu chuyển byte, sau đó tắt và làm một cái gì đó khác. Đồng hồ cũng thường có thể nhanh hơn thậm chí một vòng lặp firmware không được kiểm soát có thể đạt được. Lưu ý rằng mặc dù cả hai ưu điểm này có thể quan trọng trong một số trường hợp nhất định, nhưng chúng thường không liên quan. Hầu hết mã SPI sử dụng phần cứng để chuyển một byte sau đó ngay lập tức đi vào một vòng chờ để phần cứng hoàn tất việc chuyển. Cũng kiểm tra các yêu cầu thời gian nô lệ một cách cẩn thận. Các thiết bị SPI thường nhanh như toàn bộ, nhưng có những trường hợp bạn cần làm chậm phần cứng để phù hợp với tốc độ tối đa mà nô lệ có thể xử lý.

Đó là tất cả từ quan điểm tổng thể. Nói tóm lại, thường có ít lợi thế khi sử dụng phần cứng SPI làm chủ, và thậm chí một vài lợi thế khi không sử dụng nó đôi khi. Tuy nhiên, đó là tất cả khác nhau cho nô lệ. Vì chủ nhân điều khiển đồng hồ, nô lệ phải sẵn sàng cho bất cứ điều gì chủ nhân làm bất cứ khi nào chủ nhân làm điều đó. Các yêu cầu về thời gian thường khá ngắn so với thời gian hướng dẫn, do đó, việc có phần cứng triển khai nô lệ SPI thường là điều bạn muốn.

Bạn có thể thực hiện nô lệ SPI trong phần sụn, nhưng thật khó khăn, bạn phải đếm chu kỳ và độ trễ một cách cẩn thận và cuối cùng bạn thường thực hiện một số tập hợp con của giao thức mà bạn biết chủ nhân cụ thể của mình sử dụng. Ví dụ, có lần tôi phải thiết kế một bộ tương đương kỹ thuật số của bảng điều khiển analog cũ (họ muốn các tính năng bổ sung không thể được thực hiện một cách hợp lý trong tương tự, và họ muốn thứ gì đó nhỏ hơn, rẻ hơn để sản xuất và ổn định hơn). Bảng này giao tiếp với phần còn lại của hệ thống qua xe buýt SPI. Bảng tương tự cũ có D / A hai kênh để đặt các giá trị điều khiển và A / D hai kênh để đọc lại các giá trị đo được. Việc thực hiện cả hai trong một bộ xử lý là khó khăn và nó bao gồm việc tìm ra tập hợp con nào của giao thức D / A và A / D SPI phần cứng mà chủ hiện có thực sự sử dụng. Nó cũng đã hình dung ra một bộ xử lý có thể chạy nhanh hơn đáng kể so với tốc độ xung nhịp SPI. Cuối cùng, tôi đã sử dụng ba ngắt, một cho mỗi lần chọn nô lệ và một cho cạnh tăng của dòng đồng hồ. Điều cuối cùng cần thiết là ngắt ưu tiên cao nhất trong hệ thống nếu không yêu cầu độ trễ không thể được đáp ứng.

Dù sao, điểm chung là một chủ SPI phần mềm rất dễ, nhỏ, nhanh và linh hoạt, và có rất ít lý do để né tránh làm một. Mặt khác, đối với một nô lệ bạn thực sự muốn phần cứng, hoặc bạn phải thức dậy và suy nghĩ rất kỹ về thời gian, độ trễ và những thứ tương tự.


Bạn đã tìm thấy bất kỳ triển khai nô lệ vi điều khiển nào có thể hoạt động như các thiết bị SPI phần cứng thông thường (ví dụ: cho phép chủ nhân đưa ra một lợi thế về CS và đọc trạng thái bất cứ lúc nào và sử dụng CS để đánh dấu ranh giới lệnh? thậm chí báo cáo xem có cạnh CS giữa byte hiện tại và byte trước hay không
supercat

@supe: Vâng, đó là một vấn đề. Phần cứng SPI Slave thường bỏ qua dữ liệu đồng hồ và đầu vào và giữ cho dòng dữ liệu đầu ra ở mức trở kháng cao khi không chọn được chip, nhưng nó thường không cho bạn biết ranh giới chọn chip ở đâu. Ít nhất là với phần cứng PIC SPI mà tôi nhớ sử dụng, bạn sẽ phải thiết lập ngắt riêng của mình trên chip chọn cho điều đó.
Olin Lathrop

Tôi đã tự hỏi nếu bạn biết bất kỳ triển khai phong nha. Tôi đoán là không. Vấn đề với việc sử dụng ngắt phần cứng trên dây chọn là nếu quá trình chuyển đổi xảy ra trên dây chọn ngay sau khi một byte được gửi, nô lệ có thể gặp khó khăn trong việc giải quyết liệu nó xảy ra trước hay sau byte đang nghi vấn. Tôi thấy khó hiểu khi hầu hết mọi chip đều có triển khai nô lệ SPI, nhưng dường như không ai trong số chúng thực sự có thể được sử dụng như một thiết bị nô lệ phần cứng SPI điển hình. Tình huống có phần giống như cổng nô lệ của bộ xử lý trên PIC so với 8048.
supercat

Cổng nô lệ của bộ xử lý 8048 có một chân địa chỉ; khi dữ liệu được ghi bên ngoài tới 8048, 8048 sẽ khóa trạng thái của pin đó và làm cho nó có sẵn với mã của nó (thông thường là byte đầu tiên của lệnh sẽ được ghi vào một địa chỉ và tham số hoặc dữ liệu cho địa chỉ khác). Việc đọc một địa chỉ sẽ mang lại bất cứ mã 8048 nào đặt ở đó, nhưng một số bit được đọc từ địa chỉ kia được tạo bởi phần cứng 8048 để cho biết liệu nó có sẵn sàng để đọc hoặc ghi dữ liệu hay không.
supercat

+1 để chỉ ra sự khác biệt là đập bit chủ (dễ) và nô lệ (khó hơn nhiều).
tcrosley

1

Nó phụ thuộc vào những gì bạn đang làm SPI cho. Nếu sở thích của bạn nhận được tốc độ dữ liệu cao nhất, phần cứng luôn nhanh hơn bitbanging (ví dụ: chip arm cortex ở tuổi thiếu niên 3 Tôi có thể đẩy dữ liệu ra ở tốc độ 22Mbps bằng cách sử dụng hỗ trợ SPI phần cứng, so với ~ 4,5Mbps với bitbanging (nó cũng có thể xử lý số bit tùy ý trên mỗi lần truyền từ 3-16 - hữu ích khi gửi dữ liệu ra trong khối 12 bit cho các bộ điều khiển led nhất định!)). Trên avrs 16Mhz, sự khác biệt là cực ít, tốc độ dữ liệu cao nhất với phần cứng dường như cao 4 / thấp 5Mbps, trong khi bitbanging là khoảng 2,3Mbps).

Ngoài ra, nếu bạn sử dụng hỗ trợ phần cứng, một lần nữa, tùy thuộc vào vi điều khiển được đề cập, bạn có các tùy chọn có sẵn cho bạn để sử dụng bộ điều khiển DMA để chuyển dữ liệu của bạn ra ngoài, để mã của bạn quay trở lại những thứ khác, có khả năng thú vị hơn là giữ trẻ dữ liệu viết.

Tất cả những điều trên phụ thuộc vào việc SPI phần cứng có hay không thậm chí là một tùy chọn.


0

Nếu bạn bấm SPI, bạn không thể sử dụng ngắt SSP để xử lý liên lạc. Điều này không quan trọng đối với SPI cho nhiều mục đích sử dụng


1
Không có bộ xử lý cụ thể nào được đề cập, vì vậy "ngắt SSP" là một thuật ngữ vô nghĩa trong bối cảnh này.
Olin Lathrop
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.