כיצד להתחיל לעבוד עם לוח המיקרו-בקר רב-הליבות Raspberry Pi Pico באמצעות שפת C

מאת ‎Jacob Beningo

באדיבות ‎DigiKey's North American Editors

במערכות משובצות קיים צורך אינהרנטי ביחידת מיקרו-בקר (MCU) עוצמתית ובעלות נמוכה. התקנים אלה ממלאים תפקיד חשוב לא רק במוצר, אלא גם בבדיקות תומכות, בנייה מהירה של אב-טיפוס ויכולות כגון למידת מכונה (ML). עם זאת, תחילת העבודה עם המיקרו-בקרים דורשת בדרך כלל הבנה מעמיקה של טכנולוגיית המיקרו-בקרים ושפות תכנות ברמה נמוכה. מעבר לכך, לוחות הפיתוח עולים לרוב בין 20 ל-1000 דולר, וזה עלול להיות יקר מדי עבור מפתחים רבים. כמו כן, לא תמיד קיים לוח פיתוח, וגם כאשר הוא קיים, המתכננים מתקשים לעתים קרובות להפעילו.

מאמר זה מציג את Raspberry Pi Pico‏ (SC0915) כלוח פיתוח בעלות נמוכה עבור המיקרו-בקר RP2040 המספק למפתחים מגוון רחב של יכולות. המאמר חוקר את ה-Pico וכמה לוחות הרחבה, בוחן את ערכות פיתוח התוכנה השונות שבהן תומך ה-Raspberry Pi Pico, ומדגים כיצד ליצור יישום נורת LED‏ מהבהבת באמצעות ערכת פיתוח תוכנה (SDK) בשפת C.

הצגת ה-Raspberry Pi Pico

ה-Raspberry Pi Pico הוצג לראשונה בשנת 2021 כפלטפורמת הפיתוח עבור המיקרו-בקר RP2040. ניתן להשתמש ב-Pico כלוח פיתוח עצמאי, או שניתן לתכנן אותו ישירות לתוך מוצר הודות לחיבורי קצה שניתן להלחים ללוח נשא (איור 1). עם העלות של פחות מ-5 דולר של ה-Pico והשימוש הרב-תכליתי שלו, הוא הפך לפתרון פופולרי הן עבור יצרנים והן עבור מפתחים מקצועיים.

תמונה של ה-Raspberry Pi Pico הוא לוח פיתוח בעלות נמוכהאיור 1: ה-Raspberry Pi Pico הוא לוח פיתוח בעלות נמוכה המכיל את כל הדרוש לפיתוח יישומים במיקרו-בקר RP2040. (מקור התמונה: Raspberry Pi)

ה-RP2040 מצויד במעבד Arm® Cortex®-M0+‎ בעל ליבה-כפולה עם שעון במהירות של 133 מגה-הרץ (MHz) וכולל SRAM של עד 264 קילובייט (Kbytes). ה-RP2040‏ אינו כולל זיכרון Flash על-השבב. במקום זאת, ה-Raspberry Pi Pico מספק שבב Flash חיצוני של 2 מגה-בייט (Mbyte) שמתממשק עם ה-RP2040 באמצעות ממשק היקפי טורי מרובע (QSPI). הלוח מספק גם נורת LED למשתמש, מתנד גביש שבו משתמש חוג נעול מופע (‎PLL) ליצירת שעון מעבד יציב במהירות גבוהה, ולחצן כדי להגדיר האם המעבד יאותחל כרגיל או לתוך טוען אתחול (Bootloader).

אקוסיסטם נרחבת

ל-Raspberry Pi Pico כבר יש אקוסיסטם נרחבת המאפשרת למפתחים לבחור בין שימוש בערכות פיתוח תוכנה בשפת MicroPython או C לכתיבת יישומים עבור הלוח. הערה מעניינת לגבי ה-Raspberry Pi Pico היא שלא קיים רק לוח פיתוח אחד. במקום זאת, ישנם שלושה; ה-SC0915 המקורי עם התצורה הסטנדרטית, ה-SC0917 הכולל מחברי פס פינים, וה-SC0918 הכולל שבב Wi-Fi בעלות נמוכה עבור היישומים המחוברים (איור 2).

תמונה של ה-Raspberry Pi Pico זמין בשלוש תצורותאיור 2: ה-Raspberry Pi Pico זמין בשלוש תצורות. (מקור התמונה: Beningo Embedded Group, LLC‏)

עבור כל אחת מהגרסאות הללו, חתימת-השטח הכללית של הלוח נשארת זהה. חיבורי הקצה של הלוח מורכבים מחיבורי קצה של 40 פינים עבור הרכיבים ההיקפיים ואפשרויות חיבור המוצגות באיור 3. חיבורים אלה כוללים הספקת-כוח, הארקה, מקלט ומשדר אוניברסליים אסינכרוניים (UART), כניסות ויציאות לשימוש כללי (GPIO), אפנון רוחב פולס (PWM), ממיר אנלוגי-לדיגיטלי (ADC), חברור היקפי טורי (SPI) , ממשק בין מעגלים משולבים (I2C), וניפוי-שגיאות.

תמונה של מערכי הפינים המחוברים לקצוות ב-Raspberry Pi Pico (לחץ להגדלה)איור 3: מערכי הפינים המחוברים לקצוות ב-Raspberry Pi Pico מספקים מגוון רחב של גישות היקפיות. (מקור התמונה: Raspberry Pi)

אפשרויות לוח פריסת מגעי מעגלים זעירים (Breakout Board)

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

לדוגמה, לוח מודול ה-Pico‏ MM2040EV מבית Bridgetek מפצל את רוב מחברי הקצה לחיבורי פינים ושקעים. בנוסף, קיים לוח shield ל-Pico‏ 103100142 מבית Seeed Studio‏ המספק כל ממשק היקפי כמחבר. כל מחבר תואם-פינים עם לוחות ההרחבה כדי להוסיף פונקציות כגון חיישנים אינרציאליים, דוחפי מנועים ומדי-רוחק.

לשפת C או לשפת MicroPython?

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

חלופה לשימוש ב-C, המסופקת על ידי האקוסיסטם של Raspberry Pi Pico, היא MicroPython. MicroPython היא נקודת חיבור ל-CPython המיועדת לפעול על מערכות מבוססות מיקרו-בקרים. למרות שללא ספק מדובר במשתמשת כבדה יותר במעבד מאשר C, זוהי שפה מודרנית שמפתחים רבים מכירים ונוח להם לעבוד איתה. MicroPython יכולה לפשט פרטים ברמה נמוכה של המעבד והחומרה. הגישות לחומרה מתבצעות באמצעות ממשקי תכנות יישומים ברמה גבוהה (API) שקל ללמוד – תכונה חשובה עם תאריכי סיום פרויקטים לחוצים.

כאשר בוחרים באיזו ערכת פיתוח תוכנה (SDK) להשתמש – C או MicroPython – על המפתחים להתמקד בצרכים הספציפיים. בהשוואה ל-MicroPython, השימוש ב-C יספק גישה ברמה נמוכה לרגיסטרים של המעבד, יהיה בעל חתימת זיכרון קטנה יותר ויהיה יעיל יותר.

הגדרת ה-SDK בשפת C

כאשר משתמשים ב-SDK בשפת C ליצירת יישום נורת LED‏ מהבהבת, ישנן מספר אפשרויות. הראשונה היא לעיין בתיעוד ה-SDK ולפעול לפי ההוראות. השנייה היא להשתמש במכל Docker מוגדר-מראש להתקנה אוטומטית של כל הכלים הנדרשים לצעדים הראשונים. אפשרות שלישית היא להתקין את כלי ה-toolchain ואת קוד הדוגמה של Raspberry Pi Pico באופן ידני, כולל:

  • Git
  • Python 3
  • Cmake
  • gcc-arm-none-eabi \‎
  • libnewlib-arm-none-eabi

אחזור הקוד לדוגמה של Raspberry Pi Pico יכול להתבצע על ידי שכפול מאגר ה-git של Raspberry Pi באמצעות הפקודה הבאה:

git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \‎

     cd /home/sdk/pico-sdk && \‎

    git submodule update --init &&‎

לאחר התקנת ספריות אלה וקוד המקור, השלב הבא הוא לבחון ולקמפל את יישום נורת ה-LED‏ המהבהבת.

כתיבת יישום ראשון של נורה מהבהבת

ערכת ה-SDK לשפת C מגיעה עם דוגמה של נורה מהבהבת שהמפתחים יכולים להשתמש בה כדי לבנות את היישום הראשון שלהם. רשימת הקוד שלהלן משתמשת בנורות ה-LED המובנות של ה-Pico ובהנחיית PICO_DEFAULT_LED_PIN כדי להגדיר פין I/O ולגרום לו להבהב בשיהוי של 250 אלפיות השנייה (ms).

העתק
	/**
	 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
	 *
	 * SPDX-License-Identifier: BSD-3-Clause
	 */
	

	#include "pico/stdlib.h"
	

	int main() {
	#ifndef PICO_DEFAULT_LED_PIN
	#warning blink example requires a board with a regular LED
	#else
	    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
	    gpio_init(LED_PIN);
	    gpio_set_dir(LED_PIN, GPIO_OUT);
	    while (true) {
	        gpio_put(LED_PIN, 1);
	        sleep_ms(250);
	        gpio_put(LED_PIN, 0);
	        sleep_ms(250);
	    }
	#endif
	}

רשימת קוד: ה-Raspberry Pi Pico‏ משתמש בהנחיית PICO_DEFAULT_LED_PIN כדי להגדיר פין I/O ולגרום לו להבהב בשיהוי של ‎250 ms. (מקור הקוד Raspberry Pi)

לפי הרשימה, ל-LED_PIN מוקצה פין ברירת המחדל; לאחר מכן מתבצעות קריאות לממשקי ה-API של ה-C gpio. gpio_init משמש לאתחול הפין, בעוד gpio_set_dir משמש להגדרת LED_PIN עבור יציאה. כך נוצרת לולאה אינסופית שמחליפה את מצב נורת ה-LED כל ‎250 ms.

הקומפילציה של היישום היא פשוטה יחסית. ראשית, על המפתח ליצור ספריית build בתיקיית Raspberry Pi Pico שלו באמצעות הפקודות הבאות:

mkdir build

cd build

לאחר מכן, יש להכין cmake ל-build על ידי ביצוע הפקודה הבאה:

cmake

כעת המפתח יכול לעבור לספריית blinky ולהריץ make:

cd blink

make

הפלט מתהליך ה-build יהיה הקובץ blinky.uf2. ניתן לטעון את התוכנית המקומפלת ב-Raspberry Pi Pico על ידי החזקת פין BOOTSEL במצב נמוך והזנת הכוח ללוח. אז יופיע ה-RP2 כהתקן אחסון בנפח גדול. על המפתח לגרור את הקובץ blinky.uf2 לכונן, ובשלב זה טוען האתחול (Bootloader) יתקין את היישום. לאחר השלמת ההתקנה, נורת ה-LED אמורה להתחיל להבהב.

סיכום

ה-Raspberry Pi Pico הוא פתרון אטרקטיבי למפתחי מערכות משובצות מחשב המחפשים גמישות במחזור הפיתוח שלהם. קיימות מספר אפשרויות, כולל פתרונות עצמאיים או לוחות עם חיבוריות אלחוטית. בנוסף, האקוסיסטם תומכת ב-C וב-C++‎, כמו גם ב-MicroPython. המפתחים יכולים לבחור איזו שפה היא המתאימה ביותר ליישום שלהם ואז למנף את ערכת ה-SDK המתאימה כדי להאיץ את פיתוח התוכנה.

DigiKey logo

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

אודות כותב זה

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo הוא יועץ תוכנה משובצת. הוא פרסם יותר מ- 200 מאמרים על טכניקות פיתוח תוכנה משובצת, הוא דובר ומאמן טכני מבוקש, והוא בעל שלושה תארים, כולל תואר שני בהנדסה מאוניברסיטת מישיגן.

אודות מוציא לאור זה

DigiKey's North American Editors