לפני ימים ספורים דיברתי על שבב הזיכרון הסריאלי והחמוד 23K356. הוא כל כך מצא חן בעיניי, שהחלטתי להזמין עוד כמה יחידות ממנו. הדבר היחיד שמעכיר את השמחה הוא העובדה שיש לו 32,768 כתובות, שניתן להגיע לכל אחת מהן באמצעות 15 ביטים – אבל בתקשורת איתו נשלחים 16 ביטים שהוא פשוט מתעלם מהראשון שבהם. תגידו, זה יחס, זה?
העובדה שהג'וק מתעלם מהביט הראשון לא אומרת שגם התוכנה שלי חייבת להתעלם ממנו. אני יכול לבודד אותו ולהשתמש בו, עוד לפני שלב הזנת הכתובת, כסוויץ' לבחירה של אחד מתוך שני שבבים זהים, וכך ליצור יחידת זיכרון עם מרחב כתובות אמיתי של 16 ביט – 65,536 כתובות שמנוצלות עד האחרונה שבהן. השאלה היא איך עושים זאת עם מינימום חיבורים לארדואינו (או לכל מיקרו-קונטרולר אחר, לצורך העניין).
מלבד חיבורי החשמל ההכרחיים, יש ל-23K256 כאמור ארבעה חיבורים קריטיים לצורך קריאה וכתיבה: CS, ש"בוחר" את השבב ואומר לו מתי מתבצעת תקשורת, SI ו-SO (מידע סריאלי נכנס ויוצא, בהתאמה) ו-SCK, כניסת "שעון" שמתזמנת כל ביט. לכאורה, אני אזדקק לשני חיבורי CS, אחד לכל שבב, ואת כל שאר החיבורים אפשר לפצל כך שייכנסו וייצאו משני השבבים בו זמנית (המפרט הטכני מתיר חיבור כזה, אם הבנתי אותו נכון). כלומר, סה"כ 5 חיבורים לארדואינו במקום 4 לשבב בודד.
בפועל, אני יכול לחסוך אפילו את החיבור הנוסף. איך? בעזרת שער NOT, שהופך את האות שמגיע אליו מ-0 ל-1 ומ-1 ל-0. ישנם ג'וקים שעושים בדיוק את זה, ואפשר לדעתי לממש NOT גם בעזרת טרנזיסטור מהסוג המתאים. קו ה-CS היחיד שיוצא מהארדואינו יפוצל לשניים: "ענף" אחד יחובר ישירות לאחד השבבים, ואילו ה"ענף" השני יעבור היפוך ואז יחובר לשבב השני. במקום לשלוח סיגנל דרך CS בכל פעם שאני רוצה לקרוא או לכתוב, אני פשוט אשלח ל-CS את הביט הראשון של הכתובת, וזה כבר יברור בשבילי בין שני השבבים.
כל זה עובד בתיאוריה. האם זה יעבוד גם בפועל? אני מחפש ואוסף את החלקים הדרושים, ואעדכן כשיהיה במה. בינתיים, תרגיל מחשבתי: מהי הדרך החסכונית ביותר בחיבורים להתממשקות עם ארבעה שבבים כאלה? או שמונה? מותר כמובן להשתמש בטריקים של תוכנה, וברכיבים פשוטים שיתווכו בין הארדואינו לבין שבבי הזיכרון.
האם חיבור של 2 או יותר של 23K256 נותן יותר זיכרון?
איך בדיוק מתבצעים החיבורים? (שרטוט).
האם לא כדאי לקחת רכיב אחר עם כמות גדולה של זכרון שתתאים גם לארדואינו?
כמובן, ככל שתחבר יותר רכיבי זיכרון יהיה לך יותר זיכרון – פשוט הניהול של העסק נהיה קצת יותר מורכב. שרטוט יהיה חסר משמעות כאן כי לא חסרים רכיבי זיכרון שונים שבנויים בכל מיני צורות, והצגתי את זה בעיקר כדוגמה. צריך לקרוא את ה-datasheet של כל רכיב ולהכין את המעגל בהתאם.
לגבי כמות הזיכרון, בראש ובראשונה היא צריכה להתאים לדרישות היישום כי אין טעם לקנות רכיבים יקרים כשאפשר להסתפק בזולים. לעתים יש גם שיקולים נוספים, כגון יכולת גיבוי במערכות קריטיות – במקרה כזה לא כדאי לסמוך על רכיב יחיד. ולפעמים כן, רכיב אחד עם הרבה זיכרון הוא בדיוק הפתרון הנכון 🙂