اطلاعیه

Collapse
No announcement yet.

راه اندازی ایسی فلش

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

    راه اندازی ایسی فلش

    سلام خدمت همه دوستان
    تا حالا کسی ایسی فلش at45db161d رو راه انداخته ؟ و اینکه اساس کار و راه اندازی ایسی فلش با mmc فرق داره ؟ من خودم تا حالا با mmc کار نکردم تو سایت راجع به mmc زیاد بحث شده. ممکنه یه چیپ برای mmc معرفی کنید. و یه سوال دیگه اینکه نوشتن یا خوندن با فرمت fat با نوشتن و خوندن sector چه مزیتی داره؟
    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

    #2
    پاسخ : راه اندازی ایسی فلش

    هیچکس نمیتونه کمکی کنه؟؟؟
    اخرین برنامه ای که نوشتم برنامه زیر که فقط 255 رو lcd نمایش داده میشه :
    #include <mega88.h>

    #asm
    .equ __lcd_port=0x0B ;PORTD
    #endasm
    /////////////////////
    #include <lcd.h>
    #include <delay.h>
    #include <stdio.h>
    #include <spi.h>
    #include <stdlib.h>

    #define DF_CS PORTB.0
    #define READY_BUSY 0x80
    #define AT45DB161D_STATUS_REGISTER_READ 0xD7

    void ATD45DB161D_Init(void);
    unsigned int ATD45DB161D_BufferRead(unsigned char bufferNum,unsigned int offset,unsigned char low);
    void ATD45DB161D_BufferWrite(unsigned char bufferNum,unsigned int offset,unsigned char data_w);
    unsigned char ATD45DB161D_ReadStatusRegister();
    void ATD45DB161D_BufferToPage(unsigned char bufferNum,unsigned int page, unsigned char erase);
    void ATD45DB161D_PageToBuffer(unsigned int page,unsigned char bufferNum);



    char lcd[16];
    void main(void)
    { unsigned int resultf;
    // Declare your local variables here

    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=0x80;
    CLKPR=0x00;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif

    // Input/Output Ports initialization
    // Port B 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
    PORTB=0x00;
    DDRB=0xED;

    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x30;

    // 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=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    TCCR0A=0x00;
    TCCR0B=0x00;
    TCNT0=0x00;
    OCR0A=0x00;
    OCR0B=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
    // OC2A output: Disconnected
    // OC2B output: Disconnected
    ASSR=0x00;
    TCCR2A=0x00;
    TCCR2B=0x00;
    TCNT2=0x00;
    OCR2A=0x00;
    OCR2B=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // Interrupt on any change on pins PCINT0-7: Off
    // Interrupt on any change on pins PCINT8-14: Off
    // Interrupt on any change on pins PCINT16-23: Off
    EICRA=0x00;
    EIMSK=0x00;
    PCICR=0x00;

    // Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=0x00;
    // Timer/Counter 1 Interrupt(s) initialization
    TIMSK1=0x00;
    // Timer/Counter 2 Interrupt(s) initialization
    TIMSK2=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    ADCSRB=0x00;
    SPCR=0x50;
    SPSR=0x00;
    lcd_init(16);
    PORTC.4=1;



    while (1)
    {
    char data[16];
    ATD45DB161D_Init();
    ATD45DB161D_BufferWrite(1,12,1);
    ATD45DB161D_BufferToPage(1,1,1);
    ATD45DB161D_PageToBuffer(1,1);

    //resultf=read_spi()/0.65535*0.01250;

    lcd_clear();
    lcd_gotoxy(5,0);
    lcd_putsf("DATA:"
    lcd_gotoxy(3,1);
    resultf=ATD45DB161D_BufferRead(1,12,0);
    ftoa(resultf,0,data);
    sprintf(lcd," %s",data);
    lcd_puts(lcd);
    delay_ms(100) ;
    };
    }
    //***********************************************
    void ATD45DB161D_Init(void)
    { PORTC.5=1;
    PORTC.5=0;
    #asm
    nop
    nop
    #endasm
    PORTC.5=1;
    DF_CS=1;
    SPCR=0x50;

    /* Cleanup registers */
    SPSR=0x00;
    SPDR=0x00;
    }


    //**********************************

    unsigned int ATD45DB161D_BufferRead(unsigned char bufferNum,unsigned int offset,unsigned char low)
    {
    unsigned char uint8_t;
    unsigned char result;
    DF_CS=1; /* Make sure to toggle CS signal in order */
    DF_CS=0; /* to reset Dataflash command decoder */

    /* Send opcode */
    if(bufferNum == 1)
    {
    if (low==1)
    {
    spi(0XD1);
    }
    else
    {
    spi(0XD4);
    }

    }
    else
    {
    if (low==1)
    {
    spi(0XD3);
    }
    else
    {
    spi(0XD6);
    }
    }

    /* 14 "Don't care" bits */
    spi(0x00);
    /* Rest of the "don't care" bits + bits 8,9 of the offset */
    uint8_t=offset >> 8;
    spi(uint8_t);
    /* bits 7-0 of the offset */
    uint8_t=offset & 0xff;
    spi(uint8_t);


    result|=spi(0);
    //result=(unsigned) ((unsigned long) result);
    return result;

    }
    //**************************
    void ATD45DB161D_BufferWrite(unsigned char bufferNum,unsigned int offset,unsigned char data_w)
    { unsigned char uint8_t;
    DF_CS=1; /* Make sure to toggle CS signal in order */
    DF_CS=0; /* to reset Dataflash command decoder */

    if(bufferNum == 1)
    {
    spi(0X84);
    }
    else
    {
    spi(0X87);
    }


    /* 14 "Don't care" bits */
    spi(0x00);
    /* Rest of the "don't care" bits + bits 8,9 of the offset */
    uint8_t=offset >> 8;
    spi(uint8_t);
    /* bits 7-0 of the offset */
    uint8_t=offset & 0xff;
    spi(uint8_t);

    spi(data_w);
    }
    //**************************************
    void ATD45DB161D_BufferToPage(unsigned char bufferNum,unsigned int page, unsigned char erase)
    { unsigned char uint8_t;

    DF_CS=1; /* Make sure to toggle CS signal in order */
    DF_CS=0; /* to reset Dataflash command decoder */
    /* Opcode */
    if(erase)
    {
    if(bufferNum == 1)
    {
    spi(0X83);
    }
    else
    {
    spi(0X86);
    }
    }
    else
    {
    if(bufferNum == 1)
    {
    spi(0X88);
    }
    else
    {
    spi(0X89);
    }
    }

    /*
    * 3 address bytes consist of :
    * - 2 don’t care bits
    * - 12 page address bits (PA11 - PA0) that specify the page in
    * the main memory to be written
    * - 10 don’t care bits
    */
    uint8_t=page >> 6 ;
    spi(uint8_t);
    uint8_t=page << 2;
    spi(uint8_t);
    spi(0x00);

    DF_CS=1; /* Make sure to toggle CS signal in order */
    DF_CS=0; /* to reset Dataflash command decoder */

    /* Wait for the end of the transfer */
    while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
    {}
    }
    //**************************
    unsigned char ATD45DB161D_ReadStatusRegister()
    {
    unsigned char status;

    DF_CS=1; /* Make sure to toggle CS signal in order */
    DF_CS=0; /* to reset Dataflash command decoder */

    /* Send status read command */
    spi(AT45DB161D_STATUS_REGISTER_READ);
    /* Get result with a dummy write */
    status = spi(0x00);
    return status;
    }
    //************************
    void ATD45DB161D_PageToBuffer(unsigned int page,unsigned char bufferNum)
    {
    unsigned char uint8_t;
    DF_CS=1; /* Make sure to toggle CS signal in order */
    DF_CS=0; /* to reset Dataflash command decoder */

    /* Send opcode */
    if(bufferNum == 1)
    {
    spi(0X53);
    }
    else
    {
    spi(0X55);
    }

    /*
    * 3 address bytes consist of :
    * - 2 don’t care bits
    * - 12 page address bits (PA11 - PA0) that specify the page in
    * the main memory to be written
    * - 10 don’t care bits
    */
    uint8_t=page >> 6 ;
    spi(uint8_t);
    uint8_t=page << 2;
    spi(uint8_t);
    spi(0x00);

    DF_CS=1; /* Make sure to toggle CS signal in order */
    DF_CS=0; /* to reset Dataflash command decoder */

    /* Wait for the end of the transfer */
    while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
    {}
    }









    خواهشا دریابید :sad:
    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

    دیدگاه


      #3
      پاسخ : راه اندازی ایسی فلش


      بالاخره تونستم یک بایت رو تو صفحه 1 ایسی بنویسم و بخونم ،نتیجه رو میزارم شاید یکی یه چیزی ازش یاد بگیره از دوستان اگه کسی تجربه بیشتری داره لطفا راهنماییم کنید . ممنون
      (این پست هم از اون پستهایی بود که ادم با خودش حرف میزنه :mrgreen
      #include <mega88.h>

      #asm
      .equ __lcd_port=0x0B ;PORTD
      #endasm
      /////////////////////
      #include <lcd.h>
      #include <delay.h>
      #include <stdio.h>
      #include <spi.h>
      #include <stdlib.h>

      #define DF_CS PORTB.0
      #define READY_BUSY 0x80
      #define AT45DB161D_STATUS_REGISTER_READ 0xD7
      #define AT45DB161D_PAGE_READ 0xD2
      #define AT45DB161D_PAGE_ERASE 0x81
      #define AT45DB161D_CHIP_ERASE_0 0xC7
      #define AT45DB161D_CHIP_ERASE_1 0x94
      #define AT45DB161D_CHIP_ERASE_2 0x80
      #define AT45DB161D_CHIP_ERASE_3 0x9A
      #define AT45DB161D_PAGE_READ 0xD2


      void ATD45DB161D_Init(void);
      unsigned int ATD45DB161D_BufferRead(unsigned char bufferNum,unsigned int offset,unsigned char low);
      void ATD45DB161D_BufferWrite(unsigned char bufferNum,unsigned int offset,unsigned char data_w);
      unsigned char ATD45DB161D_ReadStatusRegister();
      void ATD45DB161D_BufferToPage(unsigned char bufferNum,unsigned int page, unsigned char erase);
      void ATD45DB161D_PageToBuffer(unsigned int page,unsigned char bufferNum);
      void ATD45DB161D_ChipErase();
      unsigned int ATD45DB161D_ReadMainMemoryPage(unsigned int page,unsigned int offset);

      char lcd[16];
      void main(void)
      { unsigned int resultf;
      // Declare your local variables here

      // Crystal Oscillator division factor: 1
      #pragma optsize-
      CLKPR=0x80;
      CLKPR=0x00;
      #ifdef _OPTIMIZE_SIZE_
      #pragma optsize+
      #endif

      // Input/Output Ports initialization
      // Port B 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
      PORTB=0x00;
      DDRB=0xED;

      // Port C initialization
      // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
      // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
      PORTC=0x00;
      DDRC=0x30;

      // 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=0x00;

      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: Timer 0 Stopped
      // Mode: Normal top=FFh
      // OC0A output: Disconnected
      // OC0B output: Disconnected
      TCCR0A=0x00;
      TCCR0B=0x00;
      TCNT0=0x00;
      OCR0A=0x00;
      OCR0B=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
      // OC2A output: Disconnected
      // OC2B output: Disconnected
      ASSR=0x00;
      TCCR2A=0x00;
      TCCR2B=0x00;
      TCNT2=0x00;
      OCR2A=0x00;
      OCR2B=0x00;

      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // Interrupt on any change on pins PCINT0-7: Off
      // Interrupt on any change on pins PCINT8-14: Off
      // Interrupt on any change on pins PCINT16-23: Off
      EICRA=0x00;
      EIMSK=0x00;
      PCICR=0x00;

      // Timer/Counter 0 Interrupt(s) initialization
      TIMSK0=0x00;
      // Timer/Counter 1 Interrupt(s) initialization
      TIMSK1=0x00;
      // Timer/Counter 2 Interrupt(s) initialization
      TIMSK2=0x00;

      // Analog Comparator initialization
      // Analog Comparator: Off
      // Analog Comparator Input Capture by Timer/Counter 1: Off
      ACSR=0x80;
      ADCSRB=0x00;
      SPCR=0x50;
      SPSR=0x00;
      lcd_init(16);
      PORTC.4=1;



      while (1)
      {
      char data[16];
      ATD45DB161D_Init();
      ATD45DB161D_ChipErase();
      ATD45DB161D_BufferWrite(1,12,1);
      ATD45DB161D_BufferToPage(1,1,1);
      //ATD45DB161D_BeginPageWriteThroughBuffer(1,12,1)
      //ATD45DB161D_PageToBuffer(1,1);

      //resultf=read_spi()/0.65535*0.01250;

      lcd_clear();
      lcd_gotoxy(5,0);
      lcd_putsf("DATA:"
      lcd_gotoxy(3,1);
      resultf=ATD45DB161D_ReadMainMemoryPage(1,12);
      ftoa(resultf,0,data);
      sprintf(lcd," %s",data);
      lcd_puts(lcd);
      delay_ms(100) ;
      };
      }
      //***********************************************
      void ATD45DB161D_Init(void)
      { PORTC.5=1;
      PORTC.5=0;
      #asm
      nop
      nop
      #endasm
      PORTC.5=1;
      DF_CS=1;
      SPCR=0x50;

      /* Cleanup registers */
      SPSR=0x00;
      SPDR=0x00;
      }


      //**********************************BUFFER READ

      unsigned int ATD45DB161D_BufferRead(unsigned char bufferNum,unsigned int offset,unsigned char low)
      {
      unsigned char uint8_t;
      unsigned char result;
      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Send opcode */
      if(bufferNum == 1)
      {
      if (low==1)
      {
      spi(0XD1);
      }
      else
      {
      spi(0XD4);
      }

      }
      else
      {
      if (low==1)
      {
      spi(0XD3);
      }
      else
      {
      spi(0XD6);
      }
      }

      /* 14 "Don't care" bits */
      spi(0x00);
      /* Rest of the "don't care" bits + bits 8,9 of the offset */
      uint8_t=offset >> 8;
      spi(uint8_t);
      /* bits 7-0 of the offset */
      uint8_t=offset & 0xff;
      spi(uint8_t);


      result|=spi(0);
      //result=(unsigned) ((unsigned long) result);
      return result;

      }
      //**************************BUFFER WRITE
      void ATD45DB161D_BufferWrite(unsigned char bufferNum,unsigned int offset,unsigned char data_w)
      { unsigned char uint8_t;
      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      if(bufferNum == 1)
      {
      spi(0X84);
      }
      else
      {
      spi(0X87);
      }


      /* 14 "Don't care" bits */
      spi(0x00);
      /* Rest of the "don't care" bits + bits 8,9 of the offset */
      uint8_t=offset >> 8;
      spi(uint8_t);
      /* bits 7-0 of the offset */
      uint8_t=offset & 0xff;
      spi(uint8_t);

      spi(data_w);
      }
      //**************************************BUFFER TO PAGE
      void ATD45DB161D_BufferToPage(unsigned char bufferNum,unsigned int page, unsigned char erase)
      { unsigned char uint8_t;

      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */
      /* Opcode */
      if(erase)
      {
      if(bufferNum == 1)
      {
      spi(0X83);
      }
      else
      {
      spi(0X86);
      }
      }
      else
      {
      if(bufferNum == 1)
      {
      spi(0X88);
      }
      else
      {
      spi(0X89);
      }
      }

      /*
      * 3 address bytes consist of :
      * - 2 don’t care bits
      * - 12 page address bits (PA11 - PA0) that specify the page in
      * the main memory to be written
      * - 10 don’t care bits
      */
      uint8_t=page >> 6 ;
      spi(uint8_t);
      uint8_t=page << 2;
      spi(uint8_t);
      spi(0x00);

      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Wait for the end of the transfer */
      while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
      {}
      }
      //**************************READ STATUS REGISTER
      unsigned char ATD45DB161D_ReadStatusRegister()
      {
      unsigned char status;

      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Send status read command */
      spi(AT45DB161D_STATUS_REGISTER_READ);
      /* Get result with a dummy write */
      status = spi(0x00);
      return status;
      }
      //************************ PAGE TO BUFFER
      void ATD45DB161D_PageToBuffer(unsigned int page,unsigned char bufferNum)
      {
      unsigned char uint8_t;
      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Send opcode */
      if(bufferNum == 1)
      {
      spi(0X53);
      }
      else
      {
      spi(0X55);
      }

      /*
      * 3 address bytes consist of :
      * - 2 don’t care bits
      * - 12 page address bits (PA11 - PA0) that specify the page in
      * the main memory to be written
      * - 10 don’t care bits
      */
      uint8_t=page >> 6 ;
      spi(uint8_t);
      uint8_t=page << 2;
      spi(uint8_t);
      spi(0x00);

      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Wait for the end of the transfer */
      while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
      {}
      }

      //**********************
      //*********************** CHIP ERASE
      void ATD45DB161D_ChipErase()
      {
      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Send chip erase sequence */
      spi(AT45DB161D_CHIP_ERASE_0);
      spi(AT45DB161D_CHIP_ERASE_1);
      spi(AT45DB161D_CHIP_ERASE_2);
      spi(AT45DB161D_CHIP_ERASE_3);

      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Wait for the end of the chip erase operation */
      while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
      {}
      }

      //**************************
      //************************* READ MAIN MEMORY PAGE
      unsigned int ATD45DB161D_ReadMainMemoryPage(unsigned int page,unsigned int offset)
      { unsigned char result;
      unsigned char uint8_t;
      DF_CS=1; /* Make sure to toggle CS signal in order */
      DF_CS=0; /* to reset Dataflash command decoder */

      /* Send opcode */
      spi(AT45DB161D_PAGE_READ);

      /* Address (page | offset) */
      uint8_t= page >> 6;
      spi(uint8_t);
      uint8_t=((page << 2) | (offset >> 8));
      spi(uint8_t);
      uint8_t=(offset & 0xff);
      spi(uint8_t);

      /* 4 "don't care" bytes */
      spi(0x00);
      spi(0x00);
      spi(0x00);
      spi(0x00);
      result|=spi(0);
      //result=(unsigned) ((unsigned long) result);
      return result;

      //?????????????
      }


      چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

      دیدگاه


        #4
        پاسخ : راه اندازی ایسی فلش

        سلام،
        اول بایت Status رو بخونید ببینید مقدار منطقی بهتون میده یا نه. بعد هم یه صفحه در بافر بنویسید و بخونید.
        در ضمن دستورات این IC با کارت های Flash (مثال SD Card، MMC و ...) فرق داره.
        There is nothing so practical as a good theory. — Kurt Lewin, 1951

        دیدگاه


          #5
          پاسخ : راه اندازی ایسی فلش

          نوشته اصلی توسط رضا سپاس یار
          سلام،
          اول بایت Status رو بخونید ببینید مقدار منطقی بهتون میده یا نه. بعد هم یه صفحه در بافر بنویسید و بخونید.
          در ضمن دستورات این IC با کارت های Flash (مثال SD Card، MMC و ...) فرق داره.
          شما خودتون با این ایسی کار کردین؟
          چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

          دیدگاه


            #6
            پاسخ : راه اندازی ایسی فلش

            نوشته اصلی توسط mikla


            شما خودتون با این ایسی کار کردین؟
            سلام،

            بله :smile:
            There is nothing so practical as a good theory. — Kurt Lewin, 1951

            دیدگاه


              #7
              پاسخ : راه اندازی ایسی فلش

              نوشته اصلی توسط رضا سپاس یار
              [quote author=mikla link=topic=24100.msg113609#msg113609 date=1231933405

              سلام،

              بله :smile:
              سلام دوست عزیز
              ممکنه فرق بین این ایسی و mmc , sd رو بگین چیه ؟ چه مزیتهایی نسبت به هم دارن و یه ایسی از نوع mmc و sd معرفی کنید . ممنون از رهنماییتون :redface:
              چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

              دیدگاه


                #8
                پاسخ : راه اندازی ایسی فلش

                * یک مضیت بزرگ آی سی های فلش نسبت به SD و MMC اینه که ارتباط باهاش راحت تره. چون SD ها به دو روش کار میکنند برای همین هند شیکینگ سخت تری نسبت به آی سی ها دارن

                * اما مضیت واضح SD و MMC نسبت به آیسی های فلش حجم متغیر و همچنین بسیار زیاد آن هاست
                وقتی با یک Atmega8 تا حدود 8GB را میتونید استفاده کنید چرا برید سراغ آیسی 1MB ؟ ( البته بسته به کاربرد )

                * البته از لحاظ قیمت هم MMC ها به مراتب ارزان ترند

                OK؟؟؟ :agree:

                دیدگاه


                  #9
                  پاسخ : راه اندازی ایسی فلش

                  برای من مهمترین مسئله قیمت مناسب این آی سی هاست (2 مگ حدود 1500 تومان). اگر به ظرفیت های بالا نیاز دارید همون کارت های Flash مناسب ترند.
                  در ضمن ورودی های این آی سی ها برخلاف Flash Card قابلیت تحمل 5 ولت رو داره و نیاز به مدار تغییر دهنده ی سطح نیست :smile:
                  There is nothing so practical as a good theory. — Kurt Lewin, 1951

                  دیدگاه


                    #10
                    پاسخ : راه اندازی ایسی فلش

                    سلام
                    من دوباره تو گل گیر کردم :sad:
                    میخوام به صورت ارایه ای تو ایس فلش بنویسم ولی نمیدونم چرا جواب نمیده و هیچی رو lcd نمایش داده نمیشه اگه کمک کنید واقعا ممنون میشم برنامه رو هم به صورت زیر تغییر دادم:
                    char data[16];
                    ATD45DB161D_Init(); // تنطیمات ایسی فلش و باس سریال
                    ATD45DB161D_ChipErase();
                    for(i=1;i=10;i++){
                    ATD45DB161D_BufferWrite(1,i,i);//بافر1 ، ادرس i دیتا برابرi
                    ATD45DB161D_BufferToPage(1,1,1);// صفحه 1 و بافر 1 و ابتدا پاک کند
                    //ATD45DB161D_BeginPageWriteThroughBuffer(1,12,1)
                    //ATD45DB161D_PageToBuffer(1,1);
                    delay_ms(100);
                    }
                    //resultf=read_spi()/0.65535*0.01250;

                    lcd_clear();
                    lcd_gotoxy(5,0);
                    lcd_putsf("DATA:"
                    lcd_gotoxy(3,1);
                    for(i=1;i=10;i++){
                    resultf=ATD45DB161D_ReadMainMemoryPage(1,i); //
                    ftoa(resultf,0,data);
                    sprintf(lcd," %s",data);
                    lcd_puts(lcd);
                    delay_ms(100) ;
                    delay_ms(1100);
                    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                    دیدگاه


                      #11
                      پاسخ : راه اندازی ایسی فلش

                      سلام دوست عزیز

                      من با این آی سی خاص کار نکردم ولی اصول ایراد یابی اینه که قدم به قدم پیش بری و جوابی رو که آیسی پس از ارسال دستور برمیگردونه رو با آن چیزی که تو دیتاشیتش نوشته چک کنی

                      زیرا این آی سی ها معمولا پس از ارسال هر دستوری به اونها یک جواب خاص رو مبنی بر پذیرفته شدن جواب میفرستن

                      پس اینطوری میتونی متوجه بشی تا کجا کارت درست بوده

                      پس لطفا دیتا شیت رو خوب بخوان

                      OK؟؟؟

                      دیدگاه


                        #12
                        پاسخ : راه اندازی ایسی فلش

                        سلام :cry:
                        نمیدونم چرا برنامم بگیر نگیر داره ؟؟؟ از دوستان اگه کسی برنامه نمونه داره ممنون میشم بزاره برنامم بعد از اخرین تغییرات به صورت زیر ، تازه هنوز از نوشتن ارایه ای هم جواب نگرفتم
                        خواهشا اگه برنامه نمونه دارین بزارین ممنون
                        #include <mega88.h>

                        #asm
                        .equ __lcd_port=0x0B ;PORTD
                        #endasm
                        /////////////////////
                        #include <lcd.h>
                        #include <delay.h>
                        #include <stdio.h>
                        #include <spi.h>
                        #include <stdlib.h>

                        #define DF_CS PORTB.0
                        #define READY_BUSY 0x80
                        #define AT45DB161D_STATUS_REGISTER_READ 0xD7
                        #define AT45DB161D_PAGE_READ 0xD2
                        #define AT45DB161D_PAGE_ERASE 0x81
                        #define AT45DB161D_CHIP_ERASE_0 0xC7
                        #define AT45DB161D_CHIP_ERASE_1 0x94
                        #define AT45DB161D_CHIP_ERASE_2 0x80
                        #define AT45DB161D_CHIP_ERASE_3 0x9A
                        #define AT45DB161D_PAGE_READ 0xD2


                        void ATD45DB161D_Init(void);
                        unsigned int ATD45DB161D_BufferRead(unsigned char bufferNum,unsigned int offset,unsigned char low);
                        void ATD45DB161D_BufferWrite(unsigned char bufferNum,unsigned int offset,unsigned char data_w);
                        unsigned char ATD45DB161D_ReadStatusRegister();
                        void ATD45DB161D_BufferToPage(unsigned char bufferNum,unsigned int page, unsigned char erase);
                        void ATD45DB161D_PageToBuffer(unsigned int page,unsigned char bufferNum);
                        void ATD45DB161D_ChipErase();
                        unsigned int ATD45DB161D_ReadMainMemoryPage(unsigned int page,unsigned int offset);
                        void SetSizepage(void);
                        char lcd[16];
                        void main(void)
                        { unsigned int resultf;
                        // Declare your local variables here

                        // Crystal Oscillator division factor: 1
                        #pragma optsize-
                        CLKPR=0x80;
                        CLKPR=0x00;
                        #ifdef _OPTIMIZE_SIZE_
                        #pragma optsize+
                        #endif

                        // Input/Output Ports initialization
                        // Port B 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
                        PORTB=0x00;
                        DDRB=0xED;
                        PORTB.2=1;
                        // Port C initialization
                        // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                        // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                        PORTC=0xFF;
                        DDRC=0x30;

                        // 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=0x00;

                        // Timer/Counter 0 initialization
                        // Clock source: System Clock
                        // Clock value: Timer 0 Stopped
                        // Mode: Normal top=FFh
                        // OC0A output: Disconnected
                        // OC0B output: Disconnected
                        TCCR0A=0x00;
                        TCCR0B=0x00;
                        TCNT0=0x00;
                        OCR0A=0x00;
                        OCR0B=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
                        // OC2A output: Disconnected
                        // OC2B output: Disconnected
                        ASSR=0x00;
                        TCCR2A=0x00;
                        TCCR2B=0x00;
                        TCNT2=0x00;
                        OCR2A=0x00;
                        OCR2B=0x00;

                        // External Interrupt(s) initialization
                        // INT0: Off
                        // INT1: Off
                        // Interrupt on any change on pins PCINT0-7: Off
                        // Interrupt on any change on pins PCINT8-14: Off
                        // Interrupt on any change on pins PCINT16-23: Off
                        EICRA=0x00;
                        EIMSK=0x00;
                        PCICR=0x00;

                        // Timer/Counter 0 Interrupt(s) initialization
                        TIMSK0=0x00;
                        // Timer/Counter 1 Interrupt(s) initialization
                        TIMSK1=0x00;
                        // Timer/Counter 2 Interrupt(s) initialization
                        TIMSK2=0x00;

                        // Analog Comparator initialization
                        // Analog Comparator: Off
                        // Analog Comparator Input Capture by Timer/Counter 1: Off
                        ACSR=0x80;
                        ADCSRB=0x00;
                        SPCR=0x50;
                        SPSR=0x00;
                        lcd_init(16);
                        PORTC.4=1;

                        ATD45DB161D_Init();
                        ATD45DB161D_ChipErase();
                        ATD45DB161D_BufferWrite(1,17,1);
                        ATD45DB161D_BufferToPage(1,1,0);


                        while (1)
                        {
                        char data[16];
                        //ATD45DB161D_BeginPageWriteThroughBuffer(1,12,1)
                        //ATD45DB161D_PageToBuffer(1,1);

                        //resultf=read_spi()/0.65535*0.01250;

                        lcd_clear();
                        lcd_gotoxy(5,0);
                        lcd_putsf("DATA:"
                        lcd_gotoxy(3,1);
                        resultf=ATD45DB161D_ReadMainMemoryPage(1,17);
                        ftoa(resultf,0,data);
                        sprintf(lcd," %s",data);
                        lcd_puts(lcd);
                        delay_ms(100) ;
                        };
                        }
                        //***********************************************
                        void ATD45DB161D_Init(void)
                        { PORTC.5=1;
                        PORTC.5=0;
                        #asm
                        nop
                        nop
                        #endasm
                        PORTC.5=1;
                        DF_CS=1;
                        SPCR=0x50;

                        /* Cleanup registers */
                        SPSR=0x00;
                        SPDR=0x00;
                        while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
                        {}
                        // SetSizepage();
                        }


                        //**********************************BUFFER READ

                        unsigned int ATD45DB161D_BufferRead(unsigned char bufferNum,unsigned int offset,unsigned char low)
                        {
                        unsigned char uint8_t;
                        unsigned char result;
                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Send opcode */
                        if(bufferNum == 1)
                        {
                        if (low==1)
                        {
                        spi(0XD1);
                        }
                        else
                        {
                        spi(0XD4);
                        }

                        }
                        else
                        {
                        if (low==1)
                        {
                        spi(0XD3);
                        }
                        else
                        {
                        spi(0XD6);
                        }
                        }

                        /* 14 "Don't care" bits */
                        spi(0x00);
                        /* Rest of the "don't care" bits + bits 8,9 of the offset */
                        uint8_t=offset >> 8;
                        spi(uint8_t);
                        /* bits 7-0 of the offset */
                        uint8_t=offset & 0xff;
                        spi(uint8_t);


                        result|=spi(0);
                        //result=(unsigned) ((unsigned long) result);
                        return result;

                        }
                        //**************************BUFFER WRITE
                        void ATD45DB161D_BufferWrite(unsigned char bufferNum,unsigned int offset,unsigned char data_w)
                        { unsigned char uint8_t;
                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        if(bufferNum == 1)
                        {
                        spi(0X84);
                        }
                        else
                        {
                        spi(0X87);
                        }


                        /* 14 "Don't care" bits */
                        spi(0x00);
                        /* Rest of the "don't care" bits + bits 8,9 of the offset */
                        uint8_t=offset >> 8;
                        spi(uint8_t);
                        /* bits 7-0 of the offset */
                        uint8_t=offset & 0xff;
                        spi(uint8_t);

                        spi(data_w);
                        }
                        //**************************************BUFFER TO PAGE
                        void ATD45DB161D_BufferToPage(unsigned char bufferNum,unsigned int page, unsigned char erase)
                        { unsigned char uint8_t;

                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */
                        /* Opcode */
                        if(erase)
                        {
                        if(bufferNum == 1)
                        {
                        spi(0X83);
                        }
                        else
                        {
                        spi(0X86);
                        }
                        }
                        else
                        {
                        if(bufferNum == 1)
                        {
                        spi(0X88);
                        }
                        else
                        {
                        spi(0X89);
                        }
                        }

                        /*
                        * 3 address bytes consist of :
                        * - 2 don’t care bits
                        * - 12 page address bits (PA11 - PA0) that specify the page in
                        * the main memory to be written
                        * - 10 don’t care bits
                        */
                        uint8_t=page >> 6 ;
                        spi(uint8_t);
                        uint8_t=page << 2;
                        spi(uint8_t);
                        spi(0x00);

                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Wait for the end of the transfer */
                        while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
                        {}
                        }
                        //**************************READ STATUS REGISTER
                        unsigned char ATD45DB161D_ReadStatusRegister()
                        {
                        unsigned char status;

                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Send status read command */
                        spi(AT45DB161D_STATUS_REGISTER_READ);
                        /* Get result with a dummy write */
                        status = spi(0x00);
                        return status;
                        }
                        //************************ PAGE TO BUFFER
                        void ATD45DB161D_PageToBuffer(unsigned int page,unsigned char bufferNum)
                        {
                        unsigned char uint8_t;
                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Send opcode */
                        if(bufferNum == 1)
                        {
                        spi(0X53);
                        }
                        else
                        {
                        spi(0X55);
                        }

                        /*
                        * 3 address bytes consist of :
                        * - 2 don’t care bits
                        * - 12 page address bits (PA11 - PA0) that specify the page in
                        * the main memory to be written
                        * - 10 don’t care bits
                        */
                        uint8_t=page >> 6 ;
                        spi(uint8_t);
                        uint8_t=page << 2;
                        spi(uint8_t);
                        spi(0x00);

                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Wait for the end of the transfer */
                        while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
                        {}
                        }

                        //**********************
                        //*********************** CHIP ERASE
                        void ATD45DB161D_ChipErase()
                        {
                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Send chip erase sequence */
                        spi(AT45DB161D_CHIP_ERASE_0);
                        spi(AT45DB161D_CHIP_ERASE_1);
                        spi(AT45DB161D_CHIP_ERASE_2);
                        spi(AT45DB161D_CHIP_ERASE_3);

                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Wait for the end of the chip erase operation */
                        while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
                        {}
                        }

                        //**************************
                        //************************* READ MAIN MEMORY PAGE
                        unsigned int ATD45DB161D_ReadMainMemoryPage(unsigned int page,unsigned int offset)
                        { unsigned char result;
                        unsigned char uint8_t;
                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; /* to reset Dataflash command decoder */

                        /* Send opcode */
                        spi(AT45DB161D_PAGE_READ);

                        /* Address (page | offset) */
                        uint8_t= page >> 6;
                        spi(uint8_t);
                        uint8_t=((page << 2) | (offset >> 8));
                        spi(uint8_t);
                        uint8_t=(offset & 0xff);
                        spi(uint8_t);

                        /* 4 "don't care" bytes */
                        spi(0x00);
                        spi(0x00);
                        spi(0x00);
                        spi(0x00);
                        result|=spi(0);
                        //result=(unsigned) ((unsigned long) result);
                        return result;

                        }
                        void SetSizepage(void){ //Five Twelve (512)//****************programming configration register***************
                        unsigned char stat;

                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        DF_CS=0; //Select the chip
                        spi(0x3D);
                        spi(0x2A);
                        spi(0x80);
                        spi(0xA6);
                        DF_CS=1; /* Make sure to toggle CS signal in order */
                        while(!(ATD45DB161D_ReadStatusRegister() & READY_BUSY))
                        {}

                        }
                        چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                        دیدگاه


                          #13
                          پاسخ : راه اندازی ایسی فلش

                          هیچکس یه نمونه برنامه برای این ایسی نداره ؟؟ به هر زبانی باشه مهم نیست . یکی یه مددی برسونه :cry:
                          چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                          دیدگاه


                            #14
                            پاسخ : راه اندازی ایسی فلش

                            نوشته اصلی توسط رضا سپاس یار


                            شما خودتون با این ایسی کار کردین؟
                            سلام،

                            بله :smile:
                            [/quote]

                            فکر کنم منظور این آقا این بود که اگه کارکردین و میدونین باید چجوری راه اندازیش کرد، یه سورسی یا راهنمایی جامعی بفرمائید نه اینکه یه پست اضافه کنید و بگید بله یا خیر!!!


                            دیدگاه

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