اطلاعیه

Collapse
No announcement yet.

چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

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

    چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

    سلام به همه :biggrin:
    دوستان من چه طور می تونم بفهمم که حداکثر سرعتی که می تونم با اون توی یه SDCARD بنویسم چقدره؟؟
    اصل قضیه اینه که من دارم سعی می کنم که فرکانس SAMPLE&HOLD بیشتر از 8 کیلو داشته باشم خب یه طرف قضیه ADC است که چون برای میکرو ATMEGA64 این واحد از نوع SAR است توی دیتا شیت نوشته که باید فرکانس کلاکش در حدود 50 تا 200 کیلو باشه برای مد 10 بیت! و اما یه طرف قضیه نوشتن در SDCARD است که من از کتابخانه های FF.H و SDCARD.H در محیط کد ویژن استفاده می کنم ولی نمی دونم که اولا کلاک SPI چقدره؟(چون من تنظیمش نمی کنم!) و چند سیکل کلاک طول می کشه نوشتن در SDCARD ؟
    پیشاپیش از همفکری تمامی بزرگواران بی نهایت سپاس گزارم
    همیشه بزرگوار تر از آن باشید که برنجید
    و نجیب تر از آن باشید که برنجانید!

    #2
    پاسخ : چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

    با سلام
    http://en.wikipedia.org/wiki/SD/SDIO

    Speed Class Rating
    The Speed Class Rating is the official unit of speed measurement for SD Cards, defined by the SD Association. The Class number represents a multiple of 8 Mbit/s (1 MB/s), the least sustained write speeds for a card in a fragmented state (Class 2, 4, 6) or the minimum non-fragmented sequential write speed (Class 10).[17]
    These are the ratings of all currently available cards:[14][24]
    Class Speed
    Class 2 2 MB/s
    Class 4 4 MB/s
    Class 6 6 MB/s
    Class 10 10 MB/s

    با سپاس
    گشتی در لاله زار
    http://www.eca.ir/forum2/index.php?topic=76138.0

    http://www.eca.ir/forum2/index.php?topic=76141

    دیدگاه


      #3
      پاسخ : چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

      باز هم سلام
      و تشکر ویژه از اقا Solsal
      :biggrin:
      مشکل همچنان باقی است: این سرعت هایی که آقا solsal زحمتشو کشیدند فکر می کنم مربوط به حداکثر سرعتی است این کارت ها می توانند پشتیبانی کنند.
      تا اونجایی که من میدونم و اگه اشتباه نکنم ارتباط این کارت ها با میکرو از طریق پورت GPIO و SPI برقرار می شود که در میکرو ATMEGA64 هم از SPI استفاده می شود. همون لینکی که جناب SOLSAL زحمت کشیدند یه جدول پایین صفحه داره که خلاصش اینه:

      و اما طبق این جدول می بینیم که حداکثر سرعت انتقال داده مجاز از طریق SPI در MICROSD ،پنجاه مگابیت بر ثانیه است.
      خوب دقیقا مشکل من اینه که در کتابخانه FF.H و SDCARD.H از سایت ELM-CHAN که آقای مهری هم یه مقاله مرتبط با اون در نویز 2 نوشتند سرعت کلاک SPI رو پیدا نمی کنم و قضیه وقتی ترسناک می شه که در سایت ELM-CHAN نوشته:

      I examined the read/write performance of some MMC/SDC with a cheap 8 bit MCU (ATmega64 @9.2MHz) on the assumption that an embedded system with limited memory size. For reason of memory size, write() and read() ware performed in 2048 bytes at a time. The result is: Write: 77kB/sec, Read: 328kB/sec on the 128MB SDC, Write: 28kB/sec, Read: 234kB/sec on the 512MB SDC and Write: 182kB/sec, Read: 312kB/sec on the 128MB MMC.

      Therefor the write performance of the 512MB SDC was very poor that one third value of 128MB SDC. Generally the read/write performance of the mass storage device increases proportional to its recording density, however it sometimes appears a tendency of opposite on the memory card. As for the MMC, it seems to be several times faster than SDC, it is not bad performance. After that time, I examined some SDCs supplied from different makers, and I found that PQI's SDC was as fast as Hitachi's MMC but Panasonic's and Toshiba's one was very poor performances.

      و اگه درست متوجه منظور این آقا شده باشم سرعت انتقال داده ها و نوشتن و خواندن از کارت های کمپانی های مختلف هم با هم فرق دارند،درسته؟ oo:
      حالا من دنبال یه راه حل می گردم که بتونم سرعت نوشتن در کارت خودم رو با دستورات این کتابخانه پیدا کنم.

      نظر بزرگان در مورد اینکه در یه زمان مشخص در یک حلقه شروع به نوشتن یه بایت در کارت کنم و همزمان هم به یه متغیر مقداری اضافه کنم و در نهایت مشخص بشه که من در یه زمان مشخص چند بار تونستم در کارت بنویسیم؟ معقوله؟؟ :eek: در این صورت سایر دستورات CODEVISION مثل حلقه و اضافه کردن به یه متغیر چند کلاک میکرو طول میکشه و چقدر می تونه در دقت نهایی تاثیر داشته باشه؟
      بزرگان سپاس سپاس سپاس :biggrin:
      همیشه بزرگوار تر از آن باشید که برنجید
      و نجیب تر از آن باشید که برنجانید!

      دیدگاه


        #4
        پاسخ : چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

        یک روش بررسی الگوریتم ها (تو درس طراحی الگوریتم های کامپیوتری ها) اینه که شما گفتین یعنی یه کاری رو به تکرار زیاد انجام بدین و سپس میانگین اونرو در نظر بگیرین. (بعلاوه من شنیدم تجربه نکردم! که نوشتن در کارتها با سرعتهای مختلف انجام میشه یعنی یکبار ممکنه X ثانیه طول بکشه دفعه بعد Y ثانیه)
        یه روش هم اینه که خودت اسکوپ بذاری رو پایه کلاک پورت SPI کارت و سرعتشو اندازه بگیری

        دیدگاه


          #5
          پاسخ : چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

          ممنون آقا mojalan
          وای اگه زمان هر دفعه فرق کنه افتضاحه!!! :angry: زمان نوشتن در کارت برام مهمه و خیلی مهم.
          فکر کنم تشخیص کلاک spi هم کمکم نکنه مگر اینکه بدونم نوشتن در کارت چند تا سیکل کلاک طول می کشه که اینم نمی دونم!!
          همیشه بزرگوار تر از آن باشید که برنجید
          و نجیب تر از آن باشید که برنجانید!

          دیدگاه


            #6
            پاسخ : چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

            چند تا مسئله:

            - اول اینکه ارتباط با این تیپ حافظه ها از طریق SPI انجام میشه و از اونجایی که فقط سری ATXMega دارای DMA هست بنابراین دونستن سرعت ارتباط به تنهایی دردی رو دوا نمیکنه چون ممکنه این سرعت در حالتی باشه که میکرو کاملا درگیر سرویس دهی به SPI و MMC میشه و نمیتونه به چیز دیگه ای سرویس بده یا بهتر بگیم سرویس دادن به عمل دیگری (مثل خوندن از ADC با استفاده از وقفه) شدیدا روی این سرعت تاثیر میذاره.

            - دوم اینکه چون واحد دسترسی به MMC حداقل یک سکتور هست مسلما اگر میزان دسترسی (خوندن یا نوشتن) مضربی از حجم یک سکتور (512 بایت) باشه سرعت بسیار بالاتری عایدتون میشه تا حالتی که مجبورین اول یک سکتور رو بخونین یک بایتش رو تغییر بدین و سپس دوباره بنویسینش. فکر نکنین این کار این تیپی انجام نمیشه چون امکان نوشتن یک بایت منفرد روی MMC (تا جایی که میدونم) وجود خارجی نداره.

            - سوم اینکه سرعت نوشتن بطور ذاتی در اغلب مدیا ها حدود 30 درصد کند تر از سرعت خوندن هست.

            - چهارم اینکه ماکزیمم سرعت خوندن و نوشتن به حجم حافظه نهان تخصیص داده شده و کد مورد استفاده خیلی بستگی داره. تازه شما از FAT استفاده میکنین و این یعنی هنگامی که از یک خوشه به خوشه بعدی میرین میکرو باید کلی جستجو در FAT انجام بده تا خوشه آزاد بعدی رو پیدا کنه. شاید ابتدای هر دوره نمونه برداری کلیه فایلها رو پاک کنین یا یک فایل defragmented شده به میزان ماکزیمم ایجاد کنین و توسط روالهای دسترسی سطح پایین سکتوری بنویسین و بخونین بمراتب سریعتر باشه.

            دیدگاه


              #7
              پاسخ : چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

              باز هم سلام
              سپاس فراوان از آقای آقازاده به خاطر توصیه ها و نکات مفیدشون و سایر دوستان :mrgreen:
              من توی یه حلقه while یه برنامه نوشتم که قبل از نوشتن در کارت یه تایمر رو فعال کنه و پس از نوشتن تایمر رو غیر فعال کنه که اینجوری مدت زمانی که نوشتن در کارت طول می کشه رو پیدا کنم!
              نوشته اصلی توسط mojalan
              (بعلاوه من شنیدم تجربه نکردم! که نوشتن در کارتها با سرعتهای مختلف انجام میشه یعنی یکبار ممکنه X ثانیه طول بکشه دفعه بعد Y ثانیه)
              باید بگم که شنفته های آقا mojalan درسته و این زمان ثابت نیست، بیشترین زمان نوشتن مربوط به اولین باری است که در کارت نوشته می شه و زمانی در حدود 238*8 میکرو ثانیه بود در دفعات بعدی زمان نوشتن از 256 تا 496 میکرو تغییر می کرد و بیشتر حول 390 میکرو ثانیه بود، تازه این مال وقتی است که میکرو هیچ کار دیگه ای غیر از نوشتن در کارت انجام نمیده!! oo:
              با احتساب زمان نمونه برداری و نوشتن در کارت و کلی خوشبینی :mrgreen: شاید حداکثر با این میکرو بتونم تا 2 کیلو سرعت sample&hold رو بدست بیارم!!!!
              برای میکرو های سری atmega فکر کنم هیچ راهی برای افزایش این فرکانس نداشته باشم. نظر شما بزرگان چیست؟
              این فرکانس 8 کیلویی که من در نظر گرفتم فعلا حداقل فرکانس است و بعدا باید بتونم این فرکانس رو تا 50 کیلو هم برسونم!!!
              نوشته اصلی توسط reza_agha
              چند تا مسئله:

              - اول اینکه ارتباط با این تیپ حافظه ها از طریق SPI انجام میشه و از اونجایی که فقط سری ATXMega دارای DMA هست بنابراین دونستن سرعت ارتباط به تنهایی دردی رو دوا نمیکنه چون ممکنه این سرعت در حالتی باشه که میکرو کاملا درگیر سرویس دهی به SPI و MMC میشه و نمیتونه به چیز دیگه ای سرویس بده یا بهتر بگیم سرویس دادن به عمل دیگری (مثل خوندن از ADC با استفاده از وقفه) شدیدا روی این سرعت تاثیر میذاره.
              آقای آقا زاده شما در توضیحاتتون اشاره ای به DMA کردید من در مورد DMA شاید به اندازه چند خط بدونم، سوالم از شما اینه که این واحد چقدر می تونه در افزایش سرعت در این مورد موثر باشه؟ به نظر شما کار با میکرو هایی مثل آرم میتونه جوابگوی نیاز باشه؟ یا باید فکر دیگه ای کنم مثلا dsp ها و .....

              البته اطلاعات من در مورد آرم کمه و ازdsp ها هم چیزی نمی دونم به همین خاطر از دوستانی که در این باره اطلاعی دارن می خوام که در این مورد منو راهنمائی کنند.تا بتونم پردازشگر مناسب را پیدا کنم و یاد گرفتنش رو شروع کنم....
              با سپاس
              همیشه بزرگوار تر از آن باشید که برنجید
              و نجیب تر از آن باشید که برنجانید!

              دیدگاه


                #8
                پاسخ : چه طور می تونم حداکثر سرعتی که می توان در یه SD کارت نوشت رو پیدا کنم؟؟؟

                سلام.
                به همه عرایض من توجه نکردین.

                شما برای رسیدن به حداکثر سرعت میتونین از این روش استفاده کنین:

                1- خودتون یک روال برای ارسال اطلاعات بطور سکتور به سکتور بنویسین. برای رسیدن به حداکثر سرعت ذخیره داده ها.

                2- از تکنیک هایی مثل double buffering به همراه وقفه برای افزایش سرعت نمونه برداری استفاده کنین. فرض کنین دو بافر 512 بایتی داریم. یعنی بافر برای 256 نمونه (هر نمونه در دو بایت ذخیره میشه چون بیش از 8 بیت و حداکثر 16 بیت هست) ابتدای کار نمونه ها در بافر شماره یک نوشته میشه. بعد از پرشدن بافر 1 بافر 2 پر میشه و 1 به MMC ازسال میشه. بعد از پر شدن 2 بافر 1 استفاده میشه (که در طی زمان پر شده بایستی به MMC ارسال شده باشه و به همین ترتیب جای این دو بافر تعویض میشه. در این صورت زمانهای مورد نیاز برای نمونه برداری با زمان مورد نیاز برای write مشترک میشه.

                3- راجع به DMA؛ اینو در نظر داشته باشین که عمده زمان شما در انتقال اطلاعات به mmc هست. و در این مورد میکرو بایستی بایت به بایت اطلاعات رو از حافظه برداره و از طریق spi به mmc تحویل بده. و این زمان پاسخ میکرو رو بالا میبره. dma میتونه این نقل و انتقال رو بدون دخالت میکرو انجام بده.

                البته مسلما استفاده از یک کلاک بالاتر و یا تکنیک هایی مثل double buffering میتونه زمانهای تلف شده رو مینیمم و مهمتر از همه مدیریت کنه.

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

                و این نکته رو یادتون نره که دسترسی به file system جزء زمانگیر ترین کارها هست. شاید استفاده از رم بالاتر برای حافظه cache مقداری این سرعت رو بالا ببره ولی این بیشتر تکنیک های مورد استفاده هست که مشکلتون رو ممکنه حل کنه.

                و مهمتر از همه واحد دسترسی به mmc یک سکتور هست و نه یک بایت. هر تیپ دسترسی به یک فایل که باعث بشه شما از واحد های غیر قابل تقسیم به 512 (سایز عمومی سکتورها) استفاده کنین به خاطر overhead بالا باعث کندی زیاد سیستم نهایی تون میشه.

                دیدگاه

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