اطلاعیه

Collapse
No announcement yet.

ارتباط با مموری بدون کتابخونه

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

    ارتباط با مموری بدون کتابخونه

    سلام
    من میخوام تو bascom بدون استفاده ازکتابخونه fat و مموری مثلا یه آدرس مشخصی از مموری رو بخونم یه pdf خوندم از آقای علی تروشه ایشون گفتن اول باید مموری ریست بشه بعد INIT و بعد یه سکتور از مموری خونده بشه من اومدم تو بسکام دستوراتی که ایشون نوشته بودن به مموری دادم اما هیچ جوابی از مموری نگرفتم البته فقط تو پروتیوس امتحان کردم درضمن با پروتیوس و کتابخونه فات مشکل ندارم و بدون مشکل کار میکنه اما اینجور نه این یه نمونه از کدیه که برای ریست نوشتم که تویه اون لوپ آخری که منتظر جواب مموریه گیر میکنه



    Reset Mmc_csn
    Dastoor = &HFF
    For I = 1 To 10
    Spiout Dastoor , 1
    Next

    Dastoor = &H40
    Spiout Dastoor , 1


    Dastoor = &H00
    For I = 1 To 4
    Spiout Dastoor , 1
    Next


    Dastoor = &H95
    Spiout Dastoor , 1


    Dastoor = &HFF
    Do
    Spiout Dastoor , 1
    Spiin Vroodi , 1
    If Vroodi = &H01 Then
    Exit Do
    end if
    Loop
    Cls
    Lcd "reset shod"

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

    من با این برنامه کار کردم و جواب هم گرفتم


    کد:
    '-------------------------------------------------------------------------------
    
    $regfile = "M64def.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 = 16000000                     ' 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
    
    
    
    
    
    
    
    For My_counter = 34 To 512
    Mmc_buffer(my_counter) = 0
    Next My_counter
    Sector_number = 1920
    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
    علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

    دیدگاه


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

      از کمکتون ممنونم شما از این کد تو پروتیوس جواب گرفتین؟

      دیدگاه


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

        برای command 0 مموری جواب میفرسته اما برای command بعدی یعنی command 1 جوابی نمیده حالا نمیدونم تو پروتیوس اینجوره یا نه

        دیدگاه


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

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

          دیدگاه


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

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

            دیدگاه


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

              من متاسفانه به یه مشکل دیگه برخورد کردم اونم اینه که نمیدونم چرا وقتی مثلا میزارم از سکتور صفر بخونه و بنویسه خودش میره از آدرس 016777200 شروع میکنه کلا آدرس شروعو این در نظر میگیره
              مرسی

              دیدگاه


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

                نوشته اصلی توسط ali3635
                من متاسفانه به یه مشکل دیگه برخورد کردم اونم اینه که نمیدونم چرا وقتی مثلا میزارم از سکتور صفر بخونه و بنویسه خودش میره از آدرس 016777200 شروع میکنه کلا آدرس شروعو این در نظر میگیره
                مرسی
                دوباره برنامه بالا رو یه جای دیگه کامپایل کن و چک کن
                اگر دیتایی که از تو سکتور ها بر میگردونه مثلا تو سکتور 265423 هی عوض میشه مموریت رفته اون دنیا
                علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

                دیدگاه

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