اطلاعیه

Collapse
No announcement yet.

ارتباط AVR با MMC از طریق SPI

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

    ارتباط AVR با MMC از طریق SPI

    سلام ....من میخوام یک رم SD رو یا یک رم میکرو گوشی رو با میکرو توش چیزی بنویسم و از توش بخونم.....چیزای زیادی از اینترنت گرفتم , اما هیچ کدوم یک نمونه کامل نبود , مثلا یکی فرکانس و سایر مشخصات و یکی پیکره بندی و یکی شماتیک رو نذاشتن و خلاصه هرکدومشون ناقص هستند....
    حتی کتاب (مرجع کامل میکروکنترلرهای AVR نوشته محمدمهدی پرتوی فر - فرزاد مظاهریان - یوسف بیانلو) رو هم خریدم...که اون هم چیز کاملی نذاشته و یک برنامه خیلی خلاصه بدون پیکره بندی میکرو و بدنه شبیه سازی رو تحویل ما داده....

    الان خواهشم از شما دوستای عزیز اینه که اگه کسی یک پروژه کدویژن با شبیه سازی پروتئوس رو داره برام بذاره ممنون میشم....یک پروژه ی خیلی ساده ...درحدی که توش متن بنویسم و هروقت خواستم متن رو بخونم....ممنونم....Hamed.Rahmani1@yahoo.CA
    09358859711
    << از درخت تنومند کرنش مخواه, تعظیم او با شکستنش یکیست... >>
    www.MashhadMicro.IR

    #2
    پاسخ : ارتباط AVR با MMC از طریق SPI

    دوست عزیز اگه موافق باسی همین جا شروع کنم به گفتن که دیگران هم استفاده بکنند
    چيزي را بگو که بتواني بنويسي
    چيزي را بنويس که بتواني امضا کني
    چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

    دیدگاه


      #3
      پاسخ : ارتباط AVR با MMC از طریق SPI

      سلام....خیلی ممنونم....هرجایی که دوست داری بگو...موافقم....ولی لطفا فقط یه راهنمایی بکنید که به دردم بخوره...خیلی ممنون :nerd:
      << از درخت تنومند کرنش مخواه, تعظیم او با شکستنش یکیست... >>
      www.MashhadMicro.IR

      دیدگاه


        #4
        پاسخ : ارتباط AVR با MMC از طریق SPI

        حالا که دوستمون میخوان زمت بکشن و دوباره توضیح بدن جای بسی خوشحالیه
        من هم یه چیز اضافه کنم: وقتی برای اولین بار میخواستم یه حافظه uSD رو وصل کنم به AVR خدا میدونه چند روز تو نت دربدر توضیح و آموزش و اینا بودم که عین شما فکر میکردم چیز زیادی نگفتن. آخرش دلو زدم به دریا و مدار رو بستم ؛ چه جوری!؟ از هلپ کدویژن و یکی از مجله های نویز تو همین سایت. بعد با مثال خود کدویژن شروع کردم و ... خیلی راحت کار کرد

        دیدگاه


          #5
          پاسخ : ارتباط AVR با MMC از طریق SPI

          در این مقاله آموزشی
          کار با SD کارتها را با زبان بیسیک میآموزید
          میتوانید داخل آن بنویسید و یا از آن بخوانید
          فقط باید مقاله را از اول تا آخر با دقت بخوانید و پروژه ها را بر اساس شماتیک جرا کنید (پروژه هایی که داخلش SD استفاده شده است)
          حتما کار با آن را فرا میگیرید
          http://www.eca.ir/forum2/index.php?topic=62998.0
          آموزش ساخت دستگاه برف ساز خانگی : https://www.eca.ir/forums/thread55009.html
          مقاله آموزشی 11 پروژه با AVR و بسکام: https://www.eca.ir/forums/thread31760.html
          _*̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ *̡͌l̡*̡̡__*̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ *̡͌l̡*̡̡__*̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ *̡͌l̡*̡̡_

          دیدگاه


            #6
            پاسخ : ارتباط AVR با MMC از طریق SPI

            خوب اول با شماتیک شروع میکنیم . :

            چيزي را بگو که بتواني بنويسي
            چيزي را بنويس که بتواني امضا کني
            چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

            دیدگاه


              #7
              پاسخ : ارتباط AVR با MMC از طریق SPI

              سلام....واقعا خیلی خیلی ممنونم از کمک هاتون.....اما متاسفانه یا خوشبختانه , تا اینجاشو خودم بلد بودم....منتظر ادامه پاسخ هاتون هستم....یک دنیا ممنون.....
              << از درخت تنومند کرنش مخواه, تعظیم او با شکستنش یکیست... >>
              www.MashhadMicro.IR

              دیدگاه


                #8
                پاسخ : ارتباط AVR با MMC از طریق SPI

                برای راه اندازی کارت باید این کارا کرد:
                1ms بعد از وصل تغذیه cs , mosi باید 1 شوند و حد اقل 80 تا پالس کلاک ارسال بشه.
                بعد باید با دستور cmd0 کارت را ریست کرد یعنی 6 بایت با این صورت ارسال کرد : {0x40,0x00,0x00,0x00,0x00,0x95} و بعد از این 0x01 از طرف کارت پاسخ داده می شود
                بعد ا ز اون برای ورود به حالت spi باید این دستور cmd1 را ارسال کرد : {0x41,0x00,0x00,0x00,0x00,0xff} و بعد 0x00 از طرف کارت پاسخ داده میشه
                چيزي را بگو که بتواني بنويسي
                چيزي را بنويس که بتواني امضا کني
                چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

                دیدگاه


                  #9
                  پاسخ : ارتباط AVR با MMC از طریق SPI

                  برای نوشتن در کارت باید این کارا بکنید :
                  بعد از راه اندازی باید 0x58 را ارسال و بعد از آن 4 بایت ادرس سکتور مورد نظر را ارسال کرد(هر سکتور 512 بایت هست و کلا کارت به تعداد زیادی سکتور تقسیم بندی شده) بعد از این باید 0xff را ارسال کرد. سپس باید 512 بایت اطلاعات را ارسال کرد و ان را روی کارت نوشت و دوبایت 0xff ارسال کرد . بعد از طرف کارت یک بایت برای تایید می آید که اگر به صورت xxx00101 بود یعنی با موفقیت اطلاعات نوشته شده غیر از این باید دوباره دستورات را نوشت.
                  چيزي را بگو که بتواني بنويسي
                  چيزي را بنويس که بتواني امضا کني
                  چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

                  دیدگاه


                    #10
                    پاسخ : ارتباط AVR با MMC از طریق SPI

                    نوشته اصلی توسط 30m
                    سلام....واقعا خیلی خیلی ممنونم از کمک هاتون.....اما متاسفانه یا خوشبختانه , تا اینجاشو خودم بلد بودم....منتظر ادامه پاسخ هاتون هستم....یک دنیا ممنون.....
                    سلام دوست عزیز
                    شما گفته بودید (در پست اول) که میخواهید بر روی SD چیزی بنویسید ویا بخوانید
                    انگار مقاله را نخواندید
                    اگر خوانده بودید , به راحتی میتوانستید داخیل یک فایل بنویسید ویابخوانید ویا یک فایل جدید تشکیل دهید
                    البته اگر با بسکام کار میکنید
                    آموزش ساخت دستگاه برف ساز خانگی : https://www.eca.ir/forums/thread55009.html
                    مقاله آموزشی 11 پروژه با AVR و بسکام: https://www.eca.ir/forums/thread31760.html
                    _*̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ *̡͌l̡*̡̡__*̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ *̡͌l̡*̡̡__*̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ *̡͌l̡*̡̡_

                    دیدگاه


                      #11
                      پاسخ : ارتباط AVR با MMC از طریق SPI

                      نوشته اصلی توسط sina1359
                      سلام دوست عزیز
                      شما گفته بودید (در پست اول) که میخواهید بر روی SD چیزی بنویسید ویا بخوانید
                      انگار مقاله را نخواندید
                      اگر خوانده بودید , به راحتی میتوانستید داخیل یک فایل بنویسید ویابخوانید ویا یک فایل جدید تشکیل دهید
                      البته اگر با بسکام کار میکنید
                      سلام ...متاسفانه با کدویژن کار میکنم و هیچ علاقه ای هم به بسکام ندارم ... و ضمنا متاسفاه یک پروژه های رو انجام داده ام و حالا برای یک قسمتش گیر کرده ام که اون یک قسمت هم چیزی نیست جز ارتباط با SD Card .... تو رو خدا اینقدر هم پیشرفته توضیح ندید و اگر هم بتونید برام یک پروژه کدویژن خیلی ساده بنویسید که عملی باشه ممنون میشم.....واقعا سعی میکنم جبران کنم....خیلی ممنون :sad:
                      << از درخت تنومند کرنش مخواه, تعظیم او با شکستنش یکیست... >>
                      www.MashhadMicro.IR

                      دیدگاه


                        #12
                        پاسخ : ارتباط AVR با MMC از طریق SPI

                        با سلام
                        نوشته اصلی توسط 30m
                        سلام ...متاسفانه با کدویژن کار میکنم و هیچ علاقه ای هم به بسکام ندارم ... و ضمنا متاسفاه یک پروژه های رو انجام داده ام و حالا برای یک قسمتش گیر کرده ام که اون یک قسمت هم چیزی نیست جز ارتباط با SD Card .... تو رو خدا اینقدر هم پیشرفته توضیح ندید و اگر هم بتونید برام یک پروژه کدویژن خیلی ساده بنویسید که عملی باشه ممنون میشم.....واقعا سعی میکنم جبران کنم....خیلی ممنون :sad:
                        آقا به مجله نویز شماره 2 مراجعه کنید تو اونجا با یک مثال نحوه کار با sdc تو کدویزن آموزش داده شده.

                        دیدگاه


                          #13
                          پاسخ : ارتباط AVR با MMC از طریق SPI

                          نوشته اصلی توسط mojtaba_led
                          با سلام
                          آقا به مجله نویز شماره 2 مراجعه کنید تو اونجا با یک مثال نحوه کار با sdc تو کدویزن آموزش داده شده.

                          خیلی ممنون...اما من چیز بدرد بخوری توی مجله ها پیدا نکردم..... و هنوز هم مشکل دارم.... :angry:
                          << از درخت تنومند کرنش مخواه, تعظیم او با شکستنش یکیست... >>
                          www.MashhadMicro.IR

                          دیدگاه


                            #14
                            پاسخ : ارتباط AVR با MMC از طریق SPI

                            نوشته اصلی توسط 30m

                            خیلی ممنون...اما من چیز بدرد بخوری توی مجله ها پیدا نکردم..... و هنوز هم مشکل دارم.... :angry:
                            چرا دیگه تو مجله نویز شماره 2 که به اندازه کافی توضیح داده شده .

                            من همون مثال مجله نویز رو برای lcd گرافیکی تغییر دادم البته میتونید با اضافه کردن کتابخونه lcd کاراکتری به برنامه و برداشتن" // " از ابتدای دستورات مربوط به lcd کاراکتری تو lcd کاراکتری ازش استفاده کنید . تو عمل تستش کردم و جواب داده. میکرویی که باهاش کار میکنم at90usb1287 هست . این برنامه هست ، ببنید کمکتون میکنه تا بیشتر توضیح بدم .


                            کد:
                            /*****************************************************
                            This program was produced by the
                            CodeWizardAVR V2.05.3 Standard
                            Automatic Program Generator
                            © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                            http://www.hpinfotech.com
                            
                            Project : 
                            Version : 
                            Date  : 06/08/2012
                            Author : PerTic@n
                            Company : If You Like This Software,Buy It
                            Comments: 
                            
                            
                            Chip type        : AT90USB1287
                            Program type      : Application
                            AVR Core Clock frequency: 8.000000 MHz
                            Memory model      : Small
                            External RAM size    : 0
                            Data Stack size     : 2048
                            *****************************************************/
                            
                            #include <90usb1287.h>
                            
                            #include <ff.h>
                            
                            #include <stdio.h>
                            
                            #include <delay.h>
                            /* MMC/SD/SD HC card support */
                            #include <sdcard.h>
                            // Graphic LCD functions
                            #include <glcd.h>
                            
                            // Font used for displaying text
                            // on the graphic LCD
                            #include <font5x7.h>
                            
                            #define T1_OVF_FREQ 100
                            #define T1_PRESC 1024L
                            #define T1_INIT (0x10000L-(_MCU_CLOCK_FREQUENCY_/(T1_PRESC*T1_OVF_FREQ)))
                            
                            unsigned char buffer[15]="ECA the BEST..";
                            unsigned char buffer2[10];
                            unsigned char buffer3[5];
                            
                            
                            
                            FRESULT res;
                            unsigned int nbytes;
                            FATFS fat;
                            FIL file;
                            char path[]="0:/ECA.txt";
                            // Function used for reading image
                            // data from external memory
                            unsigned char read_ext_memory(GLCDMEMADDR_t addr)
                            {
                            unsigned char data;
                            // Place your code here
                            
                            return data;
                            }
                            
                            interrupt [TIM1_OVF] void timer_comp_isr(void)
                            {
                            /* re-initialize Timer1 */
                            TCNT1H=T1_INIT>>8;
                            TCNT1L=T1_INIT&0xFF;
                            /* card access low level timing function */
                            disk_timerproc();
                            }
                            // Function used for writing image
                            // data to external memory
                            void write_ext_memory(GLCDMEMADDR_t addr, unsigned char data)
                            {
                            // Place your code here
                            
                            }
                            
                            // Declare your global variables here
                            
                            void main(void)
                            {
                            // Declare your local variables here
                            // Graphic LCD initialization data
                            GLCDINIT_t glcd_init_data;
                            
                            // Crystal Oscillator division factor: 1
                            #pragma optsize-
                            CLKPR=0x80;
                            CLKPR=0x00;
                            #ifdef _OPTIMIZE_SIZE_
                            #pragma optsize+
                            #endif
                            /* initialize Timer1 overflow interrupts in Mode 0 (Normal) */
                            TCCR1A=0x00;
                            /* clkio/1024 */
                            TCCR1B=(1<<CS12)|(1<<CS10);
                            /* timer overflow interrupts will occur with 100Hz frequency */
                            TCNT1H=T1_INIT>>8;
                            TCNT1L=T1_INIT&0xFF;
                            // Timer/Counter 1 Interrupt(s) initialization
                            TIMSK1=0x01;
                            
                            // Graphic LCD initialization
                            // The KS0108 connections are specified in the
                            // Project|Configure|C Compiler|Libraries|Graphic LCD menu:
                            // DB0 - PORTC Bit 0
                            // DB1 - PORTC Bit 1
                            // DB2 - PORTC Bit 2
                            // DB3 - PORTC Bit 3
                            // DB4 - PORTC Bit 4
                            // DB5 - PORTC Bit 5
                            // DB6 - PORTC Bit 6
                            // DB7 - PORTC Bit 7
                            // E - PORTA Bit 3
                            // RD /WR - PORTA Bit 2
                            // RS - PORTA Bit 1
                            // /RST - PORTA Bit 7
                            // CS1 - PORTA Bit 5
                            // CS2 - PORTA Bit 6
                            
                            // Specify the current font for displaying text
                            glcd_init_data.font=font5x7;
                            // No function is used for reading
                            // image data from external memory
                            glcd_init_data.readxmem=NULL;
                            // No function is used for writing
                            // image data to external memory
                            glcd_init_data.writexmem=NULL;
                            
                            glcd_init(&glcd_init_data);
                            
                            glcd_init(&glcd_init_data);
                             //Turns LCD on
                            glcd_display(1);
                            //Sets the current background color:black(pixel --> off) 
                            glcd_setbkcolor(0);
                            //Sets the current foreground color:white(pixel --> on)
                            glcd_setcolor(1);
                            //Clears the LCD 
                            glcd_clear();
                            //Specifies the current font used for displaying text
                            glcd_setfont(font5x7)
                            
                            //start:
                            glcd_outtextxy(0, 0, " In The Name Of Allah");
                            
                            glcd_putcharxy(10, 15, ' ');
                            
                            #asm("sei")
                            
                            if ((res=f_mount(0,&fat))==FR_OK)
                              // lcd_putsf("FAT mounted = OK");  
                              glcd_outtextxy(0, 15,"FAT mounted = OK");
                            
                            delay_ms(1000);
                            //lcd_clear();
                            glcd_clear();
                            if ((res=f_open(&file,path,FA_CREATE_NEW))==FR_OK)
                             // lcd_putsf("File opened"); 
                              glcd_outtextxy(0, 15, "New file created");
                            delay_ms(1000);
                            
                            //lcd_clear();
                            glcd_clear();
                            if ((res=f_open(&file,path,FA_WRITE))==FR_OK)
                             // lcd_putsf("File opened"); 
                              glcd_outtextxy(0, 15, "File opened to write");               
                            delay_ms(1000); 
                                             
                            //lcd_clear();
                            glcd_clear();
                            if ((res=f_write(&file,buffer,15,&nbytes))==FR_OK)
                              // lcd_putsf("Writing Data"); 
                              glcd_outtextxy(0, 15, "Writing Data");
                                              
                            //lcd_clear();
                             
                                            
                            delay_ms(1000);                 
                            //lcd_clear();
                            glcd_clear();  
                            if ((res=f_close(&file))==FR_OK)
                             // lcd_putsf("File closed");  
                              glcd_outtextxy(0, 15, "File closed");              
                              
                            delay_ms(1000);
                            //lcd_clear();
                            glcd_clear();
                            if ((res=f_open(&file,path,FA_READ))==FR_OK)
                              // lcd_putsf("File opened"); 
                              glcd_outtextxy(0, 15, "File opened");        
                                       
                            delay_ms(1000);
                            //lcd_clear();
                            glcd_clear();  
                            if ((res=f_read(&file,buffer2,10,&nbytes))==FR_OK)
                              // lcd_putsf("Reading Data");  
                              glcd_outtextxy(0, 15, "Reading Data");
                              delay_ms(1000);
                            //lcd_clear();
                            glcd_clear(); 
                            // lcd_putsf(buffer2); 
                              glcd_outtextxy(0, 15, buffer2);         
                              
                            delay_ms(1000);
                            //lcd_clear(); 
                            glcd_clear();  
                            if ((res=f_read(&file,buffer3,5,&nbytes))==FR_OK)
                             // lcd_putsf("Reading Data");  
                             glcd_outtextxy(0, 15, "Reading Data"); 
                              delay_ms(1000);
                            //lcd_clear();
                            glcd_clear(); 
                            // lcd_putsf(buffer3); 
                              glcd_outtextxy(0, 15, buffer3); 
                              
                            delay_ms(1000);                 
                            //lcd_clear();
                            glcd_clear();  
                            if ((res=f_close(&file))==FR_OK)
                             // lcd_putsf("File closed");  
                              glcd_outtextxy(0, 15, "File closed");
                            while (1)
                               {
                               // Place your code here
                            
                               }
                            }

                            دیدگاه


                              #15
                              پاسخ : ارتباط AVR با MMC از طریق SPI

                              دوست عزیز این کتابخونه ای که من خودم برا mmc نوشتم ازش کارم گرفتم . امید وارم به دردتون بخوره :nerd:
                              چيزي را بگو که بتواني بنويسي
                              چيزي را بنويس که بتواني امضا کني
                              چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

                              دیدگاه

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