سلام من میخواستم حافظه W25Q256JVEIQ TR رو به میکروکنترولر STM32H723ZGT6 متصل کنم اما مشکلی که هست اینه که این میکروکنترلر به صورت مستقیم از QUADSPI پشتیبانی نمی کنه و به جای اون OCTOSPI داره و وقتی روی حالت QUAD یا هر حالتی دیگه فعالش میکنم داخل CUBEMX هیچ PIN OUT رو به من نشون نمیده که متصلش کنم به حافظه فلش (cube MX 6.13.0 , cube MX 6.12.0)
سلام اقای عمارتی
برای اتصال حافظه NOR Flash مانند W25Q256JVEIQ به میکروکنترلر STM32H723ZGT6 که از OCTOSPI پشتیبانی میکند، باید مراحل زیر را دنبال کنید. این میکروکنترلر از طریق OCTOSPI با حافظههای خارجی ارتباط برقرار میکند، اما ممکن است نیاز به تنظیمات خاصی در CubeMX و کدنویسی داشته باشید.
0xB7
(Enable 4-Byte Address Mode) انجام میشود.0x6C
(Fast Read Quad Output) استفاده کنید.0x20
(Sector Erase) یا 0xD8
(Block Erase) استفاده کنید.با دنبال کردن این مراحل، میتوانید حافظه W25Q256JVEIQ را به میکروکنترلر STM32H723ZGT6 متصل کرده و از آن استفاده کنید. اگر همچنان مشکلی داشتید، میتوانید از انجمنهای تخصصی مانند ST Community کمک بگیرید.
سلام امین جان عزیز لطف کردید بابت جوابتون اما این یه جورایی مشکل نیست فقط میخوام بدونم چجوری حافظه رو باید متصلش کنم . و خیلی توی اینترنت دنبال این موضوع گشتم ولی به جایی نریسیدم برای سری های دیگه ی این میکرو مشکلی وجود نداره و توی اینترنت هم منابع معتبری هست ولی درمورد این یکی من چیزی ندیدم. و chat GPT هم به دلیل بروز نبودن اطلاعاتش جواب درست حسابی نمیده chat gpt هم توی خیلی از موضوعات سخت افزاری این شکلی شیش و هست میزنه .
Quad spi رو وقتی دستی فعال کنم زیاد مطمئن نسیتم که از quad1 استفاده کردم یا 2 و درکل باین پروتکل کار نکردم بار اولمه و دیتایی توش کش نمیشه فقط یه چند تا سورس میخوام روش ران کنم بازم ممنون
سلام دوست عزیز،
خوشحالم که به جواب من توجه کردی و خب متوجه شدم که مشکل اصلیات اینه که میخوای بدون چطوری حافظه W25Q256JVEIQ رو به میکروکنترلر STM32H723ZGT6 متصل کنی و منابع معتبری هم برای این کار پیدا نکردی. چون این میکروکنترلر از OCTOSPI پشتیبانی میکنه و QUADSPI نداره، نیاز به یه سری تنظیمات خاص داره که برات توضیح میدم.
برای اتصال حافظه 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 نیاز داری.
برای اینکه بتونی حافظه رو به درستی وصل کنی، باید تنظیمات زیر رو در CubeMX انجام بدی:
فعالسازی OCTOSPI:
تنظیمات Clock:
تنظیمات Mode:
تنظیمات DMA (اختیاری):
بعد از اینکه تنظیمات CubeMX رو انجام دادی و کد رو generate کردی، باید کدنویسی رو شروع کنی. این مراحل رو دنبال کن:
فعالسازی 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);
خواندن داده از حافظه:
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);
نوشتن داده به حافظه:
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);
پاک کردن حافظه:
0x20
(Sector Erase) یا 0xD8
(Block Erase) استفاده کن.uint8_t erase_cmd = 0x20;
HAL_OSPI_Command(&hospi1, &erase_cmd, HAL_OSPI_TIMEOUT_DEFAULT_VALUE);
برای اینکه بهتر متوجه بشی، میتونی از منابع زیر استفاده کنی:
مستندات STM32H723ZGT6:
مستندات W25Q256JVEIQ:
مثالهای کد:
اگر دادهها به درستی خوانده یا نوشته نمیشن، این مراحل رو بررسی کن:
اگر بازم سوالی داشتی یا به مشکل خوردی، خوشحال میشم کمک کنم. موفق باشی! 😊
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟