اطلاعیه

Collapse
No announcement yet.

درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

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

    درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

    با سلام خدمت دوستان
    پس از چند ساعت گشت و گذار در داخل نت بنده هنوز یک کد ساده و قابل اطمینان برای راه اندازی EEPROM هایی که با SPI کار می کنند برای AVR پیدا نکردم. و چون تا الان با این نمونه کار نکردم کدی هم براش ندیدم نیاز به کمک دوستان هست. لطفا اگر نمونه کد و یا منبع مناسب برای مطالعه می شناسید معرفی بفرمایید. لاتین با فارسی فرقی نمی کنه. نمونه کد با کد ویژن باشه
    جدیدترین ویرایش توسط amin20107; ۱۵:۵۶ ۱۳۹۷/۰۳/۱۴. دلیل: اصلاح
    گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
    همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)

    #2
    پاسخ : درخواsت نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

    مدل eeprom؟

    دیدگاه


      #3
      پاسخ : درخواsت نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

      نوشته اصلی توسط روح الامین نمایش پست ها
      مدل eeprom؟
      زیاد برام مهم نیست چون حجم اطلاعاتی برای ذخیره سازی کم هست. مثلا ای سی 93C46 به نظر خوب هست البته هنوز صد در صد مطمن نیستم این ای سی با SPI کار می کنه یا نه چون تو دیتا شیت فقط گفته شده سریال و اسمی از SPI نیاومده. اماسری at25xxx شرکت اتمل مثل At25256 دقیقا ذکر شده که با SPI کار می کنه فقط تو بازار داخل نایاب شده باید خرید خارج کنم
      خرید تراشه آی سی آیسی IC حافظه AT93C46 ای سی ایپرام پکیج DIP با قیمت مناسب در فروشگاه ECA دیتاشیت و مشخصات فنی EEPROM و قطعات الکترونیکی
      جدیدترین ویرایش توسط amin20107; ۱۶:۳۴ ۱۳۹۷/۰۳/۱۴. دلیل: اصلاح
      گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
      همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)

      دیدگاه


        #4
        پاسخ : درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

        آره، می تونی 93C46 رو با SPI راه بندازی. این صفحه با آردوینو توضیح داده(به نظرم خیلی راحت می تونی به کدویژن پورتش کنی):



        اینم نسخه PDF این وب صفحه وب سایت که برات گذاشتم. نتونستی بری توش، این PDFش هستش.:

        دیدگاه


          #5
          پاسخ : درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

          یک نمونه کد در کتاب پرتویی فر برای at25256 نوشته شده که برای دوستان قرار میدم. تا با هم یک تحلیل روی این کد داشته باشیم:

          WWW.ECA.IR
          #include <mega8.h>
          #include <stdio.h>
          #include <delay.h>
          #include <spi.h>




          void write_eeprom(unsigned int add , unsigned char data);


          unsigned char read_eeprom(unsigned int add);






          void main(void)
          {
          unsigned int i, data;

          PORTB=0x00;
          DDRB=0x3C; //0011 1100
          DDRC=0x01; //0000 0001

          SPCR=0x50; // SPCR: SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
          SPSR=0x00; // SPSR: SPIF WCOL - - - - - SPI2X
          i=0;

          while (1)
          {
          i++;
          data=55;
          write_eeprom(i,data);
          delay_ms(100);
          data=read_eeprom(i);
          };
          }




          void write_eeprom(unsigned int add , unsigned char data)
          {
          PORTC.0=0; //Pin CS=0
          spi(6); //Write command 06h for set Write enable
          PORTC.0=1; //Pin CS=1
          PORTC.0=0; //Pin CS=0
          spi(2); //Write command 02h for write data to memory
          spi((add& 0xff00)>>8); //send high address
          spi(add & 0x00ff); //send low address
          spi(data); //send data
          PORTC.0=1; //Pin CS=1
          }


          unsigned char read_eeprom(unsigned int add)
          {
          unsigned char data;
          PORTC.0=0; // pin CS=0
          spi(3); // Write command 03h for read data from memory
          spi((add& 0xff00)>>8); //send high address
          spi(add & 0x00ff); // send low address
          data=spi(255); //read data
          PORTC.0=1; //Pin CS=1
          return data;
          }

          جدیدترین ویرایش توسط amin20107; ۱۵:۵۶ ۱۳۹۷/۰۳/۱۵.
          گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
          همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)

          دیدگاه


            #6
            پاسخ : درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

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

            بیاییم یک نگاه روی برنامه داشته باشیم>>
            در ابتدا که فایل های هدر هست و فرا خوانی دوتا تابع که برای خواندن و نوشتن روی EEPROM. بعد در تابع main ورودی و خروجی بودن پورت ها و پیکر بندی SPI انجام میشه که برای راحتی خواندن من اومدم این رجیسترهای SPI رو جلوشون کامنت کردم توی برنامه. توی تابع While داره در هر مرحله i رو یکی اضافه می کنه و مقدار اولیه data=55 هست. بعد میاد با استفاده از تابع (write_eeprom(i, data این مقدار را توی ای سی eeprom میریزه اولین مشکل من اینه که حالا i ادرس حافظه است و data مقدار ذخیره شونده یا... ودیگه اینکه اگر در هر مرحله i یکی اضافه بشه و ریخته بشه توی eeprom که در عرض چند ثانیه کل یک میلیون باری که میشه روی eeprom نوشت تموم میشه و ای سی رو باید انداخت دور.
            و مورد بعد اگر براتون مقدور هست تابع هایی که برای خوندن و نوشتن روی EEPROM استفاده شدند رو توضیح بدید دارند چکار می کنند
            جدیدترین ویرایش توسط amin20107; ۱۶:۵۳ ۱۳۹۷/۰۳/۱۵.
            گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
            همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)

            دیدگاه


              #7
              پاسخ : درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

              نوشته اصلی توسط روح الامین نمایش پست ها
              آره، می تونی 93C46 رو با SPI راه بندازی. این صفحه با آردوینو توضیح داده(به نظرم خیلی راحت می تونی به کدویژن پورتش کنی):



              اینم نسخه PDF این وب صفحه وب سایت که برات گذاشتم. نتونستی بری توش، این PDFش هستش.:

              http://s8.picofile.com/file/8328364368/93C46.pdf.html
              الان متوجه شدم که سری 93Cxx اصلا SPI نیست و یه پروتکلی به نام Microwire داره و با SPI فرق می کنه
              گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
              همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)

              دیدگاه


                #8
                پاسخ : درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

                نوشته اصلی توسط amin20107 نمایش پست ها
                الان متوجه شدم که سری 93Cxx اصلا SPI نیست و یه پروتکلی به نام Microwire داره و با SPI فرق می کنه
                http://blog.uobdii.com/free-download...er-schematics/
                Microwire یه subset از SPI هستش. فکر نمیکنم برای کار شما مشکلی داشته باشه.

                دیدگاه


                  #9
                  پاسخ : درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

                  نوشته اصلی توسط amin20107 نمایش پست ها
                  یک نمونه کد در کتاب پرتویی فر برای at25256 نوشته شده که برای دوستان قرار میدم. تا با هم یک تحلیل روی این کد داشته باشیم:

                  WWW.ECA.IR
                  #include <mega8.h>
                  #include <stdio.h>
                  #include <delay.h>
                  #include <spi.h>




                  void write_eeprom(unsigned int add , unsigned char data);


                  unsigned char read_eeprom(unsigned int add);






                  void main(void)
                  {
                  unsigned int i, data;

                  PORTB=0x00;
                  DDRB=0x3C; //0011 1100
                  DDRC=0x01; //0000 0001

                  SPCR=0x50; // SPCR: SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
                  SPSR=0x00; // SPSR: SPIF WCOL - - - - - SPI2X
                  i=0;

                  while (1)
                  {
                  i++;
                  data=55;
                  write_eeprom(i,data);
                  delay_ms(100);
                  data=read_eeprom(i);
                  };
                  }




                  void write_eeprom(unsigned int add , unsigned char data)
                  {
                  PORTC.0=0; //Pin CS=0
                  spi(6); //Write command 06h for set Write enable
                  PORTC.0=1; //Pin CS=1
                  PORTC.0=0; //Pin CS=0
                  spi(2); //Write command 02h for write data to memory
                  spi((add& 0xff00)>>8); //send high address
                  spi(add & 0x00ff); //send low address
                  spi(data); //send data
                  PORTC.0=1; //Pin CS=1
                  }


                  unsigned char read_eeprom(unsigned int add)
                  {
                  unsigned char data;
                  PORTC.0=0; // pin CS=0
                  spi(3); // Write command 03h for read data from memory
                  spi((add& 0xff00)>>8); //send high address
                  spi(add & 0x00ff); // send low address
                  data=spi(255); //read data
                  PORTC.0=1; //Pin CS=1
                  return data;
                  }

                  خب اول اینکه در این کد چون mega8 در مد master قرار داره باید پورت MISO ورودی باشه. این یک اشکال.
                  حالا سوال اینه که اصلا در حلقه While داره چه کاری انجام میشه؟
                  گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
                  همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)

                  دیدگاه


                    #10
                    پاسخ : درخواست نمونه کد ساده برای راه اندازی EEPROM با ارتباط SPI

                    از AT45DB161D استفاده کن

                    دیدگاه

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