اطلاعیه

Collapse
No announcement yet.

SRAM و SDRAM

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

    SRAM و SDRAM

    چه رم هایی در ایران هستند که با این سری از میکرو ها سازگارند در حد امکان سریع باشند

    #2
    پاسخ : SRAM و SDRAM

    من SRAM یک مگا بیتی (128 کیلو بایت) 70 نانوثانیه به شماره KM681000 و sdram 32 مگا بایتی K4S561632H-UC75 رو همینجا خریدم. فکر میکنم جواب بده.

    دیدگاه


      #3
      پاسخ : SRAM و SDRAM

      سری A1 از حداکثر 16 مگابایت SRAM و SDRAM پشتیبانی می کند. اما به لحاظ شماره هایی که در بازار موجود است هنوز بررسی انجام نداده ام. با توجه به نیازی که برای انجام برخی پروژه ها به حافظه جانبی وجود دارد، در آینده نزدیک قصد شناسایی انواع موجود در بازار را دارم که در اینصورت به اطلاع شما خواهم رساند.
      اوژن: به معنای افکننده و شکست دهنده است
      دانایی، توانایی است-Knowledge is POWER
      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

      دیدگاه


        #4
        پاسخ : SRAM و SDRAM

        آقا سلام . من بالاخره تونستم AT24C64 و DS1307 رو با xmega و کامپایلر عزیز و گرانقدر و وزین IAR راه اندازی کنم... :nice:

        حالا باید برم سراغ External RAM اما یکم باید بررسی هام رو زیاد کنم ایشالله این مشکل هم حل بشه.
        اگر از دوستان کسی با رم خارجی کار کرده راهنمایی ، کمکی (خدا یک در دنیا 100 در آخرت به ایشان دهاااااد) ممنون میشم.
        من حدودا 512 کیلو رم میخوام.

        دیدگاه


          #5
          پاسخ : SRAM و SDRAM

          K6T4008C یک SRAM با ظرفیت 512 کیلوبایت است که توسط پایا الکترونیک عرضه می شود.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #6
            پاسخ : SRAM و SDRAM

            با سلام
            فرق SDRAM با SRAM در چیست؟

            دیدگاه


              #7
              پاسخ : SRAM و SDRAM

              نوشته اصلی توسط علی علی پور ریکنده
              با سلام
              فرق SDRAM با SRAM در چیست؟
              این دو نوع حافظه دارای تفاوت های اساسی هستند و در واقع تنها شباهت آنها در این است که هردو Ram هستند. بطور خلاصه اساسی ترین تفاوت در این است که SDRAM ها نیاز به Refresh دارند، درحالیکه برای SRAM اینطور نیست. به این معنی که زمانی که اطلاعات روی SRAM نوشته می شود، تا زمانی که تغذیه آن در محدوده خود باقی بماند، اطلاعات نوشته شده در آدرس خود محفوظ می مانند. اما برای SDRAM اینطور نیست و بعد از مدت زمانی اطلاعات پاک می شود که برای جلوگیری از آن باید در یک فاصله زمانی مشخص فرمان هایی برای فعال کردن سطرهای هر بانک آن ارسال شود و یا از مدهایی مانند Auto refresh استفاده شود. در واقع SRAM رفتاری مانند Flip-Flop و SDRAM رفتاری مانند خازن دارد که بعد از مدتی دشارژ می شود. از جمله سایر تفاوت ها بحث قیمت است که SDRAM ها در شرایط مساوی ارزانتر از SRAM ها هستند. تفاوت سرعت و وابستگی آن به کلاک در SDRAM و Access time و مصرف توان و سایر موارد دیگر هم وجود دارد که که با یک جستجوی ساده می توانید به منابع مختلفی درباره این تفاوت ها دسترسی پیدا کنید.
              در خانواده XMEGA به دلیل آنکه بصورت سخت افزاری از Refresh کردن SDRAM پشتیبانی می شود، امکان بکارگیری این خانواده از حافظه ها در کنار SRAM هم وجود دارد. در برد آموزشی Atmel یک SDRAM به شماره MT48LC16M4A2TG بکار رفته که ظاهرا در ایران موجود نیست.
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                #8
                پاسخ : SRAM و SDRAM

                آقا من یه رم 128 کیلو بایتی رو به شماره K6M681000 که قبلا باهاش کار کرده بودم رو با مداربندیی که در صفحه 11 app note atmel مربوط به EBI بود.
                یعنی 8bit SRAM Multiplexing Address Byte 0,1 and 2 رو بستم.
                برای تست اوومدم تو codevision و از ویزاردش (سوء) استفاده :biggrin: کردم و مدار بندیم رو تست کردم که جواب داد.

                اما وقتی خواستم از مقدار دهی رجیستر هاش تو IAR استفاده کنم جواب نداد.

                //EXTERNAL BUS INTERFACE INITIALIZATION:
                //SRAM 3 PORTS, ADDRESS BYTES 0, 1 & 2 MULTIPLEXED BY ALE1 & ALE2
                //CONFIGURE THE I/O PORTS FOR EBI OPERATION
                //SET ACTIVE-LOW SIGNALS TO HIGH VALUE
                PORTH_OUT = 0xF3;
                PORTH_DIR = 0xFF;
                PORTK_DIR = 0xFF;
                EBI_CTRL = (0x01<<6) | (0x02<<2) | 0x01;

                EBI_CS0_CTRLB = 0x00;
                //EBI_SDDATAW_8BIT_gc | EBI_SRMODE_ALE12_gc | EBI_IFMODE_3PORT_gc
                //BASE ADDRESS: 0x0
                //ADDRESS SPACE SIZE: 64 KBYTES
                //EBI_CS0_BASEADDRL = 0;
                //EBI_CS0_BASEADDRH = 0;
                //CS0 MODE: SRAM
                //EBI_CS0_CTRLA = EBI_CS_ASPACE_64KB_gc | EBI_CS_MODE_SRAM_gc;
                EBI_CS0_CTRLA = (0x09<<2) | 0x01;
                //CS1 INITIALIZATION
                //CS1 DISABLED
                EBI_CS1_CTRLA = 0;
                //CS2 INITIALIZATION
                //CS2 DISABLED
                EBI_CS2_CTRLA = 0;
                //CS3 INITIALIZATION
                //CS3 DISABLED
                EBI_CS3_CTRLA = 0;


                سوال اول : آیا امکات دارد همان مقادیری که از کد اسمبلی خروجی cv استخراج کردم اشتباه باشد؟
                سوال دوم : آیا غیر از مقدار دهی رجیسترهای EBI لازم است رجیستر دیگری برای کار با رم خارجی تغییر کند؟

                دیدگاه


                  #9
                  پاسخ : SRAM و SDRAM

                  با توجه به اینکه قصد برنامه نویسی با IAR را دارید، می توانید از کدهای ارائه شده توسط Atmel در AVR1312 استفاده کنید.زیرا یکبار این کتابخانه ها توسط Atmel نوشته شده و شما می توانید توابع ارائه شده را مورد استفاده قرار دهید که کار را بسیار راحت تر می کند. در غیر اینصورت، در فرصت بعدی به سوال شما پاسخ خواهم داد.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    #10
                    پاسخ : SRAM و SDRAM

                    من دقیقا همون app note رو خوندم و مدار بندیم رو از رو همون انجام دادم. اما توش کدی ندیدم.
                    وقتی تو cv جواب داده یعنی به احتمال 90 و خورده ای درصد مدار بندیم درسته . اما تو بخش رجیسترها فارغ از توجه به کامپایلر میخواستم بدونم رجیستر دیگه ای غیر از رجیسترهای EBI نیاز به مقدار دهی هست یا نه؟؟؟
                    پیشاپیش از حسن توجه جنابعالی کمال قدر دانی را دارم. :nice:

                    دیدگاه


                      #11
                      پاسخ : SRAM و SDRAM

                      در سایت Atmel به غیر از فایل pdf برای هر Application Note معمولا یک فایل zip شامل کدهای مربوطه هم وجود دارد که برای EBI می توانید از لینک زیر دانلود کنید:

                      http://www.atmel.com/dyn/resources/p...ts/AVR1312.zip

                      برای فعال سازی بخش EBI به غیر از مقداردهی به رجیسترهای آن، باید جهت پورت های آدرس و کنترل را بصورت خروجی تعریف کنید.
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


                        #12
                        پاسخ : SRAM و SDRAM

                        من اون پروژه IAR رو دیدم. ممنون.
                        اما چند تا مورد بود که هم میتونه کمک فراووونی به من بکنه و هم جنبه آموزشی خوبی داشته باشه فقط با عذر فراوان تعداد نکات یه کم زیاده .امیدوارم خیلی خسته نشین و به من تو دلتون چیزی نگین. ممنون :redface:. یکی اینکه برنامه به این شکل بود که فقط از توابع __far_mem_write و __far_mem_read
                        استفاده کرده بود و نه از تنظیمات رم خارجی تو Option . من این برنامه رو تست کردم و جواب داد. اما عیب بزرگش اینه که نمیتونم متغیر تو رم خارجیم استفاده کنم . اگر میخواستم با تابع این کار رو انجام بدم بدون استفاده از قابلیت EBI هم میشد این کار رو انجام داد.
                        حالا یک مساله : منظور از Base address چیه ؟ مگه این نیست که آدرس شروع رم خارجی تو برنامه چنده ؟ مثلا اگر این آدرس رو برابر 4096 قرار بدیم برنامه میاد آدرس متغیرهایی رو که بیشتر از 4095 هست رو در رم خارجی قرار میده و این آدرس تا 131071 + 4096 ادامه پیدا میکنه ؟ (البته من این مثال رو برای رم 128 کیلو میزنم).
                        اگر این فرض اشتباهه لطفا منو راهنمایی کنید. اما اگر درسته چرا تو برنامه بیس آدرس برابر 131072 قرار گرفته ؟؟؟

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

                        مساله دیگه این که تنظیمات IAR برای رم خارجی رو میشه توضیح بدین


                        به عنوان مثال گزینه Enable external memory bus رو فعال میکنیم . مقادیر Base Address و Memory Size رو به ترتیب 0 و 0x20000 قرار میدیم.
                        آیا این مقدار دهی برای رم 128 کیلو درسته؟
                        CSTACK و RSTACK رو در رم خارجی قرار بدیم یا نه ؟

                        **** ظاهرا مدل حافظه Large بیشتر از 32 کیلو رو ساپورت نمیکنه درسته؟
                        اگر از توابعی مثل malloc استفاده نکنیم به Heap نیاز داریم یا داشتن مقداری کم مثل 256 بایت الزامیست؟

                        بازم از از حسن توجه شما کمال تشکر رو دارم . :bye

                        دیدگاه


                          #13
                          پاسخ : SRAM و SDRAM

                          در مورد انتخاب مقدار 0X20000 برای Base address توسط AVR1312 دلیل موجهی به نظر نمی رسد و هرچند این کار اشتباه نیست، اما بهتر بود همان آدرس 0x4000 را که آدرس پایان SRAM در ATXMEGA128A1 است، به عنوان شروع حافظه خارجی انتخاب می کرد (آدرس شروع SRAM در XMEGA برابر 0x2000 است). از نظر مقداردهی به متغیرها و قرار گرفتن آن در SRAM خارجی باید اولا به این نکته توجه کنید که هر متغیری در کدام segment از حافظه ذخیره می شود. مثلا متغیرهای غیر static که در داخل توابع و تابع main تعریف می کنید در شرایط عادی در CSTACK ذخیره می شود. اما متغیرهای Global و static در segment های دیگری ذخیره می شود که شناخت این معماری حافظه در IAR کار بسیار تخصصی و نسبتا مفصلی است و نیاز به مطالعه قابل توجهی دارد. در مورد گزینه ای که CSTACK یا RSTACK را در حافظه خارجی قرار می دهد آزمایش هایی را انجام دادم، اما با تحلیل کد اسمبلی معادل در AVRStudio مشاهده کردم که متغیرها را در حافظه خارجی تعریف نمی کند. این مسئله نیاز به بررسی بیشتری دارد که احتمالا باید در گزینه های Linker نرم افزار تغییراتی داده شود. در شرایط فعلی بهترین گزینه قابل پیشنهاد برای شما، تعریف متغیرها بصورت مستقیم در ناحیه حافظه خارجی و بصورت global است. با فرض همان مقداردهی AVR1312، نمونه کد زیر متغیر a را در آدرس 0X20000 و آرایه b را با 512 عضو در محدوده آدرس 0x20001-0x20200 و آرایه c را با 65536 عضو در محدوده آدرس 0x20201-0X30200 تعریف می کند. در طول برنامه هم به تمام متغیرها مقدار دهی می شود.
                          ابتدا قبل از main متغیرها را به اینصورت تعریف می شود:

                          کد:
                          __no_init unsigned char __far a @ 0x20000;
                          __no_init unsigned char __far b[0x200] @ 0x20001;
                          __no_init unsigned char __huge c[0x10000] @ 0x20201;


                          سپس در main و بعد از تنظیمات EBI می توان مقادیر دلخواه را به این متغیرها نسبت داد:

                          کد:
                          unsigned long i=0;
                           a=0x5A; 
                           for(i=0;i<0x200;i++) b[i]=0x55; 
                           for(i=0;i<0x10000;i++) c[i]=0xAA;


                          در پاسخ به دو سوال آخر شما، مدل Large تا 8M را پشتیبانی میکند و اگر از توابعی مانند malloc استفاده نکنیم، نیازی به Heap نداریم. ضمنا باعث خوشحالی است که سوالاتی در سطح تخصصی در مورد IAR و XMEGA توسط شما پرسیده می شود و علیرغم محدودیت وقتی که دارم، سعی می کنم به این سوالات پاسخ دهم.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            #14
                            پاسخ : SRAM و SDRAM

                            سلام . ممنون از تحمل و پاسخ سوالات این حقیر.
                            راستش من هنوزم مشکلم سر جاشه !

                            من وقتی کد AVR1312 رو تو سختف افزار خودم اجرا میکنم کاملا درست اجرا میشه و کل رم رو که تست میکنه ، تمام مقادیر درسته.
                            اما به محض اینکه باس خارجی رو برای رم خارجی تو تنظیمات فعال میکنم و آدرس شروع رو 0 یا 0x1000 یا 0x3000 یا هرچی دیگه میدم و سایز رم رو هم 0x20000 میدم دیگه برنامه اجرا نمیشه .
                            من اول برنامه یه پیب 100 میلی ثانیه گذاشتم . حتی وقتی هیچ متغیر global هم ندارم اصلا برنامه اجرا نمیشه و حتی اوون بیپ رو هم نمیزنه .

                            به کد زیر نگاه کنید :
                            کد:
                            int main( void )
                            {
                            	/* Counter indicating correct data transfer to and from SDRAM */
                              UartE0_init();
                              uint32_t SRAM_ERR = 0;
                              PORTE_DIR |= _BV(0);//BUZZER
                              PORTE_DIR |= _BV(3);//TXD0_E
                              Beep(2,100,100);
                            	/* Configure bus pins as outputs(except for data lines). */
                            	PORTH.DIR = 0xFF;
                            	PORTK.DIR = 0xFF;
                            	PORTJ.DIR = 0x00;
                              printf("Start Program......\r");
                            	/* Initialize EBI. */
                            	EBI_Enable( EBI_SDDATAW_8BIT_gc,
                            	      EBI_LPCMODE_ALE1_gc,
                            	      EBI_SRMODE_ALE12_gc,
                            	      EBI_IFMODE_3PORT_gc );
                              printf("EBI Enable\r");
                            	/* Initialize SRAM */
                            	EBI_EnableSRAM( &EBI.CS0,        /* Chip Select 0. */
                            	        EBI_CS_ASPACE_128KB_gc, /* 128 KB Address space. */
                            	        SRAM_ADDR,       /* Base address. */
                            	        0 );          /* 0 wait states. */
                            	for (uint32_t i = 0; i < SRAM_SIZE ; i++) 
                              {
                            		__far_mem_write(i+SRAM_ADDR, (char)i);
                            	}
                              printf("SRAM Write ok\r");
                            	for (uint32_t i = 0; i < SRAM_SIZE; i++) 
                              {
                            		if (__far_mem_read(i+SRAM_ADDR) != (char)i)
                                {
                            			SRAM_ERR++;
                            		}
                            	}
                              printf("SRAM Error=%ld\r",SRAM_ERR);  
                              while(1);
                            }
                            زمانی که این کد main رو اجرا میکنم (البته بدون فعال کردن باس خارجی تو منو تنظیمات) خیلی زیبا! میاد رم رو تست میکنه و بدون هیچ خطایی کارش رو تموم میکنه .
                            اما به محض اینکه تو تنظیمات گزینه "Enable external memory bus" رو فعال میکنم دیگه برنامه از کار میافته .
                            به نظر شما چرا اینطور میشه ؟
                            نکته جالب اینه که من اتفاقی بدون اینکه این کد رو دیده باشم از بین 6 آرایش موجود برای رم خارجی دقیقا همین آرایش کد رو انتخاب کرده بودم .

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

                            دیدگاه


                              #15
                              پاسخ : SRAM و SDRAM

                              آیا گزینه های قرار دادن CSTACK یا RSTACK در حافظه خارجی فعال است؟ اگر اینگونه است، هردو را غیر فعال کنید و نتیجه را اطلاع دهید.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه

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