در سایت کتابخانه هایی برای زبانهای برنامه نویسی مختلف برای این منظور قرار داره که میتوانید از آنها استفاده کنید
اگر سرچ بزنید راحت پیدا میشه
درضمن برای کار با فرمت Fat نیز امکاناتی قرار داره
شما میآتوانید بسته به نیاز خود از این امکانات استفاده کنید
البته لازم به ذکر است که برای درک نحوه عملکرد هریک از این کتابخانه ها لازم است تا اطلاعات دقیقی راجع به نحوه هندشیکینگ MMC or SD که شبیه به هم هستند بیابید که توصیه میکنم یکی از دیتاشیتهای مربوط به شرکت SANDisk را مطالعه کنید
تو این برنامه که گزاشتم فقط کافیه شماره سکتور رو وارد کنین و بعدش محتویاط سکتور رو میریزه بیرون
بسیار ساده و قابل فهمه و به صورت lib هم نیس که نفهمین چه کارهایی اتفاق میفته
'-------------------------------------------------------------------------------
$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
'-------------------------------- 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
'---------------------------- 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
سلام ممنون از جواب ها. من در حقیقت می خواهم با استفاده از ویزیال بیسیک یک بایت رو روی سکتور شماره 1 اس دی کارت بنویسم. منمی توانم یک بایت رو به پورت سریال ارسال کنمو از انجا به میکرو و از میکرو به اس دی کارت ارسال کنم ولی برای ارسال تعداد زیاد بایت زمان زیادی صرف می شود در نتیجه می خواهم اس دی کارت رو به کامپیوتر وصل کنم و با استفاده از برنامه ای ان بایت ها رو در سکتور اس دی ذخیره کنم.
سلام. من نمی خواهم ویروس بنویسم. من یک تابلوی چرخشی ساختم. و یک sd کارت به atmega123 وصل کردم. در visual basic یک برنامه نوشتم که پیکسل یک عکس رو به صورت بایری تبدیل می کند و به پورت سریال کامپیوتر ارسال میکند میکرو دریافت می کند و در sd کارت ذخیره می کند. همین کار تا اخرین بایت انجام می شود. حالا اگر یک عکس طول 96 × عرض 112 را به پورت سریال ارسال کنیم تا در sd کارت ذخیره شود حدود 1 تانیه طول می کشد. حالا من اگر 1000 تا عس بخواهم پشت سر هم ارسال کنم 1000 تانیه طول می کشد. حلا می خواهم sd کارت رو به کامپیوتر وصل کنم و بایت به بایت رو به جای اینکه به پورت سریال ارال کنم ان رو مستقیم رو سکتور کارت ذخیره کنم. هر سکتور 512 kb است.
سلام. من نمی خواهم ویروس بنویسم. من یک تابلوی چرخشی ساختم. و یک sd کارت به atmega123 وصل کردم. در visual basic یک برنامه نوشتم که پیکسل یک عکس رو به صورت بایری تبدیل می کند و به پورت سریال کامپیوتر ارسال میکند میکرو دریافت می کند و در sd کارت ذخیره می کند. همین کار تا اخرین بایت انجام می شود. حالا اگر یک عکس طول 96 × عرض 112 را به پورت سریال ارسال کنیم تا در sd کارت ذخیره شود حدود 1 تانیه طول می کشد. حالا من اگر 1000 تا عس بخواهم پشت سر هم ارسال کنم 1000 تانیه طول می کشد. حلا می خواهم sd کارت رو به کامپیوتر وصل کنم و بایت به بایت رو به جای اینکه به پورت سریال ارال کنم ان رو مستقیم رو سکتور کارت ذخیره کنم. هر سکتور 512 kb است.
oo: oo:بالاخره چی شد ... ما که نفهمیدیم
داده ها رو بصورت فایل میخوای بریزی روی mmc یا Sd خوب به سکتور چی کار داری. مگه مموری کجا وصله
اصلا یه چیز دیگه، 1000 ثانیه طول میکشه ، مموری رو از مدار جدا میکنی تا بریزی توش، دوباره وصل میکنی به مدار!
اگه قرار به جدا کردن مموری از مداره، دیگه Rs232 چیه؟ اگه مموری از مدار جدا میشه خوب کپی کن فایل را بریز توی مموری!
نکنه میخوای بعد از ایجاد فایل خود برنامه اتوماتیک فایل رو کپی کنه روی مموری
این یه چیزه دیگست؟
تمام درایو ها یه مشخصه removable دارن که برای مموری ها True هست باید با اون دتکت کنی کدون درایو اینطوریه یا بدی کار بر درایو رو انتخاب کنه
بعد هم کپی کنی
یکی اینه:
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21051491.html
یه تابع اینجوریه:
FileCopy strFileName, strFullFileName
که name ها مسیر کامل فایلها هستن
اینم بعدش بنویسی میگه اون پنجره کپی شدن هم دیگه ظاهر نمیشه:
frmFileCopy.Hide
اینم یکی دیگه:
http://www.bigresource.com/VB-Copy-files-with-VB6-using-the-file-copy-dialog-box-of-Windows-98-iRcVKFzZqR.html
این باحال تر بود
سلام دوست من.
شما منظور منو خوب متوجه نشدید. دوباره توضیح می دهم. من یک تابلو ساختم. بعد از گرفتاری زیاد بالاخره تونستم اطلاعات عکس رو در sd card ذخیره کنم.و عکس مورد نظر رو نمایش بدهم. روش کاری که انجام دادم به این صورت است. یک sd card را به atmega128 وصل کردم. یک برنامه هم با visual basic 6.0 نوشتم که اول یک عکس را به کد هگز تبدیل می کند. بعد اعداد هگز که هر کدام یک بایت است را از طریق پورت سریال به sram میکرو ارسال می کند . وقتی بافر sram 512 بایت دریافت کرد آن را در اولین سکتور sd card ذخیره می کند الا آخر.
چون تعداد عکس ها زیاد است و مدت زمان زیادی طول می کشد تا عکس ها ذخیره بشوند.
حالا چیزی که من می خواهم.
بعد از اینکه عکس را به کد هگز تبدیل شد به جای اینکه بایت را به پورت سریال ارسال کنیم تا در sd card ذخیره شود sd card را به کارت رایتر/ریدر وصل کنم و بایت به بایت در سکتور sd card ذخیره شود. در جواب سوال شما که چرا با سکتور کار دارم باید عرض کنم که چون من از فرمت fat استفاده نمی کنم. چون با فرمت فت سرعت کارم را خیلی پایین می آورد. یعنی اگر عکس را در sd card ذخیره کنم برای نشان دادن ان باید از فرمت فت استفاده کنم که سرعت بازسازی تصویر خیلی کم می شود.
با تشکر محمد شرفی
پس دارید از sd بجای فرقون استفاده میکنید؟ :mrgreen: :mrgreen:
والا نمی دونم بشه به این راحتی ها انجام داد
شما اون مطالب قبلی (دو سه تا پاسخ بالاتر) رو نگاه کردید؟ بدرد نخورد؟ من الان vb6 نصب ندارم نمیتونم تستش کنم!
ولی میدونید اگه توی انتخاب درایو خطائی پیش بیاد خیلی خطرناکه!!! ممکنه هارد منهدم بشه؟ میشه همون ویروسه که گفتم؟
نمیشه از یه روش Safe تر استفاده کنید(مثلا اگه مموری تازه فرمت شده باشه و چیزی توش نباشه هرچی فایل بریزی بترتیب میریزه توی سکتورها. اینطوری بجای اینکه مثلا از سکتور صفر شروع کنید مثلا از سکتور 3000 شروع میکنید به خوندن. حجم فایل رو هم بدونید دیگه حله هر وقت به پایان رسیدید خوندن متوقف میشه)
فرض کنیم مموری رو فرمت کردیم و می خواهم 100 تا عکس بریزم تو مموری. مموری موقع خوندن فقط می تونه سکتور به سکتور بخونه و اطلاعات ر سکتور که به صورت باینری است رو به پورت میکرو ارسال می کند. حالا چطور عکس ها رو در سکتور ذخیره کنم؟
اگه مموری تازه فرمت شده باشه و هیچ فایلی توش نبوده و پاک هم نشده وقتی فایلی توش ریخته میشه دقیقا توی آدرس رووت بعلاوه سکتور به ازای کلاستر قرار میگیره
اینطوری آدرس اولین سکتور از اولین فایل رو داری(اگه مثلا فایلت 2کیلو بایته 4 سکتور میشه واسه این فایل پس پنجمی ماله دومین فایله والی آخر)
اگه با بیسکام کار میکنی و حوصله خوندن اون فایلی که من گذاشتم در مورد نحوه کار کردن Fat نداری از این متغییر ها توی avr_dos کمک بگیر:
Glrootfirstsector آدرس اولین سکتور از رووت دارکتوریه (اگه توی دارکتوریه دیگه ای فایل قرار داره میشه Gldatafirstsector)
و Gbsectorspercluster تعداد سکتور به ازای کلاستره
اگه میخوای امتحان کن: یه فایل Txt توی مموری فرمت شده بریز توش یکم نوشته باشه
این دو عددو با هم جمع کن سکتور متناظر باهاشو بخون
اگه متنی که توی فایل texT نوشته بوده (سکتور اول) رو توش ندیدی من اسممو عوض میکنم
اون عدد رو بعلاوه 1 کنی میشه ادامه فایل حجم فایل رو هم بگیری بر 512 تقسیم کنی مثلا میشه چهار
یه for بنویس که از سکتور اول تا 4 سکتور بعد رو بخونه سرعت میشه همون چیزی که میخوای(مستقل از fat)
یادت نره: مموری تازه فرمت شده وحتی یک فایل نه پاک شده نه کات شده نه edit و نه تغییر نام
سلام.
منظور شما از این دو عدد رو با هم جمع کند کدام عدد است؟ اگر من یک عکس بیت مپ را در مموری ذخیره کنم ایا می شود ان عکس را از سکتور اول بایت به بایت بخونم و رو پورت میکرو بریزم؟ یه مثال عملی می زنی؟
دیدگاه