اطلاعیه

Collapse
No announcement yet.

مشکل در کار با fsmc در مد sram آسنکرون 16 بیتی برای ال سی دی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #31
    پاسخ : مشکل در کار با fsmc در مد sram آسنکرون 16 بیتی برای ال سی دی

    نوشته اصلی توسط mohammad55 نمایش پست ها
    سلام
    سال نو مبارک باشه.
    من روی یه برد آموزشی که هم LCD و هم SRAM دارم و میکروی استفاده شده STM32F103ZET می باشد. خواستمLCD را با FSMC راه بیندازم.
    LCD را با gpio راه اندازی کردم و برای دستیابی به سرعت بالاتر می خواهم از FSMC استفاده کنم.
    از stm32cubeIde استفاده کردم که بالتبع تنظیمات fsmc را با stm32cubeMx تولید کردم.
    اما مشکل زمانی است که بخواهم داده ای را بنویسم. چیزی که روی پورت data قرار می گیرد متفاوت از چیزی است که نوشته می شود. مثلا 0x22 را می نویسم ولی چیزی که روی پورت قرار می گیرد 0xFB است. یا مثلا 0x1111 را می نویسم ولی چیزی که روی پورت می رود 0xF0 هست.
    اتصالات را طبق دیتاشیت هم با شماتیک برد و هم با تست بوق چک کردم درست هست.


    uint16_t *DataAddress=(uint16_t*)0x6C000000;
    uint16_t *InsAddress=(uint16_t*)0x6C000800;
    *(InsAddress)=0x22;

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

    fsmc بعنوان کنترلر باس پارالل رم و فلش ( الان تقریبا این فلشها منقرض شدن ) چه ارتباطی به LCD داره ؟

    نوع و درایور lcd اتون چیه ؟

    برای انواع ال سی دی پارالل ۸ و ۱۶ بیت رایج کتابخونه های مختلف موجوده ، اس تی چند تا فریمور بهینه اختصاصی برای این کاربردها ( شامل gui و موتور تعاملی هم میشه ) منطبق با انواع میکروهاش رو اپن سورس ارائه داده ... چند تا پلتفورم توسعه گرافیکی هم داره .

    برای کسایی که میخوان از حداکثر پتانسیلهای باس پارالل و ال سی دی استفاده کنن ( منوط به اینکه باس پارالل واقعا پیش نیاز کار مد نظر باشه ، خیلی کاربردها رو میشه با پروتکلهای سریال روی ال سی دی های تا ۳۲۰ در ۴۸۰ با کنترلر cog پیاده کرد ، ۲۰-۳۰ پایه میکرو رو هدر نداد )
    در این نوع کاربردها مستقیما با رجیسترهای ram کنترلر lcd بعنوان فریم بافر از اونطرف و از dma در اینطرف استفاده کنید عملکرد مدیفای شده ، کد از نظر زمان اجرا و حجم منابع درگیر کم ترین مقادیر با بهترین زمان پاسخ دهی رو ارائه میدن .

    یه مقدار بیشتر راجع به پیش نیازهای کار مد نظرتون ( صرفا ورودی و خروجی خام و ریسپانس تایمها ) توضیح بدید میشه نهایتا نتیجه گرفت از کدوم متد بهترین و بالانس ترین عملکرد حاصل میشه .

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

    جمعا نوع کاربرد و حوزه استفاده و هزینه سیستم هدف ، معیار تصمیم گیریه.
    شاید در فاز طراحی به این نتیجه برسیم میکرو و ال سی دی برای اون حوزه استفاده اصلا اشتباه انتخاب شده ..
    جدیدترین ویرایش توسط Amie.s.m; ۲۰:۳۳ ۱۴۰۲/۰۱/۱۱.

    دیدگاه


      #32
      پاسخ : مشکل در کار با fsmc در مد sram آسنکرون 16 بیتی برای ال سی دی

      نوشته اصلی توسط Amie.s.m نمایش پست ها
      دوست عزیز اطلاعات اولیه ای دادید منطبق با کاری که مد نظرتونه نیست ...

      fsmc بعنوان کنترلر باس پارالل رم و فلش ( الان تقریبا این فلشها منقرض شدن ) چه ارتباطی به LCD داره ؟

      نوع و درایور lcd اتون چیه ؟

      برای انواع ال سی دی پارالل ۸ و ۱۶ بیت رایج کتابخونه های مختلف موجوده ، اس تی چند تا فریمور بهینه اختصاصی برای این کاربردها ( شامل gui و موتور تعاملی هم میشه ) منطبق با انواع میکروهاش رو اپن سورس ارائه داده ... چند تا پلتفورم توسعه گرافیکی هم داره .

      برای کسایی که میخوان از حداکثر پتانسیلهای باس پارالل و ال سی دی استفاده کنن ( منوط به اینکه باس پارالل واقعا پیش نیاز کار مد نظر باشه ، خیلی کاربردها رو میشه با پروتکلهای سریال روی ال سی دی های تا ۳۲۰ در ۴۸۰ با کنترلر cog پیاده کرد ، ۲۰-۳۰ پایه میکرو رو هدر نداد )
      در این نوع کاربردها مستقیما با رجیسترهای ram کنترلر lcd بعنوان فریم بافر از اونطرف و از dma در اینطرف استفاده کنید عملکرد مدیفای شده ، کد از نظر زمان اجرا و حجم منابع درگیر کم ترین مقادیر با بهترین زمان پاسخ دهی رو ارائه میدن .

      یه مقدار بیشتر راجع به پیش نیازهای کار مد نظرتون ( صرفا ورودی و خروجی خام و ریسپانس تایمها ) توضیح بدید میشه نهایتا نتیجه گرفت از کدوم متد بهترین و بالانس ترین عملکرد حاصل میشه .

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

      جمعا نوع کاربرد و حوزه استفاده و هزینه سیستم هدف ، معیار تصمیم گیریه.
      شاید در فاز طراحی به این نتیجه برسیم میکرو و ال سی دی برای اون حوزه استفاده اصلا اشتباه انتخاب شده ..
      ممنون از پاسخ گویی تون
      اینکه می فرمایید FSMC ربطی به LCD ندارد . خوب باید بگم که شدنی است و خود ST هم این امکان را در نرم افزارش گذاشته . چیپ lcd ، آی سی HX8352B می باشد .الان مشکل خود FSMC هست چون برای راه اندازی SRAM موجود در برد نیز همین مشکل را دارم. اینکه می فرمایید باید از dma استفاده کنیم خوب اول باید fsmc راه بیفتد تا بعدا اون را به dma متصل کنم.

      دیدگاه


        #33
        پاسخ : مشکل در کار با fsmc در مد sram آسنکرون 16 بیتی برای ال سی دی

        دوست عزیز

        نگفتم نشدنیه ، ( اینایی که بهشون میگیم درایور ال سی دی از نظر ارتباط با میکرو اول و آخرش یک بخش رم هستن که دارن توسط یک یا چند مدل باس سریال یا پارالل روشون دیتا نوشته و خونده میشه ... با یه سری کامند تعریف میشه حالا این دیتا کدوم بخشهاش تغییر کنه نهایتا چطور نمایش داده بشه )

        fsmc مثل سایر پریفرالها یک تجهیز جانبی هست ، همون موارد عمومی سایر پریفرالها رو راجع به fsmc هم داریم باضافه پهنای باند بیشتر که اینم بخاطر پهنای باند ذاتا بالاتر این پریفراله .

        در مورد dma این هم یک واحد مجزاست ، بسته به میکرو که کدوم پرفرالها توسط dma سرویس دهی میتونن بشن و چند تا dma داریم دسترسی به مموری ( منظور بیشتر رم سیستم و رجیسترهای پریفراله ) و روند فرایند کنترل دیتا رو میشه بجای پردازنده بوسیله dma هم انجام داد .

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

        مثلا همین نمایشگر مد نظرتون رو میخوایم به اینصورت استفاده کنیم :

        دیتا رو از فلش spi یا sdio بخونیم ( تصاویر مد نظرمون داخل فلش یا اس دی کارت ذخیره شده ) ،
        دیتایی که از فلش سریال خونده میشه ( بصورت سکتوری یا صفحه ای ) روی فریم بافر ( که الان رم نمایشگره ) بریزیم ، نهایتا یه بخشهایی از دیتای فریم بافر رو تغییر بدیم ( مثلا شماره و تاریخ به شکل کاراکتری پایین تصاویر بزنیم )
        نهایتا دستور نمایش تصویر به شکل عادی یا چرخش ۹۰ درجه و میرور و غیره رو به ال سی دی بدیم .

        فرایند فوق از نظر روند پردازشی یک کار ساده ولی از نظر حجم دیتا یک کار سنگینه ( یک نمایشگر 480 در 320 با عمق رنگ ۲۴ بیت هر فریمش حدود ۴۶۱ کیلوبایت دیتاست ... مهم نیست دارید تصویر jpg بارگذاری میکنید یا یک رنگ ساده بک گرند ، برای هر فریم تصویر ۴۶۱ کیلوبایت دیتای خام باید بارگذاری بشه ) .

        فرض کنیم تصاویر کدک شده روی فلش ریخته نشدن و همون تصویر خامه .

        فلش بسته به وضعیتش که spi یا qspi هست و بسته به کلاک با سرعتی بین ۱۸ تا ۴۴۸ مگابیت بر ثانیه ( معادل ۲ تا ۵۶ مگابایت ثانیه ) داره خونده میشه ... به شکل بسته های ۵۱۲ یا ۱۰۲۴ بایتی روی رم قرار میگیره ...
        این بسته ها به نوبت توسط باس پارالل روی رم نمایشگر بارگذاری میشن تا یک فریم کامل بشه و با یه کامند نمایش داده بشه .

        پردازنده رو بخواییم درگیر این کار ساده حجیم بکنیم در کیس اول هر ۴۵۰ نانو ثانیه یک بایت دیتا روی رجیستر spi قرار میگیره ، پردازنده باید بره یک بایت دیتا رو بخونه بعد یک بایت رو بیاره بریزه روی رم نمایشگر فرضا ۸ بیتی ( حدود ۵۰ نانوثانیه هم اینجا هدر میره ) ، دوباره سیکل تکرار میشه ... ۱۰۲۴ بار تکرار این سیکل تازه میشه یک صفحه فلش ( ۵۰۰ میکروثانیه زمان برد ) .
        این حرکت باید ۴۶۱سیکل تکرار بشه تا یک فریم تصویر تشکیل بشه ( حدود ۲۵۰ میلی ثانیه زمان برد )

        طی این فرایند حجیم و کند پردازنده شما تقریبا دائم درگیر بوده که یک فریم دیتا رو از یک پریفرال بگیره بریزه روی یک پریفرال دیگه ، حداقل ۱ کیلوبایت هم رم رو به شکل بافر میانی اشغال کرد .

        همین کار رو با dma به این دو شکل میشه انجام داد :
        هر زمان وقفه spi ست شد dma رجیستر دیتا رو میره کپی میکنه روی رم سیستم و یدونه به پوینتر رم اضافه میکنه .
        ۳۲ بایت روی رم ذخیره شد ، ۱۶ سیکل دیتای ۲ بایتی روی پورت x میریزه .
        هر ۳۲ بار تکرار این روند معادل ۱ کیلوبایت دیتا انتقال داده شده از یک صفحه فلش به رم نمایشگره .
        ۴۶۱ بار تکرارش معادل انتقال یک فریم نمایشگره .
        اول کار پردازنده اعداد فوق رو به dma اعلام میکنه و بعد dma استارت میشه ... تا انتهای فرایند پردازنده خودش رو درگیر روند انتقال دیتا از spi به نمایشگر نمیکنه .

        بجای انتقال ۳۲ بایتی به رم میشد پریفرال spi رو مستقیم به پریفرال port x وصل کرد کار که تموم شد به پردازنده اطلاع میده و حالا پردازنده قراره کجای این دیتا رو دستکاری کنه و کامند نمایش رو صادر کنه یه روند مجزای از نظر زمانی بسیار کوچکه .

        اینکه شما از fsmc بجای پورت استفاده کنی ( در دوش از دید تنظیمات dma و روند انتقال دیتا از پریفرال به پریفراله ) تفاوتی در سرعت و نحوه مدیریت داده و بار پردازشی و غیره بوجود نمیاره .
        در حالت dma با پورت مستقیم میتونی تغییرات مد نظر روی بخشهای خاص دیتای انتقالی به رم نمایشگر ( بافرهای ۳۲ بایتی واسط ) رو اعمال کنی ... با fsmc نمیشه .

        اعداد و ارقام همونطور که معلومه در این روش بسیار کنده ( با ریت ۵ فریم در ثانیه مسلما نمیشه رابط تعاملی ساخت ... زمانهای پاسخ دهی هم با متوسط ۲۵۰ میلی ثانیه عملا فاجعه است )

        چطور میشه قضیه رو بهینه سازی کرد ( تا کجا میشه حجم دیتا رو آورد پایین ، تا کجا میشه کارای تکراری رو روی فریم بافر حذف کرد ) اینا یک موضوعه ...

        اینکه برنامه نویس نخواد درگیر قضایای پشت پرده بشه و انتظار عملکرد سریع داشته باشه ( حداکثر ریسپانس تایم مثلا ۲۰ میلی ثانیه که بازم کنده ولی میگیم بعنوان حداقل پیش نیاز معادل رفرش ریت ۵۰ هرتز قبوله ) موضوعیه که شما با کتابخانه آماده قرار نیست بهش برسی .

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

        اگر نتونستید مساله رو رفع کنید ( موضوع همونطور که اول گفتم با پریفرالی مثل fsmc و اینکه راه بیفته یا نه ارتباطی نداره )

        با نمونه کد و پروژه عملی قضیه و نکات جانبی اش رو راحت تر و ملموس تر میشه منتقل کرد .

        دیدگاه

        لطفا صبر کنید...
        X