SRAM mà hai chip có thể đọc / ghi


9

Tôi đang tìm kiếm một thiết bị SRAM nhỏ, 32KB hoặc hơn để hai MCU có thể đọc hoặc viết (ở hai thời điểm khác nhau; tôi không cần đọc / ghi đồng thời.) Cũng tốt nếu sử dụng giao diện nối tiếp.

Vấn đề tôi đang cố gắng giải quyết là gửi dữ liệu giữa hai thiết bị mà không cần thiết bị kia phải tạm dừng để nhận được điều này. Tôi sẽ chuyển một mẫu âm thanh vào bộ đệm, sau đó chip khác, theo yêu cầu, sẽ đọc âm thanh ra và làm gì đó với nó.

Tôi đã tìm thấy các SRAM nối tiếp như 23A256 / 23K256 của Microchip, tuy nhiên, chúng dường như có một giao diện nối tiếp duy nhất. Có cách nào để có hai chip truy cập này không?

Ngoài ra, thiết bị nhận chỉ có bộ nhớ dữ liệu 2KB (tối đa), do đó, có vẻ như sử dụng DMA hoặc một số cơ chế truyền tương tự thông qua I2C hoặc giao diện khác sẽ không hoạt động.

Câu trả lời:


10

Bạn không cần RAM cổng kép hoặc thậm chí RAM nối tiếp với hai giao diện; Đối với SPI, nó phức tạp hơn một chút, nhưng I2C cho phép nhiều bậc thầy "ra khỏi hộp". Dù bằng cách nào, phần mềm của bạn sẽ phải theo dõi các điều kiện xe buýt để xem nó có bị mất xe buýt không và nếu có, hãy chờ cơ hội khác.

Đối với SPI, các dòng MOSI, CS và CLK phải được xác định ba (hoặc bộ thu mở) với các điện trở kéo lên để giữ cho các dòng không bị nổi. Bạn cũng sẽ cần một số loại trọng tài xe buýt. Điều này có thể đơn giản như một GPIO duy nhất giữa hai chủ để cái có mức ưu tiên cao hơn báo hiệu cho chủ có mức độ ưu tiên thấp hơn mà xe buýt không có sẵn, nhưng một giải pháp thanh lịch hơn sẽ là một dòng thu gom mở giữa các chủ. Khi xe buýt không hoạt động, không chủ nhân nào kéo dây xuống để nó nổi lên cao với lực kéo lên. Logic là nếu dòng cao, xe buýt có sẵn. Người chủ muốn sử dụng bộ nhớ sẽ nhìn vào dòng "xe buýt khả dụng" và nếu nó ở mức cao, hãy lái xe ở mức thấp và đợi vài giây để chắc chắn rằng người chủ khác đã không bắt xe buýt cùng một lúc. Nếu dòng RAM SPI CS vẫn không hoạt động, Có thể an toàn khi cho rằng xe buýt là của bạn. Thực hiện chuyển, ba trạng thái dòng MOSI / CLK của bạn và bỏ tín hiệu "bus active".

Việc "chờ vài giây sau khi hạ thấp dòng yêu cầu xe buýt" là cần thiết vì cả hai chủ đều có thể lấy được đường cùng một lúc.

Nếu bạn chỉ sử dụng một thiết bị dùng chung và thiết bị đó không yêu cầu chuyển nhiều lần, bạn có thể sử dụng đường CS của nó làm tín hiệu "xe buýt khả dụng", nhưng điều này không mạnh mẽ lắm.


Nhưng nếu cả hai cùng nắm lấy đường dây cùng một lúc và đợi cùng một khoảng thời gian trước khi truyền, thì có phải giống như không chờ đợi gì không?
endolith

Ý tưởng sẽ là chờ một vài ms + một vài ms ngẫu nhiên. Có lẽ họ sẽ chạy các phần mềm khác nhau và các độ trễ / ngắt / vv khác nhau sẽ góp phần vào sự ngẫu nhiên của độ trễ.
akohlsmith

2
Theo kinh nghiệm của tôi, I2C hoạt động tốt trong môi trường đa chủ. Tuy nhiên, nó không nhanh như SPI, vì vậy, nếu mục tiêu hiệu suất của bạn yêu cầu chuyển tốt hơn 400 kb / giây, bạn nên theo đuổi SPI.
RBerteig

1
@endolith: Nếu cả hai thiết bị truyền cùng một thứ, chúng sẽ không biết đến sự tồn tại của nhau. Nếu chúng truyền đi những thứ khác nhau, thiết bị đầu tiên truyền "1" trong khi thiết bị kia đang truyền "0" sẽ phát hiện ra rằng nó đã bị mất trọng tài, ngay lập tức ngừng truyền và rất có thể sẽ truyền lại toàn bộ lệnh từ đầu.
supercat

3

Cách dễ nhất là triển khai xe buýt SPI đa chủ. Bạn có thể sử dụng hai dòng I / O bổ sung giữa các chủ để phân xử bằng cách sử dụng cơ chế bắt tay.


2

Tôi thấy hai giải pháp khả thi cho vấn đề của bạn:

1) Tìm chip FIFO phù hợp với nhu cầu của bạn (một ví dụ ). Nó có thể không đơn giản / có thể sử dụng vì tôi không biết liệu chip FIFO có giao diện đơn giản (như SPI) có tồn tại hay không. Các bộ xếp hình tôi biết có giao diện song song.

2) Chia sẻ SRAM được đề cập từ Microchip với hai thạc sĩ SPI (trong hai uControllers). Khi lần đầu tiên được sử dụng, các cổng SPI trong uContoder khác phải có trở kháng cao và ngược lại khi uContoder thứ hai sẽ sử dụng SRAM. Bạn sẽ cần một số giao diện bắt tay đơn giản giữa uControllers (một cái gì đó như đọc yêu cầu / đọc xong / dòng bận). Điều này có thể được thực hiện bằng cách sử dụng 2 hoặc 3 kết nối đơn hướng giữa các uControllers. trí tưởng tượng của bạn là giới hạn.


1

Ngẫu nhiên, một cách tiếp cận chưa được đề cập để sử dụng với các bộ nhớ song song là có hai hoặc nhiều thiết bị được cung cấp các khe thời gian cố định để truy cập dữ liệu. Cách tiếp cận này được sử dụng trong nhiều máy tính dựa trên 6502 được sản xuất bởi cả Apple, Commodore và một số nhà cung cấp khác (không, thú vị là Atari). Bộ vi xử lý 6502 phổ biến đã sử dụng đồng hồ hai pha và luôn thực hiện truy cập bộ nhớ của nó vào nửa sau của mỗi chu kỳ (địa chỉ có sẵn trong nửa đầu, nhưng dữ liệu sẽ được ghi trong nửa sau hoặc được chốt vào cuối cái nửa thứ nhì). Do đó, các máy Apple và Commodore sẽ trong nửa đầu của mỗi chu kỳ bộ nhớ sử dụng một địa chỉ được tạo bởi mạch video, chốt dữ liệu ở cuối nửa; trong nửa sau của mỗi chu kỳ, họ sẽ sử dụng địa chỉ do CPU tạo ra,

Cách tiếp cận này yêu cầu bộ nhớ nhanh gấp đôi so với yêu cầu mà không cần xen kẽ bộ nhớ và yêu cầu bổ sung trình điều khiển 3 trạng thái trên đầu ra địa chỉ của bộ xử lý (đầu ra địa chỉ của 6502 luôn luôn ở mức cao hoặc thấp) nhưng nó hoạt động rất trơn tru để cung cấp cùng một bộ nhớ cho cả bộ xử lý và cho mạch ngoài.


0

Có một số cách để làm những gì bạn muốn.

  • Lập trình một "MCU bộ đệm" khác để ngồi giữa hai CPU của bạn và đệm giao tiếp - một cái gì đó giống như "Bộ chuyển đổi Baudrate" được hiển thị tại http://www.romanblack.com/PICthread.htmlm . Lập trình nó để trình bày "cổng kép" một giao diện độc lập ở mỗi bên. SRAM (bên trong hoặc bên ngoài) chỉ được kết nối trực tiếp với MCU bộ đệm này.
  • Lập trình lại MCU "máy phát" của bạn để lưu trữ bộ đệm trong SRAM, thay vì gửi trực tiếp đến máy thu và hoạt động như một nô lệ để lấy dữ liệu từ bộ đệm đó và chỉ gửi nó khi MCU "máy thu" của bạn yêu cầu nó Bộ đệm SRAM (bên ngoài hoặc bên trong) chỉ được kết nối trực tiếp với máy phát. (nghĩa là kết hợp chức năng của cả những gì người nhận của bạn đang làm và "MCU đệm" ở trên).
  • Sử dụng một số dòng GPIO, như Andrew Kohlsmith và mjh2007 đã đề xuất, để phân xử giữa người phát và người nhận có quyền truy cập vào chip SRAM 32 KByte bên ngoài như RAMTRON FM24C256.
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.