היכרות עם PIC Microcontrollers

מיקרו-בקרים PIC ממיקרוצ'יפ מציעים EEPROM ופלאש פנימיים לאחסון קוד יישומים וכמויות קטנות של נתונים, אבל פרויקטים מורכבים דורשים לעתים קרובות יותר יכולת. חיצוני EEPROM (תוכנית בלתי ניתנת להגדרה אלקטרונית לקריאה בלבד זיכרון) ו- Flash זיכרון פלאש לספק את אחסון שאינו-וולטי הנוסף הדרוש לאחסון נתונים, תצורה, עדכונים ונכסים מולטימדיה אלה הרחיבו אותך באמצעות תכנות חיצוני, ובחירת ממשקים עם עומק של I2Cer.

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

הבנה חיצונית EEPROM ו- Flash Memory

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

  • (FLT:0)EEPROMIRLT:1 - תמיכה בקריאת קריאה וכתיבה פעולות. סיבולת שלה היא בדרך כלל 1 מיליון מחזורי למחוק / לשכת דואר עבור te. EEPROM הוא אידיאלי לאחסון כמויות קטנות של נתונים מעודכנים לעתים קרובות (למשל, קבועות קליברציה, העדפות משתמשים).
  • (FLT:0) Flash MemoryveFLT:1 ; אופטימיזציה עבור חסימה ברמת למחוק ופעולות התוכנית.פלאש מציעה צפיפות גבוהה הרבה יותר (מגביטים ל-Gיגה-abits) אבל סיבולת נמוכה (בדרך כלל 10,000 עד 100,000 מחזורים למחוק לכל בלוק) זה משמש לאחסון קושחה, יומני נתונים גדולים ומערכות קבצים. NOR Flash מאפשר גישה אקראית; NAND דורש גישה ברמת עמוד והתאמה עבור אחסון גדול יותר.

חיצוני EEPROM ופלאש מתקשרים עם PIC באמצעות פרוטוקולים סדרתיים (I2C או SPI) או לעתים רחוקות אוטובוסים מקבילים. ממשקי Serial להפחית ספירת פינים ולפשט את פריסת ה- PCB, מה שהופך אותם לבחירה הדומיננטית עבור עיצובים משובצים.

בחירת התקן הזיכרון הנכון

בעת בחירת שבב זיכרון חיצוני לפרויקט PIC שלך, להעריך את הקריטריונים האלה:

  • (FLT:0) גודל זיכרון וקיבולת (קיבולת) 1:1 - להעריך את נפח הנתונים היישום שלך מייצר או חנויות. עבור נתונים פשוטים תצורה, 64 kbit EEPROM (8 KB) עשוי מספיק.עבור דגימות אודיו או שדרוגים, לשקול 16 Mbit או גדול יותר SPI פלאש.
  • (FLT:0) פרוטוקול תקשורת פרוטוקולים (I2C) משתמש רק בשני חוטים (SDA ו-SCL) ותומך במכשירים מרובים טיפול; הוא איטי אך פשוט יותר. SPI משתמש בארבע חוטים (MISO,I, SCLK, CS) והשגת מהירויות גבוהות יותר, אך דורש שבב ייעודי בוחר על בסיס המהירות והזמינות שלך.
  • (FLT:0Speed ו-Data TransferFLT:1) - I2C בדרך כלל רץ 100 kHz או 400 kHz; SPI יכול להגיע עשרות MHz.אם אתה צריך זרימה מהירה (למשל, השמעה), SPI הוא חובה. עבור קריאה מדי פעם של בלוקים קטנים, I2C הוא בסדר.
  • (FLT:0)Power ContureFLT:1 - שניהם EEPROM ופלאש יש זרמי קריאה / טקס בטווח מילימטר ו מצבי שינה עמוקים.עבור עיצובים מופעלים סוללות, לבחור שבבים עם זרם נמוך (למשל, 1 μA או פחות).
  • (FLT:0) צמצום וולטריג'ראט (ValverageFLT) 1 - רוב PICs עובדים ב- 3.3V או 5V, ודא ש- השבב הזיכרון תומך באותה טווח מתח.
  • (FLT:0) Cost ו-Availability (FLT:1) משפחות נפוצות כוללות את סדרת 24AA של Microchip (I2C EEPROM), 25AA סדרה (SPI EEPROM), SST25 או Winbond W25Q סדרה (SPI Flash), ו-AT24 (I2C EEPROM).
  • (FLT:0) סיום ותשומת לב 1 (EEPROM בדרך כלל מציע סיבולת גבוהה יותר מאשר פלאש. שמירת נתונים הוא בדרך כלל 40+ שנים. עבור פלאש, לשקול את מספר מחזורי למחוק וליישם פלסבו אם הוא כותב לעתים קרובות.

(ב) ,0) ,(המדריך ה- EEPROM של EEP) של EEP (EEP) , נספחים של קונסולת ה-EEP (EEP) של ווינבונד) , נספח 3, מציג אפשרויות פופולריות ל- SPI Flash.

חיבור זיכרון חיצוני למיקרובקר

התכווט המוקש תלוי בממשק.תחתנו אנו מפרטים את חיבורי I2C ו- SPI יחד עם שיקולים חשובים כמו התנגדות משיכת משיכת-up ו- decoupling capacitors.

I2C (IIC) Interface

I2C משתמש בשני קווים דו-כי-כיוניים:0.SDAFLT:1 (נתוני אוויר) ו-FLT:2SCLFLT 3: 3 (שעון אווירי) המאסטר (PIC) שולט על השעון ויזום עסקאות.כל עבד יש כתובת 7 סיביות או 10 סיביות.

(ב) ויקרא י"ד:

  • התחבר SDA ל- PIC I/O להגדיר כ- Open-drain או דו-כי-בימוי.
  • צור קשר עם עוד PIC I/O pin.
  • הוסף מתנגדים למשיכת-up חיצוני (בדרך כלל 4.7 k ⁇ ) מ SDA ו- SCL ל- Vcc. הערך תלוי בגיבוי האוטובוס ובמהירות; עבור 400 kHz, 2.2 k ⁇ עשוי להיות נחוץ.
  • חיבור WP של הזיכרון (כתיבה והגנה) ל- GND כדי להשבית את הגנת כתיבת החומרה, או Vcc כדי להגן על כל המערך.
  • מניחים קיבול קרמיקה 0.1F ליד לוח הכוח של הזיכרון לרעש decouple.

עבור במהירות גבוהה I2C (1 MHz), לשמור על עקבות קצרות ולהשתמש צפי משיכה חזק יותר.דוגמה צ'יפס: מיקרוצ'יפ 24LC256 (256 kbit I2C EEPROM), AT24C512 (512 kbit).

◄ Interface

(ב) ויקרא כ"ד): "[ה]" (ה', ב', ב', ב', ב', ב', ב', ב', ב', ב', ב', ב') ,"ה' (ב', ב') ,'"ה', ויקרא כעבדים' (ב') , , , , , , , , , , , , , , , , , , , ויקרא ויקרא , ).

(ב) ויקרא י"ד:

  • חיבור MOSI (PICפלט) ל-SI (קלט אווירי).
  • חיבור MISO (PIC קלט) לזיכרון SO (התפוק אווירי).
  • חיבור SCLK (PICפלט) ל-SCK של הזיכרון.
  • התחבר CS ל- PIC דיגיטלי פלטה סיכה.עבור זיכרונות מרובים, השתמש ב pins נפרדים.
  • הוסף משיכה חלשה (10 k ⁇ ) על קו CS אם יש צורך, אם כי ההיגיון הטיפוסי מספיק.
  • ירידה בכוח עם 0.1 מיקרוF capacitor.

שבבים SPI פלאש לעתים קרובות יש רישומים סטטוס וצריכים רצף פיקוד ספציפי (למשל, WREN לפני כתיבת) דוגמה שבבים: Winbond W25Q32 (32 Mbit SPI Flash), Microchip 25LC (256 kbit SPI EEPROM).

תכנות PIC לזיכרון חיצוני

המיקרובקר PIC חייב לזרז את מודול ההיקפי המתאים (I2C או SPI) ולאחר מכן לשלוח / קבלת נתונים על פי פרוטוקול של השבב זיכרון.שניהם מודול החומרה של Microchip (Master Synchronous Serial Port) ו- bit-Banging תוכנה ניתן להשתמש.

I2C תקשורת קוד דוגמה

להלן דוגמה פשוטה אך פונקציונלית באמצעות ה- MCC (הקוד של Microchip) יצרה את HAL עבור PIC16F18877.הקוד כותב חד-צדדי אחד לכתובת I2C EEPROM בכתובת נתונה ולאחר מכן קורא אותו בחזרה.

// Assumes I2C1_Initialize() called earlier.
// Device address: 0xA0 (for write) – actual address depends on A0-A2 pins.
#define EEPROM_ADDR 0xA0

void I2C_WriteByte(uint16_t memAddr, uint8_t data) {
 I2C1_Start(); // Generate start condition
 I2C1_Write(EEPROM_ADDR); // Send device address + write bit
 I2C1_Write((uint8_t)(memAddr >> 8)); // High address byte
 I2C1_Write((uint8_t)(memAddr)); // Low address byte
 I2C1_Write(data); // Data byte
 I2C1_Stop(); // Generate stop condition
 __delay_ms(5); // Wait for internal write cycle (tWR)
}

uint8_t I2C_ReadByte(uint16_t memAddr) {
 uint8_t data;
 I2C1_Start();
 I2C1_Write(EEPROM_ADDR); // Device address + write for dummy write
 I2C1_Write((uint8_t)(memAddr >> 8));
 I2C1_Write((uint8_t)(memAddr));
 I2C1_RepeatedStart(); // Repeated start to change direction
 I2C1_Write(EEPROM_ADDR | 0x01); // Device address + read bit
 data = I2C1_Read(0); // NAK after last byte
 I2C1_Stop();
 return data;
}

הערה: עבור דף כותב, אתה לא צריך לחצות גבול דף (בדרך כלל 8, 16, או 64 ע"י חתונים) להתייעץ עם גליון הנתונים בגודל הדף.

קוד תקשורת SPI

עבור SPI Flash (למשל, W25Q32), כתיבת פעולות דורשות אפשרות כתיבה (WREN), ולאחר מכן שליחת פקודה של תוכנית עמוד.כאן היא דוגמה מינימלית באמצעות MSSP במצב מאסטר SPI.

#define FLASH_CS LATAbits.LATA0 // Chip select pin

void SPI_WriteEnable(void) {
 FLASH_CS = 0;
 SPI1_Exchange8bit(0x06); // WREN command
 FLASH_CS = 1;
}

void SPI_FlashPageProgram(uint32_t addr, uint8_t *data, uint8_t len) {
 SPI_WriteEnable();
 FLASH_CS = 0;
 SPI1_Exchange8bit(0x02); // Page Program command
 SPI1_Exchange8bit((uint8_t)(addr >> 16)); // High address byte
 SPI1_Exchange8bit((uint8_t)(addr >> 8));
 SPI1_Exchange8bit((uint8_t)(addr));
 for (uint8_t i = 0; i < len; i++) {
 SPI1_Exchange8bit(data[i]);
 }
 FLASH_CS = 1;
 __delay_ms(5); // tPP max 5 ms typical
}

void SPI_FlashRead(uint32_t addr, uint8_t *buffer, uint32_t count) {
 FLASH_CS = 0;
 SPI1_Exchange8bit(0x03); // Read command
 SPI1_Exchange8bit((uint8_t)(addr >> 16));
 SPI1_Exchange8bit((uint8_t)(addr >> 8));
 SPI1_Exchange8bit((uint8_t)(addr));
 for (uint32_t i = 0; i < count; i++) {
 buffer[i] = SPI1_Exchange8bit(0x00);
 }
 FLASH_CS = 1;
}

זיכרון פלאש לא ניתן לכתוב ללא מחיקת מגזר שלם (בדרך כלל 4 KB) תמיד למחוק את המגזר לפני חידושו. השתמש בפקדת ארסית (x20) ואחריו בדיקת הרשם המעמד עד להודעה-in-progress bit ברור.

טכניקות מתקדמות: ללבוש רמות, ניהול עמוד, ועדכונים של חברות

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

  • (FLT:0) Wear Leveling for EEPROMROMFIRLT:1) - Distribute כותב על פני מספר מיקומים.לדוגמה, לשמור על מדד חיץ מעגלי במזל EEPROM ייעודי וכותב נתונים לדף החינמי הבא.
  • (FLT:0) Flash Block ManagementmasterveFLT:1) השתמש במערכת קבצים פשוטה או בטבלה metadata כדי לעקוב אחר אילו מגזרים נמחקים / בשימוש. צ'יפס טיפוסי של הצרכנים SPI פלאש יש 4 KB מגזרים; מחיקת המגזר לוקח עשרות אלפי שניות.
  • (FLT:0)Firmware Over-the-Air (FOTA) UpdatesuresFLT:1 - פלאש חיצוני יכול להחזיק תמונה קושחה חדשה.המגרש PIC קורא את התמונה, כותב אותה לפלאש פנימי, ולאפסים.להבטיח אובדן חשמל במהלך כתיבתו הוא מטופל באמצעות כפל buffer או אימות של סמן.
  • (FLT:0) גילוי ותיקון של ההרחבה:1) - עבור נתונים קריטיים, נספח CRC או פשוט XOR בדיקותums. על קריאה, לאמת את השלמות.זיכרונות חיצוניים רבים לא נבנו-ב- ECC, כך בדיקות תוכנה הן prudent.

שיטות ופתרון בעיות

בצע את ההנחיות האלה כדי למזער בעיות ולהשיג פעילות חזקה.

  • (ב) עיין תמיד ב-DataentialsheetFLT:1 - פרמטרים תזמון, ערכות פיקוד, ופרטים של משיכת-אפ משתנים בין יצרנים.
  • (FLT:0)Use כראוי משיכת ספין-אפ Resistors עבור I2CIRLT:1 - הערך תלוי על קיבול אוטובוס מהירות שעון.עבור אוטובוס עם רק אחד או שניים ו 400 kHz, להתחיל עם 4.7 k ⁇ . השתמש אוקטיוסקופ כדי לאמת את הקצוות עולה.
  • (ב) [ה]ההתמדה של ה-Avt:0] , במקום עיכובים קבועים לאחר כתיבתו, שלח שוב ושוב את כתובת המכשיר עד ש-ACK מקבל.זה מתאים לזמני כתיבה משתנים.
  • (FLT:0) שמור על SPI Tracess קצרFLT:1 - SPI פועל בתדרים MHz; חוטים ארוכים גורמים לצלצול.הוספת התנגדות סדרה (22–47 ⁇ ) ליד הפלט PIC כדי לחות השתקפות.
  • (ב) ⁇ 0) ,Use Decoupling Capacitorsph:1 ; Place 0.1 μF קרמיקה קרוב ככל האפשר לכל צמיד זיכרון.
  • (ב) [ה]ב]: [ה] [ה] [ה] [ה]] [ה] [ה]], [הכתוב] [=ה] [=ה]]]], [הכתוב] על גבול העמוד [ה], יש להימנע מ[דרוש מקור] [לכתוב] [לכתוב] [לכתוב] [לכתוב] [לכתוב] [ב[[ה'] [ב[[ה'] [ב[[ה'] [ב[[ה']]]] [ב[[ה']
  • (FLT:0) מוניטור עבור ערכת אוטובוס 1 (אם מכשירים מרובים SPI חולקים את MISO, להבטיח רק שבב אחד בוחר פעיל בזמן.עבור I2C, אין להבטיח שום קונפליקטים כתובת.
  • (ב) [ה]הנדל כותב הגנה מפנים 1: לזיכרונות רבים יש ציון WP או למשוך אותו נמוך כדי לאפשר כתיבה או שליטה באמצעות GPIO אם אתה צריך הגנה סלקטיבית.

פרויקט דוגמה: נתונים לגר עם SPI Flash

כדי לחזק את המושגים, שקול יומן נתונים פשוט כי מעת לעת קורא חיישן אנלוגי, מאחסן את הערך ב- SPI Flash (למשל, W25Q16), ומשתמש ב- buffer מעגלי כדי לנסח נתונים ישנים יותר.ה- PIC מתעורר משינה, מבצע המרה, כותב לבלוק המגזר הנוכחי, מעדכן נקודה ב- EEPROM, וחוזר לישון.

צעדים מרכזיים:

  1. מיפוי SPI MSSP, הגדרת סיכות CS כפלט.
  2. על הסטארט-אפ, קרא את נקודת הכתיבה הנוכחית מ-I2C EEPROM קטן (או מהמגזר הראשון של פלאש).
  3. כל מחזור כניסה: קרא ADC לכתוב לדף פלאש / Increment Pointer.If Pointer מגיע קצה של אזור שהוקצה, איפוס כדי להתחיל (circular).
  4. באופן בלתי אפשרי CRC של הדף האחרון כדי לזהות שחיתות.
  5. השתמש בשינה בעוצמה נמוכה בין המרווחים.

דפוס זה ניתן להרחיב לחיישנים מרובים, טמפפטפט, ואת מיקום מונע אירועים.

התמוטטות ומשאבים נוספים

תוך קידוד זיכרון חיצוני EEPROM ופלאש עם מיקרו-בקרים PIC פותח מגוון רחב של יישומים הדורשים יותר אחסון מאשר זיכרון פנימי יכול לספק. על ידי בחירת הממשק המתאים (I2C או SPI), תוך חיפוש נכון, וליישם שגרות קריאה / טקס חזקות, אתה יכול להוסיף אחסון אמין לא-לא-לא-מתאים לכל מערכת משובצת.

לקריאה נוספת, לחקור את המשאבים הבאים:

  • (FLT:0)PIC16(L)F18877 Family DataBuildsheetssheetssheet, ב-MSSP.
  • (ב) ,0) , ראשי תיבות של קוד ה-MCCIRLT:1 - קוד ההתקנה היקפי אוטומטי.
  • (ב) ,0) ,W25Q32JV DatasheetigtureFLT 1 - קומנדו משותף של SPI Flash.
  • (ב) ,0Microchip 24LC256 EEPROM DataigitalphFLT 1:1 - דוגמאות תזמון I2C.

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