לא בת 16 (ביטים)

לפני ימים ספורים דיברתי על שבב הזיכרון הסריאלי והחמוד 23K356. הוא כל כך מצא חן בעיניי, שהחלטתי להזמין עוד כמה יחידות ממנו. הדבר היחיד שמעכיר את השמחה הוא העובדה שיש לו 32,768 כתובות, שניתן להגיע לכל אחת מהן באמצעות 15 ביטים – אבל בתקשורת איתו נשלחים 16 ביטים שהוא פשוט מתעלם מהראשון שבהם. תגידו, זה יחס, זה?

23K256
להוציא את המקסימום מכל ביט: מעגל משולב של זיכרון סריאלי

העובדה שהג'וק מתעלם מהביט הראשון לא אומרת שגם התוכנה שלי חייבת להתעלם ממנו. אני יכול לבודד אותו ולהשתמש בו, עוד לפני שלב הזנת הכתובת, כסוויץ' לבחירה של אחד מתוך שני שבבים זהים, וכך ליצור יחידת זיכרון עם מרחב כתובות אמיתי של 16 ביט – 65,536 כתובות שמנוצלות עד האחרונה שבהן. השאלה היא איך עושים זאת עם מינימום חיבורים לארדואינו (או לכל מיקרו-קונטרולר אחר, לצורך העניין).


מלבד חיבורי החשמל ההכרחיים, יש ל-23K256 כאמור ארבעה חיבורים קריטיים לצורך קריאה וכתיבה: CS, ש"בוחר" את השבב ואומר לו מתי מתבצעת תקשורת, SI ו-SO (מידע סריאלי נכנס ויוצא, בהתאמה) ו-SCK, כניסת "שעון" שמתזמנת כל ביט. לכאורה, אני אזדקק לשני חיבורי CS, אחד לכל שבב, ואת כל שאר החיבורים אפשר לפצל כך שייכנסו וייצאו משני השבבים בו זמנית (המפרט הטכני מתיר חיבור כזה, אם הבנתי אותו נכון). כלומר, סה"כ 5 חיבורים לארדואינו במקום 4 לשבב בודד.

בפועל, אני יכול לחסוך אפילו את החיבור הנוסף. איך? בעזרת שער NOT, שהופך את האות שמגיע אליו מ-0 ל-1 ומ-1 ל-0. ישנם ג'וקים שעושים בדיוק את זה, ואפשר לדעתי לממש NOT גם בעזרת טרנזיסטור מהסוג המתאים. קו ה-CS היחיד שיוצא מהארדואינו יפוצל לשניים: "ענף" אחד יחובר ישירות לאחד השבבים, ואילו ה"ענף" השני יעבור היפוך ואז יחובר לשבב השני. במקום לשלוח סיגנל דרך CS בכל פעם שאני רוצה לקרוא או לכתוב, אני פשוט אשלח ל-CS את הביט הראשון של הכתובת, וזה כבר יברור בשבילי בין שני השבבים.

כל זה עובד בתיאוריה. האם זה יעבוד גם בפועל? אני מחפש ואוסף את החלקים הדרושים, ואעדכן כשיהיה במה. בינתיים, תרגיל מחשבתי: מהי הדרך החסכונית ביותר בחיבורים להתממשקות עם ארבעה שבבים כאלה? או שמונה? מותר כמובן להשתמש בטריקים של תוכנה, וברכיבים פשוטים שיתווכו בין הארדואינו לבין שבבי הזיכרון.

להרשמה
הודע לי על
2 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

האם חיבור של 2 או יותר של 23K256 נותן יותר זיכרון?
איך בדיוק מתבצעים החיבורים? (שרטוט).
האם לא כדאי לקחת רכיב אחר עם כמות גדולה של זכרון שתתאים גם לארדואינו?