• کنترل کننده دسترسی مستقیم به حافظه: طرح، منطق، حالت ها و نحوه عملکرد. سوالات و وظایف کنترل کننده حافظه پویا

    عملکردهای کنترل کننده حافظه پویا:

      تبدیل دستورات MP به دنباله ای از سیگنال های خاص که نوشتن / خواندن را برای ماژول حافظه پویا فراهم می کند.

      اطمینان از حالت بازسازی ماژول حافظه پویا.

      اطمینان از لایه بندی دسترسی به حافظه پویا.

    کنترلر چهار ماژول DRAM را مدیریت می کند. کاهش زمان چرخه دسترسی به حافظه ظرفیت کل 4 ماژول = 1 مگابایت * 32 کلمه در هر کلمه = 4 مگابایت. 22 بیت آدرس استفاده می شود:

    A0 A1 - برای استفاده داخلی MP استفاده می شود. آنها بایت مورد استفاده را تعیین می کنند، آنها در خارج صادر نمی شوند.

    BE3. . . BE0 - بایت فعال شود

    A3 A2 - طبقه بندی را ارائه دهید

    A21 A4 - برای آدرس دهی ورودی های ماژول

    از آنجایی که حافظه بر روی چهار ماژول حافظه ساخته شده است، کنترل کننده باید چهار جفت سیگنال بارق تولید کند.

    M0 M1 ... M3




    9 بیت از آدرس باید توسط کنترلر تشکیل شده و به صورت قطعات صادر شود

    سیگنال نوشتن WE باید تولید شود - نوشتن فعال شود

    DEN - داده را فعال کنید

    ماژول حافظه مستقیماً به گذرگاه پردازنده متصل است.

    سیگنال های وضعیت MP:

    - سیگنالی که تراشه کنترل کننده را فعال می کند

    CLK - این سیگنال باعث تمام تغییرات در ریز مدار می شود

    تعامل MP، کنترلر و بلوک حافظه پویا را در نظر بگیرید

      1. کنترلر درام (cdp)

      حافظه پنهان

    در حال حاضر، یک کش دو سطحی در حال سازماندهی است: داخلی (CASH1)، خارجی (CASH2). حافظه نهان بر روی حافظه ثابت - SRAM ساخته شده است. یک کنترلر حافظه کش وجود دارد.

      1. ویژگی های حافظه کش خارجی

      ظرفیت تا 512 کیلوبایت

      عملکرد عالی (ارائه شده با استفاده از SRAM)

      اطلاعات در بلوک ها ذخیره می شود. بلوک - مجموعه ای از بایت های پیوسته (4 ... 64 بایت). طول یک بلوک معمولاً بسیار بیشتر از طول یک کلمه است.

    انواع نقدی:

      کش انجمنی - کش انجمنی

      کش نگاشت مستقیم - کش نگاشت مستقیم

      کش انجمنی دو طرفه - کش انجمنی دو طرفه

      1. عملکردهای کنترل کننده کش

      تجزیه و تحلیل آدرس فیزیکی. اگر ثابت شود حافظه پنهان - ضربه با خواندن، اطلاعات مورد نیاز از حافظه نهان وارد پردازنده می شود. اگر اتفاق افتاد حافظه پنهان - خانم را بخوانید، سپس اطلاعات از OP استخراج می شود. با پول نقد - رکورد زده است، نتیجه فعلی در حافظه پنهان ذخیره می شود. نقدی - بنویسید خانم، واکنش کنترل کننده کش ممکن است بسته به نوع کش استفاده شده متفاوت باشد:

      ضبط سرتاسر - ضبط در OP انجام می شود.

      Writback - نوشتن در حافظه پنهان انجام می شود. اطلاعات اصلاح شده زمانی که از حافظه نهان بارگیری می شود وارد OP می شود.

      جاسوسی-"استراق سمع"اتوبوس آدرسحافظه پنهان تغییرات محتویات حافظه را که توسط MP آغاز شده است را پیگیری می کند. همه تماس‌ها به OP، با یک سازمان دو سطحی، از حافظه پنهان عبور می‌کنند. اولین تماس به حافظه پنهان می رود. اگر تغییری در محتویات OP توسط استاد دیگری آغاز شود، حافظه پنهان از این تغییرات اطلاعی ندارد. بین اطلاعات ذخیره شده در OP و در حافظه پنهان اختلاف وجود دارد. برای جلوگیری از این امر، از "شنود" در گذرگاه آدرس استفاده می شود. اگر کنترلر تشخیص دهد که به آدرسی دسترسی پیدا کرده است که یک کپی از محتویات آن در حافظه پنهان ذخیره شده است، سلول کش مربوطه نامعتبر اعلام می شود.

      پشتیبانی از فهرست کش. پشتیبانی از اجرای اصول نمایش اطلاعات OP در حافظه پنهان.

    امروزه در دنیای متمدن به سختی می توانید شخصی را پیدا کنید که هرگز از رایانه استفاده نکرده باشد و هیچ ایده ای نداشته باشد. بنابراین، به جای اینکه یک بار دیگر در مورد بخش های شناخته شده این سیستم پیچیده صحبت کنیم، چیزی را به شما خواهیم گفت که هنوز نمی دانید. ما در مورد کنترل کننده های حافظه بحث خواهیم کرد و توضیح کوتاهی ارائه خواهیم داد که بدون آنها عملکرد رایانه غیرممکن است. اگر می خواهید سیستم رایانه شخصی یا لپ تاپ خود را بدانید، باید این را بدانید. و بنابراین، بیایید امروز بحث کنیم که کنترل کننده های حافظه چیست.

    وظیفه ای که کنترل کننده های حافظه رایانه با آن روبرو هستند برای عملکرد رایانه بسیار مهم است. کنترلر حافظه تراشه ای است که روی مادربرد یا روی واحد پردازش مرکزی قرار دارد. عملکرد اصلی این تراشه کوچک کنترل جریان داده ها، ورودی و خروجی است. وظیفه ثانویه کنترلر حافظه افزایش پتانسیل و عملکرد سیستم و همچنین قرارگیری یکنواخت و صحیح اطلاعات در حافظه است که به لطف پیشرفت های جدید در زمینه فناوری های جدید در دسترس است.

    مکان کنترل کننده حافظه در کامپیوتر شما به مدل های خاصی از مادربردها و CPU ها بستگی دارد. در برخی از رایانه ها، طراحان این تراشه را بر روی اتصال موازی شمالی مادربرد قرار داده اند، در حالی که در رایانه های دیگر این تراشه را روی CPU «دی» قرار داده اند. آن دسته از سیستم هایی که برای نصب کنترلر در مادربرد طراحی شده اند، دارای تعداد زیادی سوکت فیزیکی مختلف هستند. رم مورد استفاده در این نوع کامپیوترها نیز طراحی مدرن جدیدی دارد.

    هدف اصلی استفاده از کنترلر حافظه در کامپیوتر این است که به سیستم اجازه دهد تغییرات را در RAM بخواند و بنویسد و آن را در هر بوت به روز کند. این به دلیل این واقعیت است که کنترل کننده حافظه بارهای الکتریکی را ارسال می کند که به نوبه خود سیگنال هایی برای انجام اقدامات خاص هستند. بدون پرداختن به اصطلاحات فنی، می‌توان این واقعیت را بیان کرد که کنترل‌کننده‌های حافظه یکی از مهم‌ترین بخش‌های یک رایانه هستند که امکان استفاده از RAM را می‌دهند و بدون آن کار آن غیرممکن است.

    کنترلرهای حافظه انواع مختلفی دارند. آنها در موارد زیر متفاوت هستند:
    - کنترلرهای حافظه با سرعت انتقال داده دو برابر (DDR)؛
    - کنترلرهای حافظه کاملا بافر (FB)؛
    - کنترلرهای دو کاناله (DC).

    عملکردهایی که انواع مختلف کنترلرهای حافظه می توانند انجام دهند با یکدیگر متفاوت هستند. برای مثال، بسته به افزایش یا کاهش نرخ ساعت حافظه، از کنترلرهای حافظه باود دوگانه برای انتقال داده ها استفاده می شود. در حالی که حافظه دو کاناله از دو کنترلر حافظه موازی با یکدیگر استفاده می کند. این به رایانه اجازه می دهد تا با ایجاد کانال های بیشتر، سرعت سیستم را افزایش دهد، اما با وجود مشکلاتی که با استفاده از یک دسته سیم به وجود می آید، این سیستم کاملاً کارآمد عمل می کند. با این حال، هنگام ایجاد کانال های جدید مشکلاتی وجود دارد، بنابراین این نوع کنترل کننده حافظه کامل نیست.

    از طرف دیگر، کنترل‌کننده‌های حافظه کاملاً بافری، با انواع دیگر کنترل‌کننده‌های حافظه متفاوت هستند. این فناوری از کانال های داده سریالی استفاده می کند که برای ارتباط با مادربرد و بر خلاف سایر سیستم ها، مدارهای حافظه رم مورد نیاز است. مزیت این نوع کنترلرها این است که کنترلرهای حافظه کاملاً بافر شده تعداد سیم های استفاده شده در مادربرد را کاهش می دهند و در نتیجه زمان صرف شده برای کار را کاهش می دهند.

    همانطور که قبلاً دیدید، کنترلرهای حافظه برای عملکرد پایدار رایانه بسیار مهم هستند و انواع مختلفی برای اهداف مختلف استفاده می شود. قیمت خطوط حافظه بسته به نوع و عملکردهایی که یک کنترلر حافظه خاص انجام می دهد، از بسیار بالا تا بسیار پایین متغیر است.

    به طور معمول، یک کنترل کننده صنعتی شامل: یک پردازنده مرکزی، رابط های شبکه، ماژول های حافظه و دستگاه های مختلف ورودی/خروجی است.

    ماژول پردازنده PLC از اجزای زیر تشکیل شده است: ریزپردازنده یا CPU (واحد پردازش مرکزی)، ساعت واقعی، دستگاه های حافظه و نگهبان.

    ویژگی های اصلی ریزپردازنده عبارتند از: فرکانس ساعت، عمق بیت، پشتیبانی از پورت برای دستگاه های مختلف ورودی / خروجی، معماری، پارامترهای عملکرد برای محدوده دمایی خاص، عملیات نقطه شناور، سطح مصرف انرژی.

    عملکرد ریزپردازنده ها با معماری یکسان با سرعت کلاک متناسب است. اکثر کنترل‌کننده‌ها از ریزپردازنده‌های پیاده‌سازی شده بر روی معماری RISC (Reduced Instruction Set Computing) استفاده می‌کنند که تعداد دستورالعمل‌های کمتری دارند. در این مورد، ریزپردازنده از تعداد معینی دستورالعمل استفاده می کند که طول یکسانی دارند و تعداد زیادی ثبات. به لطف مجموعه‌ای از دستورالعمل‌ها، می‌توان کامپایلرهایی با شاخص‌های راندمان بالا و همچنین خط لوله پردازشگر ایجاد کرد که می‌تواند نتیجه اجرای اقدامات یکی از دستورالعمل‌ها را در یک چرخه ساعت ایجاد کند.

    کنترل‌کننده‌های صنعتی که با پردازش فشرده داده‌های ریاضی سروکار دارند، به یک پردازنده کمکی ریاضی (پردازنده کمکی که عملیات ممیز شناور را انجام می‌دهد) یا استفاده از پردازنده‌های سیگنالی که عملیات ریاضی را برای یک سیکل ساعت انجام می‌دهند، نیاز دارند. به لطف پردازنده های سیگنال، شتاب قابل توجهی در عملیات تبدیل فوریه سریع یا کانولوشن به دست می آید.

    ظرفیت حافظه با تعداد متغیرهایی که در حین کار PLC قابل پردازش هستند مشخص می شود. زمان دسترسی به حافظه ریزپردازنده یکی از شاخص ترین شاخص هایی است که می تواند عملکرد را محدود کند. به همین دلیل، حافظه با در نظر گرفتن فرکانس و سرعت استفاده از داده های موجود در آن به سطوح سلسله مراتبی تقسیم می شود.سلسله مراتب حافظه یکی دیگر از شاخص های مهم معماری پردازنده است که به شما امکان می دهد سطح تأثیر منفی احتمالی را کاهش دهید. حافظه آهسته بر سرعت ریزپردازنده.

    انواع اصلی حافظه برای کنترلرهای صنعتی (PLC):

    • رام - حافظه فقط خواندنی.
    • RAM - حافظه دسترسی تصادفی؛
    • مجموعه ثبت نام

    مجموعه ای از ثبات ها سریع ترین عناصر حافظه هستند، زیرا توسط ALU (واحد منطق حسابی) برای اجرای ساده ترین دستورالعمل های پردازنده استفاده می شوند. ROM به عنوان مکانی برای ذخیره اطلاعاتی استفاده می شود که به ندرت تغییر می کند - سیستم عامل، بوت لودر، درایورهای دستگاه یا ماژول اجرایی یک برنامه. RAM مستقیماً داده هایی را ذخیره می کند که در طول عملکرد کنترلر در معرض تغییرات متعدد قرار می گیرند. به عنوان مثال، اطلاعات مربوط به تشخیص، متغیرهای نمایش داده شده در صفحه نمایش، مقادیر برچسب، محاسبات میانی، داده های نمایش داده شده در نمودارها. نقش ROM (ROM - Read Only Memory)، به عنوان یک قاعده، حافظه قابل پاک کردن الکتریکی قابل برنامه ریزی مجدد است (EEPROM - Electrically Erasable Programmable ROM). به هر حال، فلش مموری در اصل نوعی EEPROM است. اصل کار آن ذخیره یک بار مشخص در خازن است که توسط زیرلایه ماسفت و دروازه شناور تشکیل می شود. ویژگی اصلی فلش مموری عدم فرار مطلق آن است، یعنی. توانایی ذخیره داده ها در صورت عدم وجود برق. به روز رسانی داده ها در حافظه فلش در سلول های جداگانه اتفاق نمی افتد، بلکه از طریق استفاده از بلوک های بزرگ است. همه رام ها یک اشکال بزرگ دارند - سطح پایین عملکرد.

    تعداد چرخه های وارد کردن اطلاعات به حافظه فلش تنها به چند ده هزار بار محدود می شود. ریزپردازنده های مدرن از حافظه استاتیک (SRAM - حافظه دسترسی تصادفی استاتیک)، حافظه پویا (DRAM - حافظه دسترسی تصادفی پویا) و حافظه دینامیک همزمان (SDRAM - DRAM سنکرون) به عنوان RAM استفاده می کنند. اجرای SRAM روی فلیپ فلاپ هایی انجام می شود که می توانند اطلاعات را به طور نامحدود ذخیره کنند، مشروط بر اینکه برق در دسترس باشد. حافظه دینامیک یک کنترل کننده صنعتی داده های خود را روی خازن ها ذخیره می کند که نیاز به شارژ مجدد دوره ای خازن ها دارد. نقطه ضعف اصلی حافظه ماشه، سطح بالای هزینه و نسبت قیمت به ظرفیت است. این به این دلیل است که تعداد نسبتا کمی فلیپ فلاپ را می توان روی یک تراشه قرار داد. مزایا شامل سطح بالای عملکرد محاسبه شده بر حسب گیگاهرتز است، در حالی که حافظه خازن نمی تواند بر نوار چند صد هرتز غلبه کند. همه انواع RAM از این نظر متفاوت هستند که در صورت عدم وجود برق، تمام اطلاعات موجود در آنها ذخیره نمی شود. به همین دلیل است که برخی از انواع PLC ها در صورت قطعی کوتاه برق در سیستم، از انرژی باتری برای حفظ کارکرد سیستم استفاده می کنند.

    کنترل‌کننده‌های صنعتی ماژولار و تک بلوک از یک گذرگاه موازی برای برقراری ارتباط با ماژول‌های ورودی/خروجی استفاده می‌کنند که در نتیجه عملکرد رای‌گیری بسیار سریع‌تر از گذرگاه سریال است. انواع باس های موازی: VME, PCI, ISA, CXM, ComactPCI, PC/104. یک گذرگاه سریال، مانند RS-485، برای اتصال ماژول های ورودی/خروجی راه دور مورد نیاز است.

    هسته پردازنده میکروکنترلرها:
    - واحد منطق حسابی
    - سازماندهی حافظه

    روز بخیر رادیو آماتورهای عزیز!
    من به شما خوش آمد می گویم به سایت ""

    امروز (به طور دقیق تر، در طی چندین مقاله)، نگاهی دقیق تر خواهیم داشت اساسهر میکروکنترلرهسته پردازنده.

    عناصر ضروری:

    1. واحد منطق حسابی

    ALU- قلب (و شاید ذهن، با شرافت و وجدان) میکروکنترلر.
    در اینجا ما وارد نقش «تجزیه‌کننده دیوانه‌وار» و هجوم به درون این دستگاه نمی‌شویم. ما فقط یاد گرفتیم که به لطف ALU، تمام کار میکروکنترلر انجام می شود. اگر می خواهید عمیق تر یاد بگیرید که چگونه "قلب" میکروکنترلر کار می کند (و اگر ظاهر شود خوب خواهد بود) ، در کتاب های نویسندگان شگفت انگیز Belov ، Ryumik ، Evstifeev ، Revich ، Baranov و بسیاری دیگر ، شما همیشه یک پاسخ مفصل پیدا خواهید کرد.

    2. حافظه میکروکنترلر (سازماندهی حافظه)

    قبل از بررسی حافظه میکروکنترلر، اجازه دهید کمی در مورد حافظه به طور کلی صحبت کنیم.
    حافظه انسان - همه چیز با آن روشن است - می تواند "جامد" باشد (زمانی که در یک حافظه قوی هستید و گاهی اوقات حتی در ذهن درست خود) و متأسفانه "نشت کننده". و تمام اطلاعات در به اصطلاح "نورون" - سلول های حافظه کوچک ذخیره می شود.
    تقریباً همه چیز در مورد میکروکنترلرها یکسان است. فقط اگر فردی کوچکترین سلولی را برای ذخیره اطلاعات به نام "نرون" داشته باشد کوچکترین سلول حافظه برای میکروکنترلربرای ذخیره اطلاعات به نام " بیت“.
    یک بیت می تواند یک منطقی یا یک صفر منطقی را ذخیره کند.
    بیتحداقل واحد اندازه گیری مقدار حافظه در فناوری ریزپردازنده.
    واحد اصلی بعدی یا رایج ترین واحد حافظه است بایت.
    بایتاین هشت بیت اطلاعات است.یک بایت فقط می تواند هشت صفر و یک را ذخیره کند.
    حداکثر عددی که می توان در یک بایت نوشت 255 است. اگر با اعداد زیاد در برنامه کار می کنید، باید بدانید (برای اینکه بدانید تعداد بایت ها برای ذخیره کردن آن نیاز است) حداکثر تعداد قابل نوشتن به:
    – یک بایت = 255
    – دو بایت = 65535
    – سه بایت = 16 777 215
    - چهار بایت - تعداد بیش از 4 میلیارد (اگر حداقل صد نفر از مجله فوربس نباشید، برای ذخیره اعداد به چهار بایت حافظه نیاز نخواهید داشت).
    نوشتن در حافظه و خواندن از حافظه بر حسب بایت انجام می شود (شما نمی توانید یک بیت از اطلاعات را بنویسید یا بخوانید).
    واحد اندازه گیری بعدی است کیلوبایت.
    1024 بایت اطلاعات در یک کیلوبایت وجود دارد. (دقیقا 1024 نه 1000 بایت).
    همچنین مقادیر زیادی برای اندازه گیری مقدار حافظه (مگابایت، گیگابایت) وجود دارد، اما هنوز در میکروکنترلرها استفاده نمی شود.
    امیدوارم با واحدهای اندازه گیری حافظه الکترونیکی همه چیز برای ما روشن باشد:

    سازماندهی حافظه در میکروکنترلر

    تراشه های AVR دارای سه نوع حافظه هستند:
    حافظه برنامه، با نام حافظه FLASH
    حافظه داده، با نام RAM (رم)با نام مستعار SRAM
    حافظه غیر فرار، با نام مستعار EEPROM، با نام مستعار EEPROM
    میکروکنترلر دارد سه فضای آدرسکه انواع حافظه های فوق در آن قرار دارند. در همان زمان، حافظه داده (از نظر فضای آدرس اختصاص داده شده) کمی محروم است - باید فضای آدرس خود را با سلول های حافظه که رجیسترهای همه منظوره و رجیسترهای I/O را ذخیره می کنند به اشتراک بگذارد (در این مورد خواهید آموخت. آنها به تفصیل در مقاله بعدی). این رجیسترها از نظر فیزیکی به حافظه داده تعلق ندارند، اما در همان فضای آدرس قرار دارند. اگر آدرس های شروع حافظه برنامه و حافظه غیر فرار از آدرس صفر شروع شود، آدرس شروع حافظه داده از آدرس صفر شروع نمی شود - رجیسترهای همه منظوره و رجیسترهای I/O جای خود را از آدرس صفر می گیرند و فقط آنها با آدرس سلول های حافظه برنامه دنبال می شوند.
    برخی از انواع ATiny MCU حافظه داده ندارند.

    حافظه برنامه (حافظه فلش)

    حافظه برنامهبرای ذخیره برنامه های ما در آن و همچنین هر داده ای که نیاز داریم که در طول اجرای برنامه تغییر نمی کند (ثابت) طراحی شده است. هنگامی که برق میکروکنترلر خاموش می شود، تمام اطلاعات موجود در حافظه برنامه ذخیره می شود.
    حافظه برنامهالبته همه میکروکنترلرها را دارند. اندازه حافظه برنامه بسته به نوع MK از 1 کیلوبایت تا 256 کیلوبایت متغیر است.
    دسترسی به حافظه برنامهفقط برنامه نویس هنگام برنامه نویسی MK دارد، خود MK نیز به حافظه برنامه دسترسی دارد، اما فقط برای خواندن داده ها از حافظه، نمی تواند چیزی در آنجا بنویسد (هرگز نمی دانید، ناگهان می خواهد برنامه ما را خراب کند). درست است که MK خانواده مگا این فرصت را دارد (با اجازه برنامه نویس) تغییراتی در حافظه برنامه ایجاد کند، اما این یک داستان متفاوت است.
    برای حافظه برنامه، دو نوع دیگر اندازه گیری حافظه وجود دارد - " کلمه"و" صفحه“.
    حقیقت این هست که حافظه برنامه از سلول های متشکل از دو بایت تشکیل شده است. چنین سلولی "کلمه" نامیده می شود.. و این به این صورت انجام می شود زیرا تقریباً تمام دستورات MK از دو بایت تشکیل شده است و بر این اساس برای نوشتن آنها دو بایت در حافظه برنامه لازم است. هر دستور MK یک کلمه است. چندین دستور وجود دارد که برای نوشتن به 4 بایت حافظه نیاز دارد - دو کلمه، اما چنین دستوراتی در MKهایی با حافظه برنامه بیشتر از 8 کیلوبایت یافت می شود.
    بدین ترتیب، در یک سلول حافظه برنامه را می توان نوشت:
    - هر دستوری که از دو بایت تشکیل شده باشد
    - نیمی از دستور، متشکل از 4 بایت
    - دو ثابت که هر کدام در یک بایت یا یک ثابت شانزده بیتی قرار می گیرند. در عین حال، اگر سه ثابت یک بایتی در حافظه بنویسید، آنها همچنان چهار بایت (دو کلمه) در حافظه اشغال خواهند کرد.
    بعلاوه، نوشتن در حافظه برنامه نه تنها توسط "کلمات"، بلکه توسط "صفحات" انجام می شود. . اندازه صفحهاز 64 تا 256 بایت است (هرچه مقدار حافظه برنامه بیشتر باشد، "صفحه" بزرگتر است). چه مفهومی داره. اگر برنامه کوچکی بسازید که 11 کلمه (22 بایت) باشد، باز هم یک صفحه از حافظه برنامه را اشغال می کند. حداقل 64 بایت 42 بایت "اضافی" با صفر یا یک پر می شود. اینها پای هستند.
    اما این همه ماجرا نیست.
    حافظه برنامه می تواند سه حالت داشته باشد(اگر بتوانم بگویم):
    1. تمام حافظه در اختیار برنامه نویس است
    در این صورت می توانیم تمام حافظه را به طور کامل با برنامه و اطلاعات خود پر کنیم. و برنامه از آدرس حافظه صفر شروع می شود.
    2. بخشی از حافظه MK می گیرد
    در صورتی که MK در حین کار استفاده شود (و امیدوارم به خاطر داشته باشید که چیست)، MK بخشی از حافظه را برای نیازهای پردازش وقفه می گیرد و آن را در آن ذخیره می کند. بردارهای وقفه“.
    آنچه هست.
    وقتی به MK اجازه پردازش وقفه‌ها را می‌دهیم، با شروع از آدرس صفر حافظه، تعدادی از سلول‌ها را می‌گیرد تا آدرس‌ها را در آنها ذخیره کند، که MK باید برای اجرای روال وقفه به آن‌ها برود. برای هر وقفه، MK دو بایت حافظه (یک کلمه) اختصاص می‌دهد که آدرس‌های روال وقفه را ذخیره می‌کند. این آدرس‌ها که نشان می‌دهند زیربرنامه پردازش این یا آن وقفه کجا در حافظه قرار دارد، نامیده می‌شوند. بردارهای وقفه". و کل فضای حافظه که در آن "بردارهای وقفه" ذخیره می شود نامیده می شود. جدول برداری وقفه. تعداد سلول های حافظه اشغال شده برای وقفه ها مستقیماً به تعداد وقفه های ممکن برای یک میکروکنترلر معین (از چند تا چند ده) بستگی دارد. تمام وقفه ها در ابتدای حافظه برنامه، از آدرس صفر قرار دارند و دارای ترتیب مشخصی هستند. در آدرس صفر، بردار وقفه بازنشانی همیشه قرار دارد. وقتی دستگاه را روشن می کنیم یا با دکمه ریست می کنیم، وقفه ریست راه اندازی می شود. MK از آدرس صفر (از سلول) آدرسی را می خواند که نشان می دهد ابتدای برنامه ما در کجای حافظه قرار دارد و با رفتن به این آدرس شروع به اجرای برنامه می کند. خود برنامه در این حالت بلافاصله پس از جدول وقفه در حافظه برنامه قرار می گیرد.
    3. MK بخش دیگری از حافظه برنامه را می گیرد (به طور دقیق تر، آن را نمی گیرد، بلکه منطقه ای را در انتهای حافظه اختصاص می دهد، که برنامه نویس برنامه خاصی را در آن قرار می دهد - "لودر").
    این امکان در MCU های خانواده "MEGA" وجود دارد که این قابلیت را دارند که به MCU اجازه ایجاد تغییراتی در حافظه برنامه بدهند.چه مفهومی داره.
    برخی از MK ها این توانایی را دارند خود برنامه ریزی. در تمرین آماتورها، از این امکان MK بسیار نادر استفاده می شود. توانایی برنامه ریزی مجدد (خودبرنامه ریزی) عمدتاً در موارد تولید صنعتی یک دستگاه بر روی میکروکنترلر مورد نیاز است که می توان برای آن یک به روز رسانی نرم افزاری منتشر کرد. ما این احتمال را حداقل هنوز در نظر نخواهیم گرفت. فقط باید بدانیم که در MK هایی که از خودبرنامه ریزی پشتیبانی می کنند، حافظه برنامه به دو قسمت تقسیم می شود :
    - بالا - بخش برنامه کاربردی، جایی که برنامه ما در آن قرار دارد و بردارهای وقفه
    - پایین تر - بخش بوت لودر (بخش بوت لودر- به زبان انگلیسی)، جایی که برنامه نویس برنامه لودر خود را قرار می دهد. اندازه بخش بوت لودر به حجم کل حافظه برنامه MK بستگی دارد و می تواند از 128 بایت تا 4096 بایت باشد. اگر از امکان خودبرنامه‌نویسی MK استفاده نکنیم، این بخش برای برنامه و داده‌های ما داده می‌شود.
    خوب، حافظه FLASH حافظه برنامه نامیده می شود، زیرا با استفاده از فناوری فلش ساخته شده است (مانند "درایوهای فلش" معمول رایانه برای همه ما).
    حافظه برنامه اجازه 10000 چرخه برنامه ریزی مجدد را می دهد.

    حافظه داده (رم استاتیک، SRAM)

    رم، این است حافظه دادهنوع SRAM، طراحی شده برای ذخیره داده های مختلف به دست آمده در نتیجه برنامه در آن.
    هنگامی که برق میکروکنترلر خاموش می شود، تمام اطلاعات ذخیره شده در آن از بین می رود.
    حافظه دادهتقریباً در همه میکروکنترلرها موجود است (در ساده ترین MKهای خانواده Tiny وجود ندارد).
    در تمام MC های خانواده Mega (و بخشی از MC های خانواده Tiny)، میزان حافظه داخلی داخلی از 128 بایت تا 8 کیلوبایت متغیر است و تقریباً تمام آن در اختیار ما قرار می گیرد. فقط کمی MK برای سازماندهی پشته نیاز دارد (ما بعداً متوجه خواهیم شد که چیست). برخی از MK ها برای اتصال حافظه خارجی (این می تواند از هر نوع باشد - FLASH، SRAM، EEPROM) تا 64 کیلوبایت فراهم می کند. در مورد اتصال حافظه خارجی در چنین MK ها، آن را به عنوان یک ادامه حافظه داده تبدیل می شود.
    نوشتن و خواندن از حافظه داده بایت به بایت انجام می شود و برخلاف حافظه برنامه به صفحات و کلمات تقسیم نمی شود.

    حافظه غیر فرار (EEPROM)

    حافظه غیر فرارهمچنین به حافظه داده اشاره دارد، اما بر خلاف دومی، دارای چندین ویژگی است. در نظر گرفته شده است که داده ها و ثابت هایی را که در غیاب برق باید حفظ شوند، ذخیره کند.
    همه میکروکنترلرها دارای EEPROM هستند.
    هنگامی که برق میکروکنترلر خاموش می شود، تمام داده های ذخیره شده در حافظه غیر فرار ذخیره می شود (به همین دلیل به آن غیر فرار می گویند).
    مقدار حافظه غیر فراربسته به نوع MK از 64 بایت تا 4 کیلوبایت متغیر است.
    نوشتن و خواندن اطلاعاتدر حافظه بایت به بایت انجام می شود. اما در مدل های قدیمی خانواده MEGA حافظه غیر فرار و همچنین حافظه برنامه دارای رکورد صفحه است. اندازه صفحه کوچک است، فقط 4 بایت. در عمل، این ویژگی مهم نیست - نوشتن و خواندن همچنان بایت به بایت انجام می شود.
    تعداد چرخه های نوشتن و پاک کردنحافظه به 100000 می رسد.
    ویژگی اصلی EEPROM این است که وقتی داده روی آن نوشته می شود، بسیار "آهسته" می شود - نوشتن یک بایت می تواند از 2 تا 4 میلی ثانیه طول بکشد (این سرعت بسیار پایین است) و ممکن است مثلاً برخی از - یا وقفه که در این صورت فرآیند نوشتن داده ها خراب می شود.
    علاوه بر این، نوشتن داده ها در حافظه غیر فرار از آدرس صفر توصیه نمی شود (من منبع این اطلاعات را به خاطر نمی آورم، اما دقیقاً چیزی را که در جایی خوانده ام به یاد دارم) - ممکن است داده ها در حین کار با MK آسیب ببینند. . گاهی اوقات برنامه نویسان چند بایت از ابتدای حافظه عقب می نشینند و فقط در سلول های بعدی شروع به نوشتن داده می کنند.

    گاهی اوقات، هنگام توسعه یک دستگاه، نیاز به ذخیره برخی از داده ها در حافظه غیر فرار وجود دارد. در چنین مواردی معمولاً از EEPROM داخلی میکروکنترلر استفاده می شود. اگر کافی نباشد، معمولاً از تراشه های خارجی EEPROM از سری 24lxx استفاده می شود. ریز مدارهای این سری بسیار محبوب هستند. اغلب آنها را می توان در تلفن های همراه قدیمی، برخی از مادربردها، کارتریج های چاپگر و موارد دیگر یافت. قیمت این تراشه ها نیز بسیار جذاب است. به عنوان مثال، 24LC16 11 روبل هزینه دارد.
    این ریز مدار در بسته بندی های مختلفی موجود است که از محبوب ترین آنها می توان به DIP و SOIC اشاره کرد. میکرو مدار دارای پین اوت زیر است:

    همانطور که می بینید، نتیجه گیری بسیار کمی وجود دارد. پس بیایید سعی کنیم بفهمیم چه چیزی چیست.
    A0، A1، A2- در این ریز مدار استفاده نمی شود. آنها را می توان به زمین یا به پاور پلاس متصل کرد. در برخی دیگر از ریز مدارهای سری 24lxx، این پین‌ها می‌توانند آدرس ریزمدار را تنظیم کنند تا بتوانند همزمان 8 میکرومور حافظه را به یک گذرگاه i2c متصل کنند.
    در مقابل- زمین.
    SDA- خط داده
    SCL- خط پالس ساعت
    WP- حفاظت از نوشتن وقتی این پین منطقی 0 باشد، نوشتن در حافظه فعال است. اگر از یک واحد منطقی استفاده کنید، فقط خواندن از حافظه امکان پذیر است.
    Vcc- منبع تغذیه ریز مدار. با توجه به دیتاشیت، ولتاژ آن از 2.5 ولت تا 5.5 ولت تغذیه می شود.

    اتصال به کنترلر.
    اتصال حافظه به MK بسیار ساده است. از تسمه، فقط یک جفت مقاومت با مقاومت حدود 4.7 کیلو اهم مورد نیاز است.

    نرم افزار

    برای کار با حافظه، کتابخانه ای توسعه یافت که توابع زیر را اجرا می کند:

    i2c_init- سرعت پالس های ساعت را که در امتداد خط حرکت می کنند تنظیم می کند SCL.

    تراشه 24LC16 از فرکانس های تا 400 کیلوهرتز پشتیبانی می کند. می توانید فرکانس را به صورت زیر محاسبه کنید:

    فرکانس ساعت CPU- فرکانسی که میکروکنترلر در آن کار می کند

    TWBR- شماره ای که در دفتر ثبت به همین نام نوشته شده است.

    TWPS- پیش تعیین کننده مقادیر پیش مقیاس‌کننده توسط بیت‌های TWPS1 و TWPS0 در ثبات TWSR تنظیم می‌شوند.

    برای کنترلر Atmega 32، جدول زیر معتبر است:

    i2c_start- پیام شروع می فرستد

    i2c_stop- یک پیام توقف ارسال می کند

    i2c_send- یک بایت می فرستد

    i2c_recive- یک بایت دریافت می کند

    i2c_recive_last- آخرین بایت را می گیرد. تفاوت با عملکرد قبلی این است که وقتی یک بایت دریافت می شود، میکروکنترلر یک بیت تایید ارسال نمی کند. اگر هنگام دریافت آخرین بایت، استفاده کنید i2c_reciveسپس خط SDA روی زمین فشرده می شود.

    نوشتن اطلاعات روی تراشه حافظه

    شما می توانید داده ها را به ترتیب تصادفی و صفحه به صفحه بنویسید. از آنجایی که ممکن است چندین دستگاه به طور همزمان در گذرگاه i2c وجود داشته باشد، برای دسترسی به هر دستگاهی، باید آدرس هفت بیتی آن را بدانید. آدرس تراشه 24LC16 به صورت باینری به صورت زیر است:

    بیت های A،B،C برای انتخاب بلوک حافظه استفاده می شوند. 8 بلوک حافظه در تراشه وجود دارد که هر کدام 256 بایت است. بر این اساس، بیت های ABC مقادیری از 000 تا 111 می گیرند.

    برای نوشتن بایت در تراشه، باید دنباله اقدامات زیر را انجام دهید:

    1. رابط i2c را راه اندازی کنید
    2. ارسال پیام شروع
    3. آدرس تراشه + آدرس بلوک حافظه را ارسال کنید
    4. آدرس محل حافظه را برای نوشتن ارسال کنید
    5. ارسال یک بایت داده
    6. یک بسته توقف ارسال کنید

    مثال:نیاز به نوشتن یک بایت 0xFAتوسط آدرس 0x101.

    i2c_init را فراخوانی کنید
    i2c_start را فراخوانی کنید
    دمای ldi، 0b 1010 001 0 // آدرس تراشه که در آن:
    // 1010 - آدرس تراشه
    // 001 - آدرس بلوک حافظه (سلول 0x101 متعلق به بلوک 1 است)
    // 0
    با i2c_send تماس بگیرید
    ldi temp.1 //آدرس سلول حافظه. (بلوک 1، سلول 1)
    با i2c_send تماس بگیرید
    lditemp، 0xFA //بایتی را که باید در رجیستر نوشته شود بارگیری کنید
    با i2c_send تماس بگیرید //یک بایت بنویس
    با i2c_stop تماس بگیرید

    شما می توانید داده ها را نه تنها بایت به بایت، بلکه صفحه به صفحه نیز در حافظه بنویسید. حجم صفحه 16 بایت است. ورود پست صفحه دلالت بر این دارد: آدرس بایت صفر صفحه مورد نظر را ارسال می کنیم و پس از آن 16 بار داده مورد نظر را ارسال می کنیم. شمارنده آدرس به طور خودکار یک عدد افزایش می یابد. اگر برای بار هفدهم داده ارسال کنید، بایت تهی بازنویسی می شود، اگر بایت را برای بار 18 ارسال کنید، بایت شماره 1 و غیره را بازنویسی می کند.

    مثال: نوشتن صفحه اول بلوک 0 الزامی است.

    i2c_init را فراخوانی کنید //اینترفیس i2c را راه اندازی کنید
    i2c_start را فراخوانی کنید // پیام شروع را ارسال کنید
    دمای ldi، 0b 1010 000 0 // آدرس تراشه که در آن:
    // 1010 - آدرس تراشه
    // 000 - آدرس بلوک حافظه (ما به بلوک صفر علاقه مند هستیم)
    // 0 - بیت خواندن/نوشتن 0 - نوشتن، 1 - خواندن
    با i2c_send تماس بگیرید
    دمای ldi,16 //آدرس صفحه اول
    با i2c_send تماس بگیرید
    دمای ldi، 0x01 //بایت شماره 0 را در رجیستر بارگذاری کنید
    با i2c_send تماس بگیرید //یک بایت بنویس
    دمای ldi، 0x02 //بایت شماره 1 را در رجیستر بارگذاری کنید
    با i2c_send تماس بگیرید //یک بایت بنویس
    /// بقیه بایت ها را اینجا بنویس.....
    دمای ldi، 0x0E //بایت شماره 14 را در رجیستر بارگذاری کنید
    با i2c_send تماس بگیرید //یک بایت بنویس
    دمای ldi، 0x0F //بایت شماره 15 را در رجیستر بارگذاری کنید
    با i2c_send تماس بگیرید //یک بایت بنویس
    با i2c_stop تماس بگیرید //ارسال پیام توقف

    خواندن داده ها از یک تراشه
    ما به نوعی رکورد را فهمیدیم، حالا بیایید شروع به خواندن کنیم. برای خواندن یک بایت، موارد زیر را انجام دهید:

    1. رابط i2c را راه اندازی کنید (اگر قبلاً اولیه نشده است)
    2. ارسال بسته استارت
    3. آدرس ریز مدار و آدرس بلوک حافظه را از جایی که می خوانیم ارسال کنید
    4. آدرس محل حافظه را ارسال کنید
    5. دوباره پیام شروع ارسال کنید
    6. آدرس تراشه و آدرس بلوک حافظه را با بیت "خواندن" ارسال کنید
    7. بایت را دریافت کنید
    8. ارسال بسته توقف

    i2c_init را فراخوانی کنید //اینترفیس i2c را راه اندازی کنید
    i2c_start را فراخوانی کنید // پیام شروع را ارسال کنید
    lditemp، 0b1010 011 0 // آدرس تراشه + آدرس بلوک سوم حافظه.
    // بیت خواندن/نوشتن هنوز 0 !
    با i2c_send تماس بگیرید
    دمای ldi، 0x41 //آدرس سلول حافظه
    با i2c_send تماس بگیرید
    i2c_start را فراخوانی کنید //ارسال مجدد پیام شروع
    lditemp، 0b1010 011 1 // آدرس تراشه + آدرس بلوک حافظه + بیت خواندن / نوشتن 1 شد
    با i2c_send تماس بگیرید // اکنون می توانید داده ها را بخوانید
    i2c_recive_last را فراخوانی کنید //یک بایت بخوانید. اولین و آخرین.
    با i2c_stop تماس بگیرید //ارسال پیام توقف

    خواندن را می توان به صورت متوالی بایت به بایت انجام داد، یعنی. فقط تماس بگیریدi2c_recive به اندازه نیاز. دستور افزایش یک آدرس نیازی به ارسال ندارد. تغییر آدرس های بلوک در طول خواندن متوالی نیز ضروری نیست. آن ها می توانید بدون هیچ مشکلی کل تراشه را در یک لحظه بردارید و بخوانید.

    کتابخانه کار با i2c بر روی میکروکنترلر Atmega32 ساخته و آزمایش شده است. فکر می کنم روی بسیاری از کنترلرهای دیگر بدون هیچ تغییری کار کند. طبیعتاً کنترلر باید از i2c یا همانطور که TWI نیز نامیده می شود پشتیبانی سخت افزاری داشته باشد. البته i2c به صورت برنامه ای هم قابل پیاده سازی هست ولی من زحمتی ندیدم و نیازی هم نبود. نمونه آزمایشی برنامه ای است که بایت ها را از 0 تا 15 تا 16 آدرس اول می نویسد و پس از نوشتن آنها را به پورت A می فرستد. شما می توانید نحوه کار این را نه تنها به صورت زنده بلکه در Proteus نیز مشاهده کنید.

    و در آخر یک اسیلوگرام را پیوست می کنم:

    این همان چیزی است که اتوبوس i2c از نگاه من به نظر می رسد :-)
    همه سوالات و پیشنهادات در نظرات پذیرفته می شود.