سید حسن عمارتی
2 هفته پیش توسط سید حسن عمارتی مطرح شد
3 پاسخ

اتصال NOR FLAHS به میکروکنترولر

سلام من میخواستم حافظه W25Q256JVEIQ TR رو به میکروکنترولر STM32H723ZGT6 متصل کنم اما مشکلی که هست اینه که این میکروکنترلر به صورت مستقیم از QUADSPI پشتیبانی نمی کنه و به جای اون OCTOSPI داره و وقتی روی حالت QUAD یا هر حالتی دیگه فعالش میکنم داخل CUBEMX هیچ PIN OUT رو به من نشون نمیده که متصلش کنم به حافظه فلش (cube MX 6.13.0 , cube MX 6.12.0)


ثبت پرسش جدید
Amin
تخصص : علاقه مند به برنامه نویسی
@Hephaestus 4 روز پیش مطرح شد
0

سلام اقای عمارتی


برای اتصال حافظه NOR Flash مانند W25Q256JVEIQ به میکروکنترلر STM32H723ZGT6 که از OCTOSPI پشتیبانی می‌کند، باید مراحل زیر را دنبال کنید. این میکروکنترلر از طریق OCTOSPI با حافظه‌های خارجی ارتباط برقرار می‌کند، اما ممکن است نیاز به تنظیمات خاصی در CubeMX و کدنویسی داشته باشید.

1. درک تفاوت‌های QUADSPI و OCTOSPI

  • QUADSPI از 4 خط داده (IO0 تا IO3) استفاده می‌کند، در حالی که OCTOSPI از 8 خط داده (IO0 تا IO7) پشتیبانی می‌کند. با این حال، می‌توان از OCTOSPI برای ارتباط با حافظه‌هایی که از QUADSPI پشتیبانی می‌کنند نیز استفاده کرد، اما نیاز به تنظیمات خاصی دارد.

2. تنظیمات CubeMX

  • انتخاب OCTOSPI: در CubeMX، به بخش OCTOSPI بروید و آن را فعال کنید. سپس، پین‌های مربوط به OCTOSPI را به حافظه W25Q256JVEIQ متصل کنید. اگر پین‌ها به صورت خودکار نمایش داده نمی‌شوند، می‌توانید به صورت دستی پین‌های مورد نیاز را انتخاب کنید.
  • پیکربندی پین‌ها: برای ارتباط با W25Q256JVEIQ، حداقل به پین‌های زیر نیاز دارید:
    • CLK (Clock)
    • CS (Chip Select)
    • IO0 (MOSI)
    • IO1 (MISO)
    • IO2 (WP)
    • IO3 (HOLD)
  • تنظیمات Clock: سرعت کلاک را مطابق با مشخصات حافظه تنظیم کنید. W25Q256JVEIQ از حداکثر سرعت 133MHz پشتیبانی می‌کند.

3. تنظیمات نرم‌افزاری

  • فعال‌سازی 4 بایت آدرس: از آنجایی که W25Q256JVEIQ از آدرس‌دهی 4 بایتی پشتیبانی می‌کند، باید این حالت را در کد خود فعال کنید. این کار با ارسال دستور 0xB7 (Enable 4-Byte Address Mode) انجام می‌شود.
  • پیکربندی OCTOSPI: در کد خود، باید تنظیمات OCTOSPI را به گونه‌ای انجام دهید که با حافظه W25Q256JVEIQ سازگار باشد. این شامل تنظیمات مربوط به دستورات خواندن، نوشتن و پاک کردن است.

4. کدنویسی

  • خواندن و نوشتن داده: از توابع HAL برای ارسال دستورات و خواندن/نوشتن داده‌ها استفاده کنید. به عنوان مثال، برای خواندن داده‌ها از حافظه، می‌توانید از دستور 0x6C (Fast Read Quad Output) استفاده کنید.
  • پاک کردن حافظه: برای پاک کردن حافظه، از دستورات 0x20 (Sector Erase) یا 0xD8 (Block Erase) استفاده کنید.

5. اشکال‌زدایی

  • بررسی پین‌ها: مطمئن شوید که پین‌ها به درستی متصل شده‌اند و تنظیمات CubeMX به درستی اعمال شده‌اند.
  • بررسی دستورات: از طریق یک پروتکل اشکال‌زدایی مانند UART، دستورات ارسالی و دریافتی را بررسی کنید تا مطمئن شوید که حافظه به درستی پاسخ می‌دهد.

6. منابع و مثال‌ها

  • مثال‌های کد: می‌توانید از مثال‌های موجود در GitHub یا انجمن‌های STM32 استفاده کنید. به عنوان مثال، یک پروژه نمونه برای STM32H723ZGT6 و W25Q256 در این لینک موجود است.
  • مستندات: به مستندات STM32H723ZGT6 و W25Q256JVEIQ مراجعه کنید تا از تنظیمات دقیق و دستورات مورد نیاز مطلع شوید.

با دنبال کردن این مراحل، می‌توانید حافظه W25Q256JVEIQ را به میکروکنترلر STM32H723ZGT6 متصل کرده و از آن استفاده کنید. اگر همچنان مشکلی داشتید، می‌توانید از انجمن‌های تخصصی مانند ST Community کمک بگیرید.


سید حسن عمارتی
@SHemE 2 روز پیش مطرح شد
0

سلام امین جان عزیز لطف کردید بابت جوابتون اما این یه جورایی مشکل نیست فقط میخوام بدونم چجوری حافظه رو باید متصلش کنم . و خیلی توی اینترنت دنبال این موضوع گشتم ولی به جایی نریسیدم برای سری های دیگه ی این میکرو مشکلی وجود نداره و توی اینترنت هم منابع معتبری هست ولی درمورد این یکی من چیزی ندیدم. و chat GPT هم به دلیل بروز نبودن اطلاعاتش جواب درست حسابی نمیده chat gpt هم توی خیلی از موضوعات سخت افزاری این شکلی شیش و هست میزنه .
Quad spi رو وقتی دستی فعال کنم زیاد مطمئن نسیتم که از quad1 استفاده کردم یا 2 و درکل باین پروتکل کار نکردم بار اولمه و دیتایی توش کش نمیشه فقط یه چند تا سورس میخوام روش ران کنم بازم ممنون


Amin
تخصص : علاقه مند به برنامه نویسی
@Hephaestus 2 روز پیش مطرح شد
0

سلام دوست عزیز،
خوشحالم که به جواب من توجه کردی و خب متوجه شدم که مشکل اصلی‌ات اینه که می‌خوای بدون چطوری حافظه W25Q256JVEIQ رو به میکروکنترلر STM32H723ZGT6 متصل کنی و منابع معتبری هم برای این کار پیدا نکردی. چون این میکروکنترلر از OCTOSPI پشتیبانی می‌کنه و QUADSPI نداره، نیاز به یه سری تنظیمات خاص داره که برات توضیح می‌دم.


مراحل اتصال حافظه W25Q256JVEIQ به STM32H723ZGT6

1. پین‌های مورد نیاز برای اتصال

برای اتصال حافظه NOR Flash به میکروکنترلر، باید پین‌های زیر رو به درستی وصل کنی:

پین حافظه W25Q256JVEIQ پین میکروکنترلر STM32H723ZGT6 (OCTOSPI)
CLK (Clock) OCTOSPI_CLK
CS (Chip Select) OCTOSPI_NCS
IO0 (MOSI) OCTOSPI_IO0
IO1 (MISO) OCTOSPI_IO1
IO2 (WP) OCTOSPI_IO2
IO3 (HOLD) OCTOSPI_IO3

اگر حافظه از حالت Octal (8 خط داده) پشتیبانی می‌کنه، می‌تونی از پین‌های IO4 تا IO7 هم استفاده کنی، اما برای W25Q256JVEIQ که از Quad SPI پشتیبانی می‌کنه، فقط به IO0 تا IO3 نیاز داری.


2. تنظیمات CubeMX

برای اینکه بتونی حافظه رو به درستی وصل کنی، باید تنظیمات زیر رو در CubeMX انجام بدی:

  1. فعال‌سازی OCTOSPI:

    • در CubeMX، به بخش OCTOSPI برو و آن را فعال کن.
    • مطمئن شو که پین‌های OCTOSPI به درستی انتخاب شده‌اند (CLK, NCS, IO0, IO1, IO2, IO3).
  2. تنظیمات Clock:

    • سرعت کلاک OCTOSPI رو مطابق با حافظه تنظیم کن. برای W25Q256JVEIQ، حداکثر سرعت 133MHz هست.
  3. تنظیمات Mode:

    • OCTOSPI رو در حالت Quad SPI تنظیم کن. این کار رو می‌تونی در تب Configuration انجام بدی.
  4. تنظیمات DMA (اختیاری):

    • اگر می‌خوای از DMA برای انتقال داده‌ها استفاده کنی، DMA رو برای OCTOSPI فعال کن.

3. کدنویسی

بعد از اینکه تنظیمات CubeMX رو انجام دادی و کد رو generate کردی، باید کدنویسی رو شروع کنی. این مراحل رو دنبال کن:

  1. فعال‌سازی 4 بایت آدرس:

    • حافظه W25Q256JVEIQ از آدرس‌دهی 4 بایتی پشتیبانی می‌کنه. برای فعال‌سازی این حالت، دستور 0xB7 (Enable 4-Byte Address Mode) رو به حافظه ارسال کن.
    uint8_t enable_4byte_address_cmd = 0xB7;
    HAL_OSPI_Command(&hospi1, &enable_4byte_address_cmd, HAL_OSPI_TIMEOUT_DEFAULT_VALUE);
  2. خواندن داده از حافظه:

    • برای خواندن داده‌ها از حافظه، از دستور 0x6C (Fast Read Quad Output) استفاده کن.
    uint8_t read_cmd = 0x6C;
    uint8_t data[256]; // بافر برای ذخیره داده‌ها
    HAL_OSPI_Command(&hospi1, &read_cmd, HAL_OSPI_TIMEOUT_DEFAULT_VALUE);
    HAL_OSPI_Receive(&hospi1, data, 256, HAL_OSPI_TIMEOUT_DEFAULT_VALUE);
  3. نوشتن داده به حافظه:

    • برای نوشتن داده‌ها، از دستور 0x32 (Quad Page Program) استفاده کن.
    uint8_t write_cmd = 0x32;
    uint8_t data_to_write[256] = { ... }; // داده‌هایی که می‌خوای بنویسی
    HAL_OSPI_Command(&hospi1, &write_cmd, HAL_OSPI_TIMEOUT_DEFAULT_VALUE);
    HAL_OSPI_Transmit(&hospi1, data_to_write, 256, HAL_OSPI_TIMEOUT_DEFAULT_VALUE);
  4. پاک کردن حافظه:

    • برای پاک کردن حافظه، از دستورات 0x20 (Sector Erase) یا 0xD8 (Block Erase) استفاده کن.
    uint8_t erase_cmd = 0x20;
    HAL_OSPI_Command(&hospi1, &erase_cmd, HAL_OSPI_TIMEOUT_DEFAULT_VALUE);

4. منابع و مثال‌ها

برای اینکه بهتر متوجه بشی، می‌تونی از منابع زیر استفاده کنی:

  1. مستندات STM32H723ZGT6:

  2. مستندات W25Q256JVEIQ:

  3. مثال‌های کد:

    • می‌تونی از پروژه‌های موجود در GitHub استفاده کنی. مثلاً این پروژه برای STM32H7 و W25Q256 می‌تونه مفید باشه:
      STM32H7 W25Q256 Example

5. اشکال‌زدایی

اگر داده‌ها به درستی خوانده یا نوشته نمی‌شن، این مراحل رو بررسی کن:

  • مطمئن شو که پین‌ها به درستی وصل شده‌اند.
  • سرعت کلاک رو کاهش بده و تست کن.
  • دستورات ارسالی و دریافتی رو از طریق UART یا Debugger بررسی کن.

اگر بازم سوالی داشتی یا به مشکل خوردی، خوشحال می‌شم کمک کنم. موفق باشی! 😊


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام