SPI có nhanh hơn đáng kể so với đập không?


8

Tôi có một dự án dựa trên pic 18f4550. Để ghi vào một thanh ghi thay đổi '595, có một lợi thế khác biệt khi sử dụng spi so với các chân io thông thường không? Tôi nghe nói rằng spi nhanh hơn, nhưng tôi không biết làm thế nào. Liệu nó có sử dụng đồng hồ khác, nhanh hơn so với phần còn lại của chip, hay đơn giản là nó hiệu quả hơn? Tôi có thể bit ra một byte thông qua các chân io thông thường trong một số lượng nhỏ các hướng dẫn. Spi có sử dụng ít năng lượng xử lý không? Tôi sẽ chuyển ra khá thường xuyên trong các tính toán khá căng thẳng, vì vậy tôi muốn càng nhiều chu kỳ càng tốt dành riêng cho quá trình của tôi và không chuyển ra ngoài.

Lý do chính của tôi không muốn sử dụng spi là bố cục hiện tại của tôi sẽ khiến việc truy cập các chân được yêu cầu trở nên khó khăn hơn một chút vì tôi đã sử dụng một vài trong số chúng cho những thứ khác và sẽ phải xáo trộn mọi thứ xung quanh. Tôi muốn tìm hiểu những lợi ích có được trước khi tôi bắt đầu xé toạc mọi thứ và di chuyển chúng xung quanh.


5
Bạn có thể làm SPI bằng cách đập bit.
starblue

Câu trả lời:


17

Giả sử bạn đang so sánh một "động cơ" nối tiếp ngoại vi hoặc đồng bộ trong vi mô để tạo ra cùng một chuỗi thông qua "bit-banging", thì đúng vậy, nó có xu hướng nhanh hơn một chút, nhưng quan trọng hơn là bộ xử lý có thể xử lý toàn bộ byte thiết bị ngoại vi để gửi và sau đó làm những việc khác trong khi nó được truyền đi. Trong trường hợp đập bit, bộ xử lý có xu hướng bị trói trong quá trình truyền (mặc dù vi có xu hướng là chủ và hầu hết các thiết bị ngoại vi hoàn toàn tĩnh, bạn có thể chấp nhận tạm dừng byte giữa để phục vụ ngắt hoặc thậm chí thăm dò ý kiến điều - ADC nối tiếp theo giao diện và các tác vụ khoảng thời gian mẫu là những ví dụ đáng chú ý về các ngoại lệ).

Trên MCU có khả năng cao hơn, thậm chí có thể lập trình bộ điều khiển DMA để thực hiện chuyển nhiều byte từ bộ nhớ thông qua công cụ SPI mà không cần chú ý thêm từ bộ xử lý, đặc biệt là nếu chỉ có dữ liệu theo một hướng là quan trọng.

Nhưng nhiều dự án điều khiển vi mô cuối cùng được tối ưu hóa cao cho nhiệm vụ của họ; nếu bạn có thể sử dụng các chu kỳ và chịu được việc giảm tốc độ, thì hãy làm phức tạp phần mềm của bạn để có thể sử dụng bất kỳ GPIO nào làm cho trình dọn dẹp bố cục vật lý không phải là một lựa chọn không phổ biến.


Vâng cái này ^. Như Chris đề cập, ưu điểm lớn nhất của việc sử dụng các thiết bị ngoại vi phần cứng là bạn có thể chuyển một byte dữ liệu từ luồng sang thiết bị ngoại vi và được thông báo qua ngắt nếu kết thúc việc chuyển nó ra và sẵn sàng cho một byte khác. Điều này giải phóng việc sử dụng CPU của bạn cho những thứ khác trong khi byte bị dịch chuyển - có thể là thời gian sống trong chu kỳ máy với tốc độ truyền của các giao thức nối tiếp này.
Jon L

3
Không phải là một đời cho SPI. Nếu bạn đang nói về tốc độ, thì có thể bạn đang chạy SPI ở tốc độ 10 MHz, chỉ có 10 hướng dẫn PIC ở tốc độ tối đa. Đó không phải là một tuổi. Chỉ cần đủ thời gian để sẵn sàng byte tiếp theo của bạn. Nó chỉ đủ thời gian để phục vụ một ngắt.
Rocketmagnet

2
Có thể công bằng khi nói rất nhiều phụ thuộc vào tốc độ truyền dự kiến ​​/ yêu cầu, chưa được nêu. Tuy nhiên, như tôi đã chỉ ra, nếu micro là chủ, nó có thể bị trễ khi gửi byte tiếp theo, với điều kiện ứng dụng có thể chịu được sự bất thường / giảm thông lượng.
Chris Stratton

1
@Rocketmagnet, tôi đứng sửa. SPI nhanh hơn rất nhiều so với tôi nghĩ - tôi đoán tôi đã gộp nó với các giao thức nối tiếp chậm hơn như UART (trong đó 9600 baud là ~ 10 kHz).
Jon L

1
Cũng lưu ý rằng SPI master tương đối dễ dàng để bit bang. SPI nô lệ có thể khó hơn một chút vì các lựa chọn và chuyển đổi xung nhịp của chip cần phải được định thời và xử lý cụ thể (như một chân ngắt ngoài). Tôi thường xuyên sử dụng phong cách bit bang chủ SPI trong các dự án của mình, đặc biệt là nếu tôi không cần hiệu suất cao nhưng muốn có một bảng sạch (cũng tốt cho khắc tại nhà). Cũng lưu ý rằng đó là cách làm phổ biến để làm ngược lại: chuyển dữ liệu vào các thanh ghi thay đổi (HC595, v.v.) bằng SPI và GPIO (chốt chốt).
Hans

10

Ưu điểm của bit-banging:

  • Kiểm soát tuyệt đối giao thức.
  • Nếu thời gian để thực hiện các hướng dẫn trên vi điều khiển nhanh hơn tốc độ baud của SPI, thì có thể nhanh hơn, nhưng điều này là không thể. Nó sẽ mất một tốc độ rất thấp SPI baudrate với một vi điều khiển tốc độ tương đối cao.
  • Có thể có độ trễ nhỏ hơn ngắt SPI.
  • Lựa chọn chân.

Nhược điểm của bit-banging:

  • Yêu cầu nhiều mã hơn để xử lý -Theo thời gian - Lấy mẫu có thể xác định được các bit nhận được - Ranh giới khung xử lý * Mỗi phân đoạn mã ở trên tiêu tốn thời gian có thể dành để chạy mã khác.

Ưu điểm của SPI:

  • Đăng ký cấu hình xử lý thời gian baudrate, lấy mẫu bit và xử lý số đếm khung
  • Hầu hết các bộ vi điều khiển có SPI đều có vectơ ngắt chuyên dụng cho từng thiết bị ngoại vi SPI (Kiểm tra kỹ vi của bạn!)
  • Sau khi được cấu hình, chỉ cần kiểm tra xem bộ đệm SPI TX / RX có trống / đầy và ghi / đọc một byte không.
  • Nếu DMA có sẵn, SPI có thể truyền các bộ đệm lớn dữ liệu liền kề mà không có bất kỳ sự can thiệp nào của phần mềm.

Nhược điểm của SPI:

  • Một thiết bị ngoại vi bổ sung để tìm hiểu và định cấu hình (Điều đó có thực sự bất lợi không?)
  • Yêu cầu thêm chân hoặc ghép kênh pin
  • Chi phí phụ (có xu hướng không đáng kể với các bộ vi điều khiển hiện tại)
  • Tôi đã gặp vấn đề về tiếng ồn với SPI, nhưng những vấn đề đó là trên bo mạch nguyên mẫu tốc độ tương đối cao (10 MHz)
  • Lựa chọn pin hạn chế cao

Đối với tôi, những lợi thế của bit-banging là không đáng kể so với những lợi thế của SPI. Những nhược điểm của bit-banging lớn hơn nhiều so với SPI. Ba lý do chính tôi có thể thấy khi chọn bit-banging là vì

  1. Giao thức tốc độ thấp tùy chỉnh
  2. Nếu giao tiếp ở tốc độ thấp và phần còn lại của ứng dụng có yêu cầu tính toán thấp
  3. Hoặc nếu giao tiếp là tốc độ thấp và lựa chọn pin là một vấn đề lớn

8

Trên PIC, việc triển khai kiểu SPI bit-bang thông thường mất khoảng năm chu kỳ mỗi bit; với một chút công việc trên các bộ phận 18Fxx, người ta có thể cắt nó xuống còn khoảng bốn (với chi phí khoảng ba chu kỳ cho mỗi byte chi phí phụ). Thời gian đó ngoài bất kỳ thời gian nào cần thiết để tìm nạp dữ liệu (thường là ba chu kỳ trên mỗi byte). Vì vậy, con số khoảng 40-43 chu kỳ trên mỗi byte. Sử dụng SPI phần cứng, tốc độ được cải thiện thành hai chu kỳ mỗi bit cộng với một vài chu kỳ bổ sung cho mỗi byte (một số khác có thể xử lý chuyển ngược lại, nhưng PIC tôi đã thấy không thể) và trong khi SPI đang gửi một byte bộ xử lý có thể tìm nạp tiếp theo, cho phép thời gian tổng thể khoảng 18 chu kỳ / byte - tăng tốc độ khoảng 2,5 lần.


0

Đối với bit banging (BB) bạn quên đề cập đến:

  1. Liên kết bộ xử lý trong thời gian giao tiếp. (SPI tải các thanh ghi sau đó quay lại để bạn làm việc khác)
  2. Ngắt nền có thể can thiệp nghiêm trọng vào mã BB, ​​khiến nó chỉ hữu ích trong các thiết kế luồng đơn, hãy nhớ rằng mã BB phải chú ý 100% để xử lý giao thức.
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.