SPI có an toàn để bị gián đoạn?


17

Tôi đang ghi vào thẻ nhớ microSD trong phần sụn của mình, nhưng đó là nhiệm vụ ưu tiên thấp nhất, vì vậy nó có thể bị gián đoạn bởi các tác vụ khác trong khi nó đang ở giữa đọc / ghi.

Bây giờ, giả sử tôi đã liên lạc với thẻ nhớ microSD này bằng UART. Vấn đề trong quá trình đọc sẽ là phần cứng RX FIFO sẽ bị tràn, do đó độ trễ tối đa tôi có thể nỗ lực sẽ là (kích thước FIFO × byte / giây) và trong khi ghi sẽ không có vấn đề gì, vì đầu kia sẽ chỉ đợi cho đến khi tôi gửi nhân vật tiếp theo.

Làm thế nào để nó hoạt động bây giờ tôi đang sử dụng SPI? Có phải tình huống tương tự như khi viết không thành vấn đề, và đối với việc đọc nó phụ thuộc vào kích thước SPI FIFO?

Câu trả lời:


22

Phần lớn các thiết bị SPI sẽ hoàn toàn hài lòng ở bất kỳ tốc độ dữ liệu nào dưới mức tối đa được chỉ định. Người ta có thể thực hiện một phần của giao dịch, nghỉ ngơi bất cứ lúc nào, quay lại vài năm sau đó và hoàn thành nó. Với điều kiện là không có trục trặc trên đồng hồ, chọn hoặc đường dây điện, giao dịch sẽ được hoàn thành bình thường.

Có ba lưu ý chính cần lưu ý:

  1. Nói chung, một khi giao dịch đã bắt đầu trên xe buýt SPI, không có dây nào trên xe buýt có thể được sử dụng cho bất kỳ mục đích nào khác cho đến khi giao dịch đó hoàn tất. Nói chung, điều này có nghĩa là một ngắt có thể không sử dụng xe buýt SPI trừ khi đó là điều duy nhất sẽ sử dụng xe buýt (đôi khi có thể sử dụng xe buýt để sử dụng độc quyền xe buýt và cho chính chương trình để sử dụng độc quyền vào thời điểm khác). Một số thiết bị bao gồm các chân đặc biệt để cho phép chúng "phớt lờ" xe buýt ở giữa một giao dịch, nhưng ngay cả với các tính năng như vậy, tôi không khuyên bạn nên cố gắng tạm dừng giao dịch SPI với một thiết bị, thực hiện giao dịch với một số thiết bị khác, và sau đó để mã cơ bản tiếp tục giao dịch của nó với lần đầu tiên. Tốt hơn để có ngắt sử dụng một bus SPI riêng.
  2. Một số thiết bị có thể hoạt động kỳ quặc nếu giao dịch diễn ra quá lâu. Ví dụ, một số chip đồng hồ thời gian thực không đệm hai lần đăng ký thời gian / ngày mà thay vào đó, hãy chốt bất kỳ sự kiện "tiến bộ thời gian" nào sẽ xảy ra trong một giao dịch và áp dụng chúng sau khi giao dịch hoàn tất. Nếu một giao dịch mất quá nhiều thời gian để đến sự kiện tạm ứng lần thứ hai, sự kiện thứ hai sẽ bị bỏ qua, khiến đồng hồ bị trượt theo khoảng thời gian đó. Tôi thực sự thấy không có lý do gì để thiết kế chip theo kiểu như vậy (ngay cả khi người ta không muốn chi phí cho việc đệm dữ liệu gấp đôi, chỉ định rằng phần mềm chịu trách nhiệm đảm bảo sự gắn kết của nó sẽ rẻ hơn so với việc thêm logic "trì hoãn cập nhật", và sẽ giảm thiểu khả năng xáo trộn đồng hồ), nhưng những con chip như vậy tồn tại.
  3. Có một vài thiết bị sử dụng tín hiệu đồng hồ và dữ liệu, nhưng sử dụng "tạm dừng" để biểu thị khung. Ví dụ gần đây nhất mà tôi gặp phải là một chuỗi đèn LED điều khiển trên mỗi bóng đèn. Tôi không đặc biệt thích những thiết kế như vậy (người ta cũng có thể chỉ ra việc tạo khung bằng cách sử dụng ba cạnh tăng liên tiếp trên dây dữ liệu mà không có đồng hồ can thiệp nào) nhưng một lần nữa, các thiết bị như vậy vẫn tồn tại.

Mặc dù một số loại truyền thông nhất định yêu cầu sử dụng thời gian cụ thể, hiếm khi có lý do nào để các thiết bị SPI yêu cầu chúng. Tuy nhiên, người ta phải lưu tâm đến sự tồn tại của các thiết bị đó.


3
+1 Tốt đẹp! Hoàn toàn đồng ý với tất cả các ý kiến ​​/ sự thất vọng của bạn. Nhìn thấy nó quá nhiều lần là tốt.
DrFriedParts

11

Kiểm tra một bản sao của thông số kỹ thuật (mà tôi không thể trích dẫn vì lý do bản quyền / NDA), tốc độ SPI được chỉ định bắt đầu từ 0Hz ngụ ý hoạt động tĩnh là ổn. Trong SPI, bạn chỉ nhận lại dữ liệu trong khi thiết bị đang được đồng hồ hóa, vì vậy nếu sử dụng SPI phần cứng, bạn sẽ chỉ nhận được một cái gì đó sau khi dữ liệu (ngay cả khi 0 / không quan tâm) đã được gửi. Vì vậy, về mặt này, nó khác với UART nơi bạn có thể nhận lại dữ liệu không mong muốn bất cứ lúc nào.


Vì vậy, lo lắng duy nhất của tôi là thẻ MicroSD có một số loại tích hợp hết thời gian, nhưng bản thân SPI không?
Muis

5
Theo thông số kỹ thuật từ tất cả những gì tôi có thể thấy, không nên có bất kỳ hình thức hết thời gian nào trên thẻ SD, vì vậy đừng thực sự thấy bạn nên có bất kỳ vấn đề nào. Cách đây nhiều năm, tôi đã viết một số mã tùy chỉnh và trong khi gỡ lỗi là một bước thông qua mã để lại khoảng 10 giây trở lên giữa các hoạt động SPI và tất cả đều ổn.
PeterJ

1
+1, Có thể chạy SPI xuống 0 Hz rất hữu ích để biết cách gỡ lỗi. Cảm ơn.
Anindo Ghosh

1
Đáng lưu ý rằng trên một số thiết bị SPI, đầu ra dữ liệu chỉ có thể thay đổi trên một cạnh đồng hồ cụ thể, nhưng trên một số thiết bị khác, đầu ra dữ liệu đôi khi có thể thay đổi không đồng bộ; điều này đặc biệt phổ biến với một bit "bận rộn". Trên một số chip, nếu một trong số đó đã hết trạng thái của bit "bận" và nó vẫn ở đầu ra khi phần đó không bận, thì đầu ra sẽ thay đổi không đồng bộ. Trên một số chip khác, trạng thái "bận" được báo cáo sẽ không thay đổi cho đến khi nó được đặt lại. Cả hai thiết kế đều có những ưu điểm và nhược điểm, vì vậy thật hữu ích khi biết rằng cả hai loại thiết kế đều tồn tại.
supercat
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.