اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی MMC

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

    مشکل در راه اندازی MMC

    سلام
    من دارم تک تک مراحل initialize کردن MMC رو می گذرونم تا ببینم جواب ارسال شده از طرف MMC چی هست . توو مرحله ی اول یعنی ریست mmc جواب از سمت mmc 0x01 ارسال میشه که درست هم هست . توو مرحله ی SEND_OP_COND جواب 0 و توو مرحله send_block_size هم جواب 0 هست که درسته . اما وقتی می خوام روی mmc چیزی بنویسم (write_block) وقتی کد اولیه ی مربوط به نوشتن رو ارسال می کنم یعنی 0x58 به جای دریافت جواب 0 مدام 0x40 رو دریافت می کنم . کسی می دونه مشکل کار توو این مرحله کجاست؟
    در ضمن این کارهارو با پروتئوس کردم و صد در صد جواب گرفتم!!!!!!

    #2
    پاسخ : مشکل در راه اندازی MMC

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

    '-------------------------------------------------------------------------------

    $regfile = "M8def.dat"
    '$prog &HFF , &HC1 , &H99 , &H00 ' Generated. Take Care That The Chip Supports All Fuse Bytes.$prog &HFF , &HC4 , &H99 , &H00' Generated. Take Care That The Chip Supports All Fuse Bytes.def.dat ""
    $crystal = 8000000 ' generated. Take care that the chip supports all fuse bytes.000000
    $baud = 9600
    '$prog &HFF , &HFF , &HD9 , &H00 ' generated. Take care that the chip supports all fuse bytes.


    '-------------------------- MMC Pin Configuration ------------------------------
    ' Change this pin configuration if it is necessary in your project.

    ' Chip Select Pin => Pin 1 of MMC/SD

    'Cs Alias Portb.0 : Config Pinb.0 = Output 'for mega 64
    'Mosi Alias Portb.2 : Config Pinb.2 = Output 'Connected to Pin No.2 Of MMC (DataIn)
    'Clk Alias Portb.1 : Config Pinb.1 = Output 'Connected to Pin No.5 Of MMC (Clock)
    'Miso Alias Pinb.3 : Config Pinb.3 = Input







    Cs Alias Portb.2 : Config Pinb.2 = Output 'Connected to Pin No.1 Of MMC (CS)
    Mosi Alias Portb.3 : Config Pinb.3 = Output 'Connected to Pin No.2 Of MMC (DataIn)
    Clk Alias Portb.5 : Config Pinb.5 = Output 'Connected to Pin No.5 Of MMC (Clock)
    Miso Alias Pinb.4 : Config Pinb.4 = Input

    'Config Portb.1 = Output
    'Reset Portb.1 'Connected to Pin No.7 Of MMC (DataOut)

    '---------------------------- MMC Var. Define ----------------------------------
    ' MMC function declarations and variables.
    ' DONT TOUCH THIS PART!!!

    Declare Sub Mmc_init
    Declare Sub Mmc_status
    Declare Sub Mmc_singleread
    Declare Sub Mmc_singlewrite
    Declare Sub Mmc_printbuffer

    Dim Mmc_buffer(512) As Byte
    Dim Sector_pointer As Word
    Dim Free_counter As Word
    Dim Sector_number As Long
    Dim Addr As Long
    Dim Mmc_dat As Byte
    Dim Mmc_resp As Byte
    Dim Mmc_resp2 As Word
    Dim Omid As Long
    Dim Y As Byte
    Dim All As Long

    Dim I As Word
    Dim V As Byte
    Dim T As Byte
    Dim Mah As Long
    Dim S As String * 70
    Dim D As String * 70
    Dim Dd As String * 1
    Dim Ss As String * 1
    Dim Idx As Byte
    Dim A As Byte
    Const Msbl = 0 : Const Msbh = 1
    Const Spidelay = 5

    '-----------------------adc and timer------------------------------------------
    Enable Interrupts
    Config Adc = Single , Prescaler = 8 , Reference = Internal

    Config Timer0 = Timer , Prescale = 1


    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
    Wait 1

    Mmc_init
    'Enable Timer0
    'Start Timer0
    'On Ovf0 Abcd
    'Timer0 = 50

    '----------------------- Your Functions Declarations ---------------------------
    ' Write Your Functions Declarations Here:

    '-------------------------------------------------------------------------------

    '-------------------------------- M A I N --------------------------------------

    'Write Here Your Main Code :
    'Example :

    Dim My_counter As Integer
    Dim In_char As String * 1
    Goto A

    Mmc_buffer(1) = 82
    Mmc_buffer(2) = 73
    Mmc_buffer(3) = 70
    Mmc_buffer(4) = 70
    Mmc_buffer(5) = 52
    Mmc_buffer(6) = 44
    Mmc_buffer(7) = 41
    Mmc_buffer(8) = 0
    Mmc_buffer(9) = 87
    Mmc_buffer(10) = 65
    Mmc_buffer(11) = 86
    Mmc_buffer(12) = 69
    Mmc_buffer(13) = 102
    Mmc_buffer(14) = 109
    Mmc_buffer(15) = 116
    Mmc_buffer(16) = 32
    Mmc_buffer(17) = 18
    Mmc_buffer(18) = 0
    Mmc_buffer(19) = 0
    Mmc_buffer(20) = 0
    Mmc_buffer(21) = 1
    Mmc_buffer(22) = 0
    Mmc_buffer(23) = 1
    Mmc_buffer(24) = 0
    Mmc_buffer(25) = 64
    Mmc_buffer(26) = 31
    Mmc_buffer(27) = 0
    Mmc_buffer(28) = 0
    Mmc_buffer(29) = 64
    Mmc_buffer(30) = 31
    Mmc_buffer(31) = 0
    Mmc_buffer(32) = 0
    Mmc_buffer(33) = 1
    Mmc_buffer(34) = 0
    Mmc_buffer(35) = 8
    Mmc_buffer(36) = 0
    Mmc_buffer(37) = 0
    Mmc_buffer(38) = 0
    Mmc_buffer(39) = 100
    Mmc_buffer(40) = 97
    Mmc_buffer(41) = 116
    Mmc_buffer(42) = 97
    Mmc_buffer(43) = 12
    Mmc_buffer(44) = 1
    Mmc_buffer(45) = 220
    Mmc_buffer(46) = 0
    For My_counter = 47 To 512
    Mmc_buffer(my_counter) = 128
    Next My_counter
    Sector_number = 512
    Mmc_singlewrite







    Mmc_buffer(1) = 78
    Mmc_buffer(2) = 73
    Mmc_buffer(3) = 71
    Mmc_buffer(4) = 77
    Mmc_buffer(5) = 65
    Mmc_buffer(6) = 32
    Mmc_buffer(7) = 32
    Mmc_buffer(8) = 32
    Mmc_buffer(9) = 87
    Mmc_buffer(10) = 65
    Mmc_buffer(11) = 86
    Mmc_buffer(12) = 32
    Mmc_buffer(13) = 24
    Mmc_buffer(14) = 32
    Mmc_buffer(15) = 149
    Mmc_buffer(16) = 155
    Mmc_buffer(17) = 57
    Mmc_buffer(18) = 50

    Mmc_buffer(19) = 57
    Mmc_buffer(20) = 50
    Mmc_buffer(21) = 0
    Mmc_buffer(22) = 0
    Mmc_buffer(23) = 153
    Mmc_buffer(24) = 75
    Mmc_buffer(25) = 55
    Mmc_buffer(26) = 55
    Mmc_buffer(27) = 55
    Mmc_buffer(28) = 3
    Mmc_buffer(29) = 0
    Mmc_buffer(30) = 152
    Mmc_buffer(31) = 124
    Mmc_buffer(32) = 21
    Mmc_buffer(33) = 0


    For My_counter = 34 To 512
    Mmc_buffer(my_counter) = 0
    Next My_counter
    Sector_number = 1920
    Mmc_singlewrite


    'mikham ye track be mizane 500mb bezaram ro cd ta kopi konam roosh
    'bad roo on por mikonam

















    Goto Ab

    A:
    Mah = 78
    Sector_number = 1000
    For My_counter = 1 To 512
    Mmc_buffer(my_counter) = 222
    Next My_counter




    Mmc_singlewrite

    Ab:


    Print "----------START---------"

    Ss:
    For My_counter = 1 To 512
    Mmc_buffer(my_counter) = 13

    Next My_cunter
    'Wait for a key press.
    Input "--WHAT SECTOR READ..." , Sector_number
    'Read Sector No.10 And Fill MMC_Buffer With It :



    Mmc_singleread



    'Wait for a key press.
    'Print "--Press Any Key To Continue..." : In_char = Waitkey()
    'Send MMC Buffer To Serial Port :
    Mmc_printbuffer

    Goto Ss

    End





    Do


    Loop























    '--------------------------------- E N D ---------------------------------------


    '------------------------------- Functions -------------------------------------
    '-------------------------------------------------------------------------------
    ' Write your functions here :


    '-------------------------------------------------------------------------------
    '---------------------------- Initializing MMC ---------------------------------
    Sub Mmc_init

    Print "--Start Initializing MMC ..."
    'Set Portb.1
    Set Cs
    Mmc_dat = &HFF
    For Free_counter = 1 To 10
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Next Free_counter
    Mmc_resp = 255

    Print "--Command No.=0"
    Reset Cs
    '40 dar asl argooman ast
    'yani bite aval 0(start)bit 2vom(1){safhey 473 va 474 ketab}va 6 bit cmd ast}
    Cmd0:
    Mmc_dat = &H40 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay '8 bite avval
    Addr = 0 : Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay '32 bit argooman
    Mmc_dat = &H95 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay 'crc(tashkise khata)
    While Mmc_resp <> &H01 'mitoni inja beshmari bebini chand ta klock mizaneh
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    Print "--Command Response :" ; Hex(mmc_resp)

    Set Cs
    Waitms 50

    Print "--Command No.=1"
    Reset Cs
    Mmc_dat = &HFF
    Cmd1:
    While Mmc_resp <> &H00
    Set Cs
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Reset Cs
    Mmc_dat = &H41 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Addr = 0 : Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    Mmc_dat = &HFF
    Set Cs

    Print "--Command Response :" ; Hex(mmc_resp)
    Print ""
    Mmc_status '***************************chek for status
    Print "--Initialize Complete."


    End Sub
    '-------------------------- MMC Initializing END -------------------------------

    '-------------------------------------------------------------------------------

    '---------------------------- Read MMC Status ----------------------------------
    Sub Mmc_status

    Cmd13:
    Set Cs
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Reset Cs
    Mmc_dat = &H4D : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay 'mmc dat=4d yani 4 ro bi khial d=13
    'ya dakhele dastore cmd 1=mishe 41 va to cmd 0 mishe 40(yooohooo)
    Addr = 0 : Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp2 , Msbl , 8 , Spidelay
    Print "" : Print "--Status :" ; Hex(mmc_resp2)
    Set Cs

    End Sub
    '--------------------------- Read MMC Status END -------------------------------

    '-------------------------------------------------------------------------------

    '------------------------- MMC Read Single Sector ------------------------------
    Sub Mmc_singleread

    Addr = Sector_number * 512
    Print "----------------------------------"
    Print "--Start Sector Reading ..."
    Print "--Read Sector Address :" ; Addr
    Print "--Command No.=17,(Read Single Block)"

    Set Cs
    Mmc_dat = &HFF
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Cmd17:
    Reset Cs
    Mmc_dat = &H51 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    While Mmc_resp <> 0
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    Print "--Command Response :" ; Hex(mmc_resp) : Print ""

    While Mmc_resp <> &HFE

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend

    For Sector_pointer = 1 To 512

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Mmc_buffer(sector_pointer) = Mmc_resp
    Next Sector_pointer

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Set Cs
    Mmc_status '***************************chek for status
    Print "--Sector Reading Finished."

    End Sub
    '----------------------- MMC Read Single Sector END ----------------------------

    '-------------------------------------------------------------------------------

    '------------------------ MMC Write Single Sector ------------------------------
    Sub Mmc_singlewrite

    Addr = Sector_number * 512

    'Print "--Start Sector Writing ..."
    'Print "--Write Sector Address :" ; Addr
    'Print "--Command No.=24(Write Single Block)"

    Set Cs
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay

    Cmd24:
    Reset Cs
    Mmc_dat = &H58 : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Addr , Msbl , 32 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    While Mmc_resp <> 0
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    'Print "--Command Response :" ; Hex(mmc_resp) : Print ""

    Mmc_dat = &HFE : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    For Sector_pointer = 1 To 512
    Mmc_dat = Mmc_buffer(sector_pointer)
    Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Next Sector_pointer

    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay
    Mmc_dat = &HFF : Shiftout Mosi , Clk , Mmc_dat , Msbl , 8 , Spidelay

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Y = Mmc_resp And &H0F
    'If Y = &H05 Then 'if mmcrecp=5 shod data accept misheh jigar
    'Print "" : Print "--Data Accepted."
    'End If

    Waitms 10

    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    'If Mmc_resp = 0 Then Print "--MMC Is Busy!"
    While Mmc_resp = 0
    Shiftin Miso , Clk , Mmc_resp , Msbl , 8 , Spidelay
    Wend
    'Print "--MMC Is Ready!"

    Set Cs
    'Mmc_status
    'Print "--Sector Writing Finished."


    End Sub
    '----------------------- MMC Write Single Sector END ---------------------------

    '-------------------------------------------------------------------------------

    '---------------------------- MMC Print Buffer ---------------------------------
    Sub Mmc_printbuffer

    Print "--Start Reading MMC Buffer ..."

    S = ""
    T = 1
    Print "--MEGGGGGGGGGGA CHIP ADIBAN"
    Print Sector_number
    For Sector_pointer = 1 To 512

    'If Mmc_buffer(sector_pointer) < 30 Then



    'Ss = Lookupstr(mmc_buffer(sector_pointer) , Sdata)
    'Mid(s , T , 1) = Ss
    'Print " " ; S
    'Print Mmc_buffer(sector_pointer)
    'Incr T
    'Else
    Print Mmc_buffer(sector_pointer) ; ",";
    'End If



    Free_counter = Sector_pointer Mod 16
    If Free_counter = 0 Then Print ""
    Next Sector_pointer


    Print "--Reading MMC Buffer Finished."

    End Sub
    '-------------------------- MMC Print Buffer END -------------------------------
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------





    Abcd:
    Start Adc
    A = Getadc(0)
    Stop Adc
    Timer0 = 100
    Mmc_buffer(my_counter) = A
    Incr My_counter

    If My_counter = 255 Then
    Stop Timer0
    My_counter = 0
    Incr Sector_number
    Mmc_singlewrite
    Start Timer0
    End If
    Return











    Sdata:
    Data "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , _
    "N" , "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "X" , "Y" , "Z" , " "
    علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی MMC

      سلام.
      تو این برنامه MMC ......sdata: برای چیست؟

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی MMC

        هیچ چی نیست
        نکته انحرافیه
        من حروف کیبورد رو واسه خودم کد کردم و تو کارت ریختم
        به این تیکه کاری نداشته باش
        باقیش چیزیه که lib انجام میده و تو نمیبینی و میخای بدونی
        تو کتاب مرجع کامل avr هم توضیح داده شده
        علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

        دیدگاه

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