اطلاعیه

Collapse
No announcement yet.

کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

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

    کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

    سلام.
    برای استفاده از کارتهای مولتی مدیا "mmc" در کامپایلر کدویژن مطلب رو دنبال کنید.
    ابتدا کتابخانه را باید نصب کنید.
    برای اینکار به محل نصب کد ویژن رفته و فایل mmc_lib.h را درون پوشه inc و فایل mmc_lib.lib را داخل پوشه lib قرار دهید.
    الان میتونید این کتابخونه رو به برنامه خودتون اضافه کنید
    به این شکل :
    #include "mmc_lib.h"

    این برنامه از پورت SPI میکرو استفاده میکنه.
    بنابراین در تنظیمات این پورت دقت کنید.
    اگر از کدویزارد استفاده میکنید پس از فعال کردن پورت SPI و انتخاب سرعت مناسب , "SPI Type" رو از Slave به Master تبدیل کنید.
    در ضمن بیت صفر از پورت B رو هم باید بصورت خروجی تعریف کنید.

    اتصال میکرو به MMC به این صورت است.
    پایه MISO میکرو به DO از MMC متصل میشه.
    پایه MOSI میکرو به DI از MMC متصل میشه.
    پایه CLK میکرو به CLK از MMC متصل میشه.
    پایه PORTB.0 میکرو به CS از MMC متصل میشه.

    برای استفاده از این کتابخونه , شما احتیاج به تعریف یک بافر 512 بایتی از نوع Unsigned Char دارید.
    مثلا متغیری با اسم buf_data به این شکل تعریف میشه.

    unsigned char buf_data[512];

    این کتابخونه سه دستور برای استفاده از MMC داره.
    mmc_init();
    و
    mmc_write(unsigned long Number_Of_Sector, unsigned char Buffer);
    و
    mmc_read(unsigned long Number_Of_Sector, unsigned char Buffer);

    که شما بجای "unsigned char Number_Of_Sector" شماره سکتوری که میخواهید دیتا در آنجا نوشته و یا از آنجا خوانده شود را مینویسید.
    و بجای "unsigned char Buffer" اسم متغیری که برای کار با این کتابخونه ساخته بودید را مینویسید.


    یک مثال کوچک.

    کد:
    [left]
    #include <mega32.h>
    #include <spi.h>
    #include "mmc_lib.h"
    
    unsigned char buf_mmc[512]; // IN BUFERY AST KE BARAYE TABADOLE ETELAAT BA MMC ESTEFADE MISHE.
    unsigned long sector_num;  
    unsigned int i;
    
    void main(void)
    {
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTA=0x00;
    DDRA=0x00;
    
    // Port B initialization
    // Func7=Out Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=Out 
    // State7=0 State6=T State5=0 State4=0 State3=T State2=T State1=T State0=0 
    PORTB=0x00;
    DDRB=0xB1;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0xFF;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 2000.000 kHz
    // SPI Clock Phase: Cycle Half
    // SPI Clock Polarity: Low
    // SPI Data Order: MSB First
    SPCR=0x50;
    SPSR=0x00;
    mmc_init();           // RAH ANDAZI MMC
    for (i = 0 ; i <= 511 ; i++)
    {
    buf_mmc[i] = i % 256;        // POR KARDANE BUFER
    }
    
    sector_num = 50;         // ENTEKHABE SECTORE SHOMAREYE "50" AZ MMC , BARAYE NEVESHTAN VA KHANDAN
    
    mmc_write(sector_num, buf_mmc);  // NEVESHTAN ROOYE MMC
    
    for (i = 0 ; i <= 511 ; i++)
    {
    buf_mmc[i] = 0;          // KHALI KARDANE BUFER
    }
    mmc_read(sector_num, buf_mmc);  // KHANDAN AZ ROOYE MMC
    
    PORTD = buf_mmc[170];  // NAMAYESHE ADADE KHANDE SHODE AZ MMC 
    
    
    while (1)
       {
       // Place your code here
    
       };
    }
    
    
    [/left]
    فایل های پیوست شده
    الهم عجل لولیک الفرج

    #2
    پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

    این هم یک عکس از اتصالش.
    فایل های پیوست شده
    الهم عجل لولیک الفرج

    دیدگاه


      #3
      پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

      سلام
      توی پروتئوس برای تعیین مشخصات MMC یک CARD IMAGE FILE می خواد که نمی دونم مال چیه . فکر می کنم برا همین ارور میده
      در دایره قسمت ما نقطه تسلیمیم لطف آنچه تو اندیشی حکم انچه تو بنمایی

      دیدگاه


        #4
        پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

        سلام.
        فایلهای پروژه رو هم 'گذاشتم
        اما اینو بگم که در واقع پروتئوس اون فایل رو به عنوان mmc شما قرار میده.
        یعنی هرچی تو mmc بنویسی در اصل تو اون فایل نوشته میشه و هر چی از mmc بخونی , از اون فایل خوانده میشه.
        حافظه mmc تون اون فایله هست.
        الهم عجل لولیک الفرج

        دیدگاه


          #5
          پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

          سلام.
          این هم فایلهای پروژه.
          گفتم تو یه پست جدا بذارم تا تاپیک بیاد بالا و اگه دوستمون خواست استفاده کنه.
          فایل های پیوست شده
          الهم عجل لولیک الفرج

          دیدگاه


            #6
            پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

            همه کارهایی که گفته بودید مو به مو انجام دادم ولی اررور میده .فایلهاشو گذاشتم . البته با Atmega64

            Can"t create Or Open Card Image file

            فایل برنامه و پروتوس :

            http://www.iranwebco.com/dl/MMC.zip

            دیدگاه


              #7
              پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

              این فایل رو کپی کن تو شاخه زیر ببین درست میشه.....؟!


              E:\Program Files\Labcenter Electronics\Proteus 7 Professional\BIN


              http://www.4shared.com/dir/6388837/b7c799e1/sharing.html

              دیدگاه


                #8
                پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

                سلام ایمان جان....شما باید تو پروتئوس رو mmc کلیک کنی و آدرس cardimage رو بهش بدی...اونوقت مشکلت حل میشه....

                دیدگاه


                  #9
                  پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

                  آقا مرسی ظاهرا درست شد فقط چند تا سوال
                  1- این Cardimage چی هست ؟؟ چرا تو خود پروتوس نبود ؟؟
                  2- یک MMC 32mg چند بایت و چند سکتور داره ؟؟
                  3- من دیتا هائی که دارم هر کدوم 1 بایت هستش اینا رو باید بافر کنم تا بشه اندازه 512 بایت بعد بریزم رو MMC ???
                  4- برای خوندن از MMC باید یک سکتور رو کامل بخونم ؟؟؟ بعد چجوری مثلا بایت مورد نظر خودمو جدا کنم ؟؟

                  دیدگاه


                    #10
                    پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

                    خدارو شکر که مشکلت حل شد....
                    1-cardimage باید تو خود پروتئوس باشه ...شاید خوب سرچ نکردی.....یه فایله که وقتی با میکرو اطلاعات رو میریزی رو mmc اونجا save میشه و از همونجا هم توسط میکرو میتونی اطلاعات رو بخونی......
                    2-یه mmc هموطوری که خودت میگی 32میلیون بایت که اگه تقسیم بر 512 کنی تعداد سکتور ها بدست میاد.....
                    3 - شما میتونی 512 بایت یا همون یک سکتور یک سکتور رو mmc بنویسی یا بخونی برای اینکار باید یه بافر 512 تایی تعریف کنی...حالا نیازی نیست حتما همش رو پر کنی بعد بنویسی ولی اگه اینکار رو کنی مرتب تر نوشتی......
                    4 - شما میتونی mmc رو یه جورایی پارتیشن بندی کنی و بعد اونجایی که دوست داری بنویسی اون وقت خیلی راحت میتونی اون چیزی رو که نوشتی از رو آدرسش پیدا کنی.....
                    موفق باشی....

                    دیدگاه


                      #11
                      پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

                      میشه مثلا تو سکتور 1 حدود 10 بایت نوشت و بعدا ادامه همین سکتور 1 ما بقی بایت ها رو نوشت یا باید یک بار رو سکتور 1 نوشت و دفعه بعد رو یک سکتور دیگه ؟؟؟

                      دیدگاه


                        #12
                        پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

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

                        دیدگاه


                          #13
                          پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

                          1- در MMC فقط میشه بصورت سکتور نوشت ؟؟ دستوری هست که بشه بصورت بایت نوشت و خوند ؟؟؟
                          2- میشه تو یک سکتور 10 بایت نوشت و دفعه بعد تو همون سکتور و ادامش بقیه بایت ها رو نوشت ؟ یا باید اول سکتور رو بخونم بریزم تو بافر و دیتا رو بهش اضافه کنم و دوباره بریزم تو MMC ?
                          3- کسی کتابخانه کاملتر از MMC نداره ؟؟ مثلا برای لاک کردن - پاک کردن یکجای MMC و ....

                          دیدگاه


                            #14
                            پاسخ : کتابخوانه ای برای CodeVision به منظور ارتباط با MMC

                            1- تا اونجایی که من اطلاع دارم ظاهرا میشه فقط به صورت سکتور خوند و نوشت ولی شنیدم که با یه دستور میشه تعدار بایت رو کم و زیاد کرد یعنی مثلا بافر 1024 تایی بنویسی و بخونی ولی 512 پیش فرض همه mmc هاست...
                            2 - درمورد سوال دومت هم باید بگم که یا باید صبر کنی سکتورت کامل پر بشه بعد بریزی تو mmc یا همون کاری رو که خودت گفتی انجام بدی..... البته اگه تو تو هر سکتور هم یه بایت بریزی مطمئن باش جا کم نمیاری چون الان mmc کمتر از 1g گیر نمیاد......میدونی چند تا سکتور میشه....؟ :mrgreen:
                            3 - خودت با یه زیر برنامه کوچیک و با استفاده از همون کتابخونه راحت میتونی mmc رو پاک کنی حداکثر با 6 یا 7 خط.....

                            دیدگاه


                              #15
                              ]چگونه میتونم image card تو پروتئوس ایجاد کنم؟

                              ]چگونه میتونم image card تو پروتئوس ایجاد کنم؟برای کار با mmc

                              دیدگاه

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