اطلاعیه

Collapse
No announcement yet.

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

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

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

    اینطوری که من متوجه شدم این بانک حافظه قسمتی از حافظه درون خود میکرو هستش که توی مموری مپ تو دیتاشیت پیداش کردم.حالا با توجه به پایه ای از 25 تا پین FSMC_Ax که به پایه rs ال سی دی وصله با توجه به پین NEx که چهار تاست و یکیش به پین CS ال سی دی وصل میشه دوتا خونه از این بانک حافظه با توجه به صفر و یک شدن Ax انتخاب میشه و احتمالا 16 بیت چپ یا راست توسط پین NEx مشخص میشه و در واقع تعیین میکنه که این 16 بیت دیتا هست یا ادرس رجیسترهای ال سی دی.
    حالا حدس اولیه من اینه که ما برای اینکه داده رو به 16 خط داده FSMC و از اونجا به ال سی دی بفرستیم باید توسط ادرس این خونه از حافظه به وسیله یک متغیر اشاره گر یا چیزی به این سبک این کارو انجام بدیم.
    همچنان مشغول جمع اوری اطلاعات بیشترم :nerd:
    خطاب به داعش:
    ای وای اگر پا به حرم بگذاری/یک تکه ز دیوار حرم برداری/شیعه به بین الحرمین حساس است/گفتم که به گوش سگیت بسپاری
    ما از سبوی شاه دین مجنون و مستیم/برگرد تا سربند یا زهرا(س) نبستیم

    دیدگاه


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

      دوستان با توجه به دریافت های من از رفرنس منوال های شرکت به این نتیجه رسیدم که:
      1)ما برای ارتباط با ال سی دی حالات مختلفی برای حافظه اون داریم که شامل دو حالت اصلی سنکرون و آسنکرون هست و خود اسنکرون دارای چهار هست که ما فقط میتونیم از دو حالت معمولی و مولتی پلکس استفاده کنیم
      2)برای استفاده از حالت های دسترسی بالا نیاز به چهار خط کنترلی و یک دیتاباس 16 بیتی داریم
      3) بعد از اتصال خطوط کنترلی که بعدا مفصلا توضیح داده میشه از طریق همونا به صورت زیر میتونیم ادرسی رو که از حافظه میکرو برای کارمون اختصاص دادیم تعیین کنیم به این صورت که:
      برای خط کنترلی NEx اگر یکی از چهار پین رو به پین CS ال سی دی وصل کنیم به ترتیب رقم دوم پر ارزشتر ادرس دارای مقادیر 0 4 8 و C خواهد بود.وبرای خط کنترلی Ax اگر یکی از 25 پین را به پین RS ال سی دی متصل کنیم مقدار هگز معادل عدد دودویی که با یک کردن این پین در بین 24 پین صفر دیگر بدست میاد در ادرس ما قرار میگیرد.به طور مثال اگر پین NE4 و A10 رو که توی برد اموزشی این فروشگاه به ال سی دی وصل هست در نظر بگیریم در مجموع دارای دو ادرس 0x6C000200 هگز و 0x6C000000 هگز در خانه حافظه میکرو میباشیم.
      4)این دو ادرس برای ما حائز اهمیت هست زیرا با نوشتن در یکی از انها این مقدار به طور اتوماتیک به دیتا باس FSMC انتقال پیدا میکنه و در صورت خواندن از ال سی دی این مقدار به یکی دیگه از این ادرس ها ریخته میشه که ما توسط اشاره گر میتونیم به اونا دسترسی داشته باشیم
      خطاب به داعش:
      ای وای اگر پا به حرم بگذاری/یک تکه ز دیوار حرم برداری/شیعه به بین الحرمین حساس است/گفتم که به گوش سگیت بسپاری
      ما از سبوی شاه دین مجنون و مستیم/برگرد تا سربند یا زهرا(س) نبستیم

      دیدگاه


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

        با توجه به انواع مد هایی که تو انتقال اطلاعات توسط چها خط کنترلی مطرح هست اینه که ما از کدوم مد باید استفاده بکنیم؟؟!!
        در مد معمولی شماره 1 به این صورت هست که یک داده رو فقط از روی باس میشه دریافت کرد یا ارسال کرد.اما در حالت دیگه یا همون حالت مالتی پلکس ابتدا یک داده ارسال و سپس دریافت میشه و یا دو داده فقط ارسال میشه.
        حالا با توجه به اینکه در ال سی دی ما یک ادرس داریم و یک دیتا لاجرم باید از حالت دوم استفاده کنیم(البته این یه نظر از طرف من هست و ممکنه غلط باشه چون هنوز وارد فاز برنامه نویسی و اجرا نشدم).به این ترتیب که ابتدا ادرس رجیستری از ال سی دی رو ارسال و سپس داده رو روی اون ارسال و یا از اون دریافت میکنیم که این کار توسط چهار خط کنترلی انجام میشه.
        فرق این حالت با حالت قبلی احتمالا در سرعت کار هست که چهار برابر بیشتر به نظر میاد اگر بخواهیم تو حالت اول هم ادرس بدیم هم داده!!
        لطفا شمام نظر بدید و همراهی کنید تا منم دلگرمتر به شم به پیگیری :nerd:
        خطاب به داعش:
        ای وای اگر پا به حرم بگذاری/یک تکه ز دیوار حرم برداری/شیعه به بین الحرمین حساس است/گفتم که به گوش سگیت بسپاری
        ما از سبوی شاه دین مجنون و مستیم/برگرد تا سربند یا زهرا(س) نبستیم

        دیدگاه


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

          دوستان بالاخره تا حد زیادی که بتونم یه ال سی دی رو راه بندازم تونستم راجع به FSMC اطلاعات جمع اوری کنم و رو کاغذ همه رجیسترهای مورد نیاز رو هم مقدارهاشون رو دراوردم.ان شاالله به محض اینکه عملی روی برد پیاده کردم و نتیجه گرفتم به صورت یه فایل پی دی اف یه اموزش کامل ازش در میارم :job: :nerd:
          خطاب به داعش:
          ای وای اگر پا به حرم بگذاری/یک تکه ز دیوار حرم برداری/شیعه به بین الحرمین حساس است/گفتم که به گوش سگیت بسپاری
          ما از سبوی شاه دین مجنون و مستیم/برگرد تا سربند یا زهرا(س) نبستیم

          دیدگاه


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

            اگه به نتیجه برسین و PDF رو منتشر کنید خیلی عالیه!
            راستش منم یه همچین کاری رو میخوام با این میکرو (یا میکرو های دیگه که SMC دارن) و در آینده انجام بدم.

            دیدگاه


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

              سلام
              اقا ما بالاخره به نتایج بسیار خوبی رسیدیم اما فقط یه مشکل دیگه مونده.توی این FSMC همه چی اتوماتیکه و فقط کافیه بعد از انجام تنظیمات که بعدا اموزش مفصلی راجع بهش مینویسم همینجا،توی خونه ی مشخصی از حافظه مقدار ادرس یا داده یی رو که قراره به رم یا ال سی دی فرستاده بشه رو بنویسیم که طبعا این کار همونطور که قبلا حدس زدم توسط اشاره گر انجام میشه.من برنامه ای برای نوشتن در این خونه حافظه نوشتم اما گمونم ایراد داره.چون تو دیباگ سخت افزاری مقدار خونه حافظه تغییری نمیکنه!!
              این کار رو برای نوشتن در این خونه حافظه که انجام میدم برنامه این خط رو اجرا میکنه اما برای خوندن این خونه از حافظه توسط اشاره گر برنامه کامپایل میشه اما تو اجرا قاط میزنه و انگار میکرو گیر کنه دیگه کاری انجام نمیده و دیباگر نمیتونه به خط بعدی بره!!!شما میدونید مشکلش چیه؟؟؟
              برنامه رو زیر اوردم:
              اولی مال نوشتنه:
              کد:
              void write_address(unsigned short int address)
              {
              FSMC_BCR1=0x00005059;
              *(volatile unsigned short int*)(0x6c000000) = address;
              }
              این یکی هم مال خوندن که میکرو توش گیر میکنه:
              کد:
              unsigned short int read_data(unsigned short int address)
              {
              write_address(address);
              FSMC_BCR1=0x00004059;
              unsigned short int s;
              s=*(volatile unsigned short int*)(0x6c000200);
              
              return s;
              }

              در واقع ما تو این دوتا برنامه قراره داده های تو خونه های حافظه با ادرس های 0x6c000000 و 0x6c000200 روش بنویسیم و ازش بخونیم
              خطاب به داعش:
              ای وای اگر پا به حرم بگذاری/یک تکه ز دیوار حرم برداری/شیعه به بین الحرمین حساس است/گفتم که به گوش سگیت بسپاری
              ما از سبوی شاه دین مجنون و مستیم/برگرد تا سربند یا زهرا(س) نبستیم

              دیدگاه


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

                با سلام
                این نمونه کد keil برای کانفیگ ال سی دی با fsmc سری stm32f10x هستش

                نخست کانفیگ ریجستر های خواندن ونوشتن
                کد:
                /*--------------- Graphic LCD interface hardware definitions -----------------*/
                
                /* Note: LCD /CS is CE4 - Bank 4 of NOR/SRAM Bank 1~4 */
                #define LCD_BASE    (0x60000000UL | 0x0C000000UL)
                #define LCD_REG16 (*((volatile unsigned short *)(LCD_BASE ))) 
                #define LCD_DAT16 (*((volatile unsigned short *)(LCD_BASE+2)))
                
                #define BG_COLOR 0           /* Background color          */
                #define TXT_COLOR 1           /* Text color             */
                دومین مرحله تابع های خواند و نوشتن روی ال سی دی
                کد:
                /*******************************************************************************
                * Write a command the LCD controller                      *
                *  Parameter:  cmd:  command to be written                *
                *  Return:                                  *
                *******************************************************************************/
                
                static __inline void wr_cmd (unsigned char cmd) {
                
                 LCD_REG16 = cmd;
                }
                
                
                /*******************************************************************************
                * Write data to the LCD controller                       *
                *  Parameter:  dat:  data to be written                  *
                *  Return:                                  *
                *******************************************************************************/
                
                static __inline void wr_dat (unsigned short dat) {
                
                 LCD_DAT16 = dat;
                }
                سومین مرحله کانفیگ پین های اتصال به ال سی هستش:
                کد:
                /* Configure the LCD Control pins --------------------------------------------*/
                 RCC->APB2ENR |= 0x000001ED;             /* enable GPIOA,D..G, AFIO clock */
                
                 /* PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE) */ 
                 GPIOD->CRL &= ~0x00FF00FF;             /* clear Bits */
                 GPIOD->CRL |= 0x00BB00BB;             /* alternate function output Push-pull 50MHz */
                 /* PD.08(D13), PD.09(D14), PD.10(D15), PD.14(D0), PD.15(D1) */
                 GPIOD->CRH &= ~0xFF000FFF;             /* clear Bits */
                 GPIOD->CRH |= 0xBB000BBB;             /* alternate function output Push-pull 50MHz */
                  
                 /* PE.07(D4) */ 
                 GPIOE->CRL &= ~0xF0000000;             /* clear Bits */
                 GPIOE->CRL |= 0xB0000000;             /* alternate function output Push-pull 50MHz */
                 /* PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10), PE.14(D11), PE.15(D12) */
                 GPIOE->CRH &= ~0xFFFFFFFF;             /* clear Bits */
                 GPIOE->CRH |= 0xBBBBBBBB;             /* alternate function output Push-pull 50MHz */
                
                 /* PF.00(A0 (RS)) */ 
                 GPIOF->CRL &= ~0x0000000F;             /* clear Bits */
                 GPIOF->CRL |= 0x0000000B;             /* alternate function output Push-pull 50MHz */
                
                 /* PG.12(NE4 (LCD/CS)) - CE3(LCD /CS) */
                 GPIOG->CRH &= ~0x000F0000;             /* clear Bits */
                 GPIOG->CRH |= 0x000B0000;             /* alternate function output Push-pull 50MHz */
                
                 /* PA.08(LCD Backlight */
                 GPIOA->BRR |= 0x00000100;             /* Backlight off */
                 GPIOA->CRH &= ~0x0000000F;             /* clear Bits */
                 GPIOA->CRH |= 0x00000003;             /*          output Push-pull 50MHz */
                چهارمین مرحله فعال سازی fsmc با مد دسترسی A هستش.
                کد:
                /*-- FSMC Configuration ------------------------------------------------------*/
                /*----------------------- SRAM Bank 4 ----------------------------------------*/
                 RCC->AHBENR |= (1<<8);               /* enable FSMC clock */
                
                 FSMC_Bank1->BTCR[FSMC_Bank1_NORSRAM4+1] =      /* Bank1 NOR/SRAM timing register configuration */
                                     (0 << 28) | /* FSMC AccessMode A */
                                     (0 << 24) | /* Data Latency */
                                     (1 << 20) | /* CLK Division */
                                     (0 << 16) | /* Bus Turnaround Duration */
                                     (4 << 8) | /* Data SetUp Time */
                                     (0 << 4) | /* Address Hold Time */
                                     (5 << 0);  /* Address SetUp Time */
                 FSMC_Bank1->BTCR[FSMC_Bank1_NORSRAM4 ] =      /* Control register */
                                     (0 << 19) | /* Write burst disabled */
                                     (0 << 15) | /* Async wait disabled */
                                     (0 << 14) | /* Extended mode disabled */
                                     (0 << 13) | /* NWAIT signal is disabled */ 
                                     (1 << 12) | /* Write operation enabled */
                                     (0 << 11) | /* NWAIT signal is active one data cycle before wait state */
                                     (0 << 10) | /* Wrapped burst mode disabled */
                                     (1 << 9) | /* Wait signal polarity active low */
                                     (0 << 8) | /* Burst access mode disabled */
                                     (1 << 4) | /* Memory data bus width is 16 bits */
                                     (0 << 2) | /* Memory type is SRAM */
                                     (0 << 1) | /* Address/Data Multiplexing disable */
                                     (1 << 0);  /* Memory Bank enable */
                و اخرین مرحله config ال سی دی بعد از پیمودن مراحلی قبلی برای مثال ;کانفیگ ili9320
                کد:
                    wr_reg(0x30, 0x0006);
                    wr_reg(0x31, 0x0101);
                    wr_reg(0x32, 0x0003);
                    wr_reg(0x35, 0x0106);
                    wr_reg(0x36, 0x0B02);
                    wr_reg(0x37, 0x0302);
                    wr_reg(0x38, 0x0707);
                    wr_reg(0x39, 0x0007);
                    wr_reg(0x3C, 0x0600);
                    wr_reg(0x3D, 0x020B);
                البته میتونید با دستور
                کد:
                driverCode = rd_reg(0x00);
                switch(driverCode)
                case 0x9320:
                  wr_reg(0x30, 0x0006);
                    wr_reg(0x31, 0x0101);
                    wr_reg(0x32, 0x0003);
                    wr_reg(0x35, 0x0106);
                    wr_reg(0x36, 0x0B02);
                    wr_reg(0x37, 0x0302);
                    wr_reg(0x38, 0x0707);
                    wr_reg(0x39, 0x0007);
                    wr_reg(0x3C, 0x0600);
                    wr_reg(0x3D, 0x020B);//برای ال سی دی ili9320
                case 0x9325:
                    wr_reg(0x0030,0x0000);
                    wr_reg(0x0031,0x0607);
                    wr_reg(0x0032,0x0305);
                    wr_reg(0x0035,0x0000);
                    wr_reg(0x0036,0x1604);
                    wr_reg(0x0037,0x0204);
                    wr_reg(0x0038,0x0001);
                    wr_reg(0x0039,0x0707);
                    wr_reg(0x003C,0x0000);
                    wr_reg(0x003D,0x000F);
                    break;//برای ili9325
                .
                , و غیره
                .
                ال سی دی های متفاوت رو بهش وصل کنیم و با ریست کردت میکرو اتوماتیک ال سی دی های درایور های اون تو دستور های کیس نوشته شده رو راه اندازی کرد.
                راه اندازی enc28j60 و enc424j600 برای RL-TCPnet

                راه اندازیks0108 با emwin

                راه اندازی lcd7 اینچ با داریور داخلی stm32f429

                دیدگاه


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

                  در مورد FSMC دوستان اطلاعات خوبی دادند اما در مورد ادرس دهی اون و ارتباط با LCD:
                  ما چهار بانک رو با ادرس های زیر شروع میکنیم
                  بانک 1 : 0x60000000
                  بانک2 : 0x64000000
                  بانک3 : 0x68000000
                  بانک 4: 0x6C000000
                  که به ترتیب NE1 - NE2-NE3-NE4 مربوط به هر کدام می شود
                  اما در مورد پایه RS فرمول کلی این است
                  BASE ADDRESS=START ADDRESS+(2^PIN ADDRESS)-2
                  برای مثال بانک 1 و پایه A16
                  NE1
                  BASE ADDRESS=0x60000000+20000-2
                  0x6001FFFE
                  موید باشید

                  دیدگاه


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

                    یه سوال
                    من هدر STM32F103RET6 رو دارم تو دیتا شیت که گفته این میکرو FSMC نداره ولی تو برنامه کیل گفته داره کدوم صحت داره؟ بنظر خودم که نداره این واحد رو....

                    دیدگاه


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


                      نه این واحد رو نداره.بعد شما کدوم برنامه رو میگین؟

                      دیدگاه


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

                        تو برنامه کیل وقتی یه پروژه میسازی و وقتی که میکرو رو 103RE انتخاب میکنی نوشته....

                        دیدگاه


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

                          نوشته اصلی توسط moein b
                          در مورد FSMC دوستان اطلاعات خوبی دادند اما در مورد ادرس دهی اون و ارتباط با LCD:
                          ما چهار بانک رو با ادرس های زیر شروع میکنیم
                          بانک 1 : 0x60000000
                          بانک2 : 0x64000000
                          بانک3 : 0x68000000
                          بانک 4: 0x6C000000
                          که به ترتیب NE1 - NE2-NE3-NE4 مربوط به هر کدام می شود
                          اما در مورد پایه RS فرمول کلی این است
                          BASE ADDRESS=START ADDRESS+(2^PIN ADDRESS)-2
                          برای مثال بانک 1 و پایه A16
                          NE1
                          BASE ADDRESS=0x60000000+20000-2
                          0x6001FFFE
                          موید باشید
                          دوستان درباره Fsmc اگر اطلاع کاملی دارید لطفا قرار دهید . من که متوجه نشدم این واحد چطور کار می کند مخصوصا برای راه اندازی Lcd
                          نادانترين مردم کساني هستند که فکر مي کنند داناترين آنها هستند.

                          دیدگاه


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

                            https://www.google.com/url?sa=t&source=web&rct=j&url=http://www.st.com/web/en/resource/technical/document/application_note/CD00200423.pdf&ved=0ahUKEwixm-Gf85fKAhXivHIKHTbRDdIQFggbMAA&usg=AFQjCNFWkTVN-Lbbnkxgw4CWSSj_CE50iQ&sig2=flOaP0kSecOVvClL4rO j3Q

                            دیدگاه


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

                              نوشته اصلی توسط moeiee نمایش پست ها
                              در مورد FSMC دوستان اطلاعات خوبی دادند اما در مورد ادرس دهی اون و ارتباط با LCD:
                              ما چهار بانک رو با ادرس های زیر شروع میکنیم
                              بانک 1 : 0x60000000
                              بانک2 : 0x64000000
                              بانک3 : 0x68000000
                              بانک 4: 0x6C000000
                              که به ترتیب NE1 - NE2-NE3-NE4 مربوط به هر کدام می شود
                              اما در مورد پایه RS فرمول کلی این است
                              BASE ADDRESS=START ADDRESS+(2^PIN ADDRESS)-2
                              برای مثال بانک 1 و پایه A16
                              NE1
                              BASE ADDRESS=0x60000000+20000-2
                              0x6001FFFE
                              موید باشید
                              یک دنیا ممنون
                              دو روز بود سر کار بودم و نمیتونستم آدرس استخراج کنم
                              موفق باشید

                              دیدگاه


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

                                سلام
                                سال نو مبارک باشه.
                                من روی یه برد آموزشی که هم 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;

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

                                دیدگاه

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