NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4435 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 20 از 20

موضوع: چند سئوال برای سکتور نویسی در mmc + استفاده از isp در atmega 128

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2011
    نوشته ها
    81
    تشکر
    18
    تشکر شده 122 بار در 73 پست

    Gadid چند سئوال برای سکتور نویسی در mmc + استفاده از isp در atmega 128

    با سلام .ممنون از سایت خوبتون .

    من بازم سوال دارم . از اساتید محترم خواهش می کنم کمکم کنند .

    1- برای سکتور نویسی در SD RAM چه گونه باید آدرس دهی کنم . (فرمول خاصی داره)
    من می خوام یک رم 1 گیگا بایتی را با 30 جمله که حجمشون کمتر از 512 بایه را روی سکتور مموری به شماره سکتور 1 تا 30 ذخیره کنم. یعنی می خوام در اصل جملاتم به ترتیب باشه . و اگر بخوام سکتور 15 را بخونم مستقیم با آدرس دهی برم سراغ این سکتور . یک راهنمایی بکنید .
    2- من از ATMEGA128 دارم استفاده میکنم . با کریستال 16 مگا . نیاز به سرعت بسیار بالایی برای خوندن از MMC (در حد خوندن ار sram) دارم . میتونم با fat و داشتن یک فایل txt رو mmc استفاده کنم ؟

    3- برای فرمت کردن (حذف کامل اطلاعات ) هم به روش سکتوری و هم به روش fat باید چه کار کنم. در روش سکتوری حتما باید سکتور ها را کامل پیمایش و 00 روشون بنویسم یا درستور خواصی داره ؟

    4- برای پروگرام کردن Atmega128 بروی برد (in system programming) چه پایه هایی و چگونه بایه به پورت استاندارد پروگرمر AVR ISP متصل شوند .

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  4. #2
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    سلام
    زبان برنامه نویسیتون چیه؟

    شما میتونید همون پروگرامر STK200/300 رو با شکل زیر به Mega128 وصل کنید.
    دقت کنید که پایه PEN میکرو هم به Vcc وصل شده باشه.

    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: pic.GIF
مشاهده: 164
حجم: 15.5 کیلو بایت  

  5. تشکرها از این نوشته :


  6. #3
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2011
    نوشته ها
    81
    تشکر
    18
    تشکر شده 122 بار در 73 پست

    پیش فرض

    مرسی . من با بسکام کار میکنم .

  7. تشکرها از این نوشته :


  8. #4
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط starsoheil نمایش پست ها
    2- من از atmega128 دارم استفاده میکنم . با کریستال 16 مگا . نیاز به سرعت بسیار بالایی برای خوندن از mmc (در حد خوندن ار sram) دارم . میتونم با fat و داشتن یک فایل txt رو mmc استفاده کنم ؟
    سلام
    مهندس اگه ميخواين فعلا همون كاري كه در قسمت اول گفتيد رو انجام بديد، مشكلي با سرعت نداريد.
    شما خودتون كاري انجام داديد؟ برنامه اي نوشتيد؟
    _____________________________________
    _____________________________________

  9. تشکرها از این نوشته :


  10. #5
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2011
    نوشته ها
    81
    تشکر
    18
    تشکر شده 122 بار در 73 پست

    پیش فرض

    من این تابع رو برای خوندن و نوشتن رو سکتور نوشتم . ببینید عیبی نداره ؟؟؟
    فقط نوع آدرس دهی های قاطی میکنه ؟؟؟؟ مثلا من می خوام رو سکتور 5 بنویسم آدرس 5 را نباید بفرستم . (اینجور که چند جا خوندم ) . باید آدرسو محاسبه کنم .

    کد:
    Function Writemmc_sector(byval Num As Long) As Byte
    Local Command As Byte
    Local K As Byte
    Local Response As Byte
    Local Address As Long
    Local Repeat As Integer
    
    Address = Num
    
    Print Address
    Set Cs
    Command = &HFF
    Spiout Command , 1
    Reset Cs
    Command = &H58
    Spiout Command , 1
    
    Spiout Address , 4
    Command = &HFF
    Spiout Command , 1
    Spiout Command , 1
    Spiin Response , 1
    While Response <> 0
    Spiin Response , 1
    Wend
    Print Hex(response)
    Command = &HFE
    Spiout Command , 1
    Command = 10
    For Repeat = 1 To 512
    Command = Sect(repeat)
    Spiout Command , 1
    Next Repeat
    Command = &HFF
    Spiout Command , 1
    Command = &HFF
    Spiout Command , 1
    Spiin Response , 1
    Spiin Response , 1
    Spiin Response , 1
    While Response = 0
    Spiin Response , 1
    Wend
    Writemmc_sector = 1
    End Function
    کد:
    Function Read_mmc_sector(byval Num As Long) As Byte
    Local Command As Byte
    Local Response As Byte
    Local Reads(512) As Byte
    Local Address As Long
    Local Repeat As Integer
    Address = num
    Print Address
    
    Set Cs
    Print "step 1"
    Command = &HFF
    Spiout Command , 1
    Reset Cs
    Print "step 2"
    Command = &H51
    Spiout Command , 1
    'Address = &H00
    Print "step 3"
    Spiout Address , 4
    'Command = &HFF
    Print "step 4"
    'Spiout Command , 1
    Spiin Response , 1
    Print "step 5"
    Wait 1
    While Response <> 0
    Spiin Response , 1
    Wend
    Print "step 6"
    While Response <> &HFE
    Spiin Response , 1
    Wend
    Waitms 100
    Print "step 7"
    For Repeat = 1 To 512
    Spiin Response , 1
    Sect(repeat) = Response
    Next I
    Waitms 100
    Print "step 8"
    Set Cs
    Set Read_mmc_sector
    End Function
    این برنامه تست شده است و فقط رو سکتور 1 جواب میده ....!!!

  11. کاربران : 2 تشکر کرده اند از شما starsoheil برای ارسال این پست سودمند:


  12. #6
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    خوب قسمت اصلي برنامتون رو قرار بديد يعني از اين دستورات چطوري استفاده ميكنيد؟ مقدار دهي چجوريه؟
    لطفا اون قسمتارو هم بذاريد.
    _____________________________________
    _____________________________________

  13. تشکرها از این نوشته :


  14. #7
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    چرا از توابع آماده خود بسکام استفاده نمی کنید؟
    با دستورای زیر راحت می تونید همین کاری که می خواید رو انجام بدید:
    کد:
    DriveCheck, DriveReset , DriveInit , DriveGetIdentity , DriveWriteSector , DriveReadSector

  15. تشکرها از این نوشته :


  16. #8
    تازه وارد
    تاریخ عضویت
    Feb 2012
    نوشته ها
    3
    تشکر
    2
    تشکر شده 4 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali_h نمایش پست ها
    چرا از توابع آماده خود بسکام استفاده نمی کنید؟
    با دستورای زیر راحت می تونید همین کاری که می خواید رو انجام بدید:
    کد:
    drivecheck, drivereset , driveinit , drivegetidentity , drivewritesector , drivereadsector
    اینارو میدونیم
    تو هلپشم هست
    یه نمونه برنامه بزار
    مرسی

  17. تشکرها از این نوشته :


  18. #9
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2011
    نوشته ها
    81
    تشکر
    18
    تشکر شده 122 بار در 73 پست

    پیش فرض

    مگه این توابع هم هست ؟؟؟؟؟
    من اولین باره میبینم ؟؟

    میتونید یک مثال و توضیحاتشو قرار بدید ؟؟ ممنون میشم .

  19. تشکرها از این نوشته :


  20. #10
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2011
    نوشته ها
    81
    تشکر
    18
    تشکر شده 122 بار در 73 پست

    پیش فرض

    راستی بگید برای استفاده از این توابع چه فایل های باید ضمیمه بشند و چه جوری ؟

  21. تشکرها از این نوشته :


  22. #11
    تازه وارد behrouzmahdavi آواتار ها
    تاریخ عضویت
    Dec 2009
    نوشته ها
    4
    تشکر
    3
    تشکر شده 14 بار در 4 پست

    پیش فرض

    سلام
    کد:
    DriveCheck, DriveReset , DriveInit , DriveGetIdentity , DriveWriteSector , DriveReadSector
    DriveWriteSector : این دستور برای نوشتن تویه رم هستش
    DriveReadSector:این دستور برای خواندن از رم هستش
    قبل این دو دستور، باید این دستور VARPTR رو بدونین که
    این دستور ادرس حافظه شمارو میده پس اگه شما یک ارایه تعریف کنید ادرس اون رو میده
    برای مثال:
    Dim Abuffer(512) As Byte
    یک ارایه 512 بایتی تعریف می کنیم (نکته : باید 512 بایت باشه چون معادل یک سکتوره)
    Wsrampointer = Varptr(abuffer(1))
    با این دستور ما ادرس متغیر Abuffer(1) رو از بایت اول میگیریم
    Gbdriveerror = Drivewritesector(wsrampointer , Lsectornumber)
    Lsectornumber :این متغیر شماره سکتور مورد نظر خودتون رو توش قرار میدین چون عدد مستقیم قبول نمیکونه
    Gbdriveerror: این متغیر زمانی استفاده میشه که اگر انتقال محتویات از ادرس sram (ادرس متغیرتون) به سکتور موردنظر بدون خطا باشد برابر صفر میشود.
    برای خواندن هم مثل نوشتن باید همین راه رو رفت...
    همونطور که دوستمون گفت توی هلپشم هست ...


  23. کاربران : 4 تشکر کرده اند از شما behrouzmahdavi برای ارسال این پست سودمند:


  24. #12
    تازه وارد behrouzmahdavi آواتار ها
    تاریخ عضویت
    Dec 2009
    نوشته ها
    4
    تشکر
    3
    تشکر شده 14 بار در 4 پست

    پیش فرض

    نقل قول نوشته اصلی توسط starsoheil نمایش پست ها
    راستی بگید برای استفاده از این توابع چه فایل های باید ضمیمه بشند و چه جوری ؟
    منظورتون رو متوجه نشدیم...
    اگه منظور اون دستور های ذکر شده هستش، باید بگم این توابع خود بسکام هستش نیازی به اضافه کردن فایل نیست

  25. کاربران : 2 تشکر کرده اند از شما behrouzmahdavi برای ارسال این پست سودمند:


  26. #13
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    کد:
    $regfile = "m32def.dat"
    $crystal = 8000000
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 8                                                'default use 10 for the SW stack
    $framesize = 24
    
    
    ' TA'RIFE PINHAII KE MMC BE ANHA VASL MISHAVAD
    
    Const Cmmc_soft = 1
    
    Config Pinb.4 = Output
    Mmc_cs Alias Portb.4
    Set Mmc_cs
    
    Config Pinb.3 = Output
    Set Pinb.3
    Mmc_portmosi Alias Portb
    Bmmc_mosi Alias 3
    
    Config Pinb.1 = Input
    Mmc_portmiso Alias Pinb
    Bmmc_miso Alias 1
    
    Config Pinb.2 = Output
    Set Pinb.2
    Mmc_portsck Alias Portb
    Bmmc_sck Alias 2
    
    ' PAIANE TARIFE PINHAIE MMC
    
    ' Errors
    Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command
    Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command
    Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command
    Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command
    Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read
    Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write
    Const Cperrdrive = 231
    Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet
    
    Waitms 10                                                   ' Wait some time before initialising MMC/SD
    
    Dim Gbdriveerror As Byte                                    ' General Driver Error register
    Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
    Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
    Dim Gbdrivedebug As Byte
    
    Dim Wsrampointer As Word
    Dim Lsectornumber As Long
    Dim Berror As Byte
    
    Dim Abuffer(512) As Byte
    
    $lib "MMC.LIB"                                              ' link driver library
    $external _mmc
    Gbdriveerror = Driveinit()                                  ' Init MMC/SD Card
    Gbdriveerror = Drivecheck()
    
    Waitms 100                                                  ' wait after initializing
    
    ' BARAIE KHANDAN AZ SECTOR 0 VA COPY KARDANE AN DAR ARRAYE ABUFFER
    Wsrampointer = Varptr(abuffer(1))
    Lsectornumber = 0
    Berror = Drivereadsector(wsrampointer , Lsectornumber)
    
    ' BARAIE NEVESHTANE ARRAYE ABUFFER RUIE SECTORE 1
    Lsectornumber = 1
    Berror = Drivewritesector(wsrampointer , Lsectornumber)
    
    End

    برای درست کار کردن این کد فقط فایل MMC.LIB نیاز هست که در فولدر خود بسکام هست.

    از همین روش می تونید به همراه AVR DOS برای راه اندازی سیستم FAT استفاده کنید.

    می تونید mmc رو به هر پایه ای از AVR که خواستید وصل کنید و پایه ها رو در محل مشخص شده تعیین کنید. یا اینکه اگر خواستید mmc رو به spi سخت افزاری وصل کنید از کد زیر بجای تعریف پایه ها استفاده کنید :
    کد:
    Const Cmmc_soft = 0
    
    Config Pinb.4 = Output                                      ' define here Pin for CS of MMC/SD Card
    Mmc_cs Alias Portb.4
    Set Mmc_cs
    
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
    Spsr = 1
    Spiinit                                                     ' Init SPI

    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: txt sample.txt (2.5 کیلو بایت, 39 نمايش)

  27. کاربران : 2 تشکر کرده اند از شما ali_h برای ارسال این پست سودمند:


  28. #14
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    نقل قول نوشته اصلی توسط b.m نمایش پست ها
    اینارو میدونیم
    تو هلپشم هست
    یه نمونه برنامه بزار
    مرسی
    چشم آقا گذاشتم چرا می زنی حالا؟!

  29. کاربران : 2 تشکر کرده اند از شما ali_h برای ارسال این پست سودمند:


  30. #15
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2011
    نوشته ها
    81
    تشکر
    18
    تشکر شده 122 بار در 73 پست

    پیش فرض

    سلام و ممنون .

    من جواب سوالمو گرفتم .

    حالا یک سوال دیگه
    می خوام میکروم 2تا کارو جداگانه انجام بده ! البته نه به طور همزمان . میخوام اگر پورت b.0 یک بود بره سراغ خوندن از mmc و زمانی که این پورت 0 شد . بره سراغ نوشتن از mmc . تا اینجاش ساده است ولی مشکل من این تیکه هست . می خوام یه جورایی مثل وقفه باشه . یعنی هر بار نمی خوام پورت b.0 را چک کنم . میخوام خوندنو ادامه بده تا زمانی که این پورت 1 هست . به محض اینکه پورت 0 شد بنویسه رو رم و دوباره تازمانی که پورت 1 شد برگرده سر خوندن .

  31. کاربران : 2 تشکر کرده اند از شما starsoheil برای ارسال این پست سودمند:


  32. #16
    تازه وارد
    تاریخ عضویت
    Feb 2012
    نوشته ها
    3
    تشکر
    2
    تشکر شده 4 بار در 3 پست

    پیش فرض

    سلام
    من توی پروتئس جواب گرفتم ولی
    توی عملی نتونستم جواب بگیرم
    من برنامه من درسته نمیدونم اشکال کجاست
    Berror = Drivereadsector(wsrampointer , Lsectornumber)
    berror من صفره یعنی انتقال به ارایه به درستی انجام شد

  33. تشکرها از این نوشته :


  34. #17
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    سلام
    اگه حداقل یک تکه از برنامتون رو بذارید بهتر می شه کمکتون کرد

  35. کاربران : 2 تشکر کرده اند از شما ali_h برای ارسال این پست سودمند:


  36. #18
    تازه وارد
    تاریخ عضویت
    Feb 2012
    نوشته ها
    3
    تشکر
    2
    تشکر شده 4 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط b.m نمایش پست ها
    سلام
    من توی پروتئس جواب گرفتم ولی
    توی عملی نتونستم جواب بگیرم
    من برنامه من درسته نمیدونم اشکال کجاست
    berror = drivereadsector(wsrampointer , lsectornumber)
    berror من صفره یعنی انتقال به ارایه به درستی انجام شد
    جواب گرفتم درست شد
    مرسی از همتون شرمنده ...

  37. کاربران : 2 تشکر کرده اند از شما b.m برای ارسال این پست سودمند:


  38. #19
    عضو جدید
    تاریخ عضویت
    Nov 2011
    نوشته ها
    16
    تشکر
    34
    تشکر شده 8 بار در 7 پست

    پیش فرض

    دستورات کار با mmc در کدویژن چیه؟میشه درباره اونا هم توضیح بدین؟

  39. کاربران : 2 تشکر کرده اند از شما sadeghmojtaba برای ارسال این پست سودمند:


  40. #20
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2011
    نوشته ها
    81
    تشکر
    18
    تشکر شده 122 بار در 73 پست

    پیش فرض

    نقل قول نوشته اصلی توسط starsoheil نمایش پست ها
    سلام و ممنون .

    من جواب سوالمو گرفتم .

    حالا یک سوال دیگه
    می خوام میکروم 2تا کارو جداگانه انجام بده ! البته نه به طور همزمان . میخوام اگر پورت b.0 یک بود بره سراغ خوندن از mmc و زمانی که این پورت 0 شد . بره سراغ نوشتن از mmc . تا اینجاش ساده است ولی مشکل من این تیکه هست . می خوام یه جورایی مثل وقفه باشه . یعنی هر بار نمی خوام پورت b.0 را چک کنم . میخوام خوندنو ادامه بده تا زمانی که این پورت 1 هست . به محض اینکه پورت 0 شد بنویسه رو رم و دوباره تازمانی که پورت 1 شد برگرده سر خوندن .
    جواب سوال من چی شد ؟

  41. کاربران : 2 تشکر کرده اند از شما starsoheil برای ارسال این پست سودمند:


موضوعات مشابه

  1. پاسخ: 4
    آخرين نوشته: 28-03-2018, 17:30
  2. !!!!! رگولاتور ولتاژ ژنراتور با استفاده از فیدبک !!!!!
    توسط REZA_KLNTR در انجمن کنترل هوشمند و plc
    پاسخ: 19
    آخرين نوشته: 29-05-2016, 17:18
  3. پاسخ: 2
    آخرين نوشته: 01-03-2013, 20:28
  4. برنامه نویسی کرتکس ها بدون توابع cmsis
    توسط Aghaeifar در انجمن Cortex-a8-a9 arm9-11
    پاسخ: 31
    آخرين نوشته: 03-09-2012, 09:32
  5. استفاده از هدر در برنامه نویسی
    توسط alimohammad_s در انجمن AT91 series (ATMEL)
    پاسخ: 13
    آخرين نوشته: 12-09-2011, 23:58

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •