راه اندازی آیسی های حافظه فلش سری W25Qxx با avr
در این تحقیق و توسعه قصد داریم، شما را با حافظه های حجیم و بسیار سریع آشنا کنیم و کد راه اندازی حرفه ای اونها رو بهتون ارائه بدیم!

همانطور که می دانید در بسیاری از پروژه ها نیاز به حافظه جانبی است اما در بعضی از پروژه ها ما نیاز به حافظه ای پر سرعت داریم که مقدار حافظه آن نه خیلی زیاد مثل SDCARD و نه خیلی کم مثل آیسیهای EEPROM باشد. اینجاست که می توان به کمک حافظه های فلش در ظرفیت های چند مگابایت ، این خلاء را جبران کرد و پروژه ها را با هزینه کمتری انجام داد.
حافظه های FLASH از نسل EEPROM ها هستن اما با این تفاوت که در حافظه های EEPROM ما کنترل حافظه ها به صورت بایت بایت را داریم، در صورتی که در حافظه های FLASH ما فقط می توانیم مجموعه ای از حافظه را مدیریت کنیم که در ادامه با اشاره به خانواده تراشه 25Qxx به عنوان نمونه بیشتر توضیح خواهم داد.

مشخصات آیسیهای فلش 25Qxx
_ ولتاژ تغذیه بین 2.7 تا 3.6 ولت DC
_ جریان مصرفی کمتر از 4 میلی آمپر
_ محدوده دمایی بین 40- تا 85+ سانتی گراد
_ قابلیت نوشتن و خواندن بیش از 100000 بار
_ بیش از 20 سال زمان نگهداری اطلاعات
_ سرعت انتقال داده بیش از 75MB/s در مدل های مختلف
۱ – معرفی پایه های آیسی حافظه فلش 25Qxx
VCC : پایه تغذیه آیسیکه ولتاژ آن بین 2.7 تا 3.6 ولت DC است
GND : پایه زمین یا صفر آیسی
CS : پایه انتخاب آیسی( اگر این پایه یک باشد ایسی غیر فعال و اگر صفر باشد آیسیفعال می شود )
WP : پایه نوشتن محافظت ورودی ( اگر این پایه صفر باشد ما فقط قابلیت خواندن از آیسی را داریم و در صورتی که این پایه یک باشد ما قابلیت خواندن و نوشتن از داخل آیسی را داریم )
RESET : پایه ریست آیسی که با صفر فعال می شود
CLK , Do ,DI : پایه های ارتباط SPI جهت کنترل آیسی
2 – ترکیب خانه های حافظه در آیسیهای فلش
خانه های حافظه در آیسیهای فلش به سه صورت می باشند : بلوک ، سکتور و صفحه
همان طور که در تصویر بالا مشاهده می کنید کل حافظه به بلوک های 64KB تقسیم می شود و هر بلوک به 16 سکتور 4KB سپس هر سکتور به 16 صفحه 256B تقسیم می شود .
به عنوان مثال تصویر بالا خانه های حافظه آیسی 25Q128 را نمایش می دهد که تقسیم بندی خانه های حافظه به صورت زیر است :
آیسی 25Q128 دارای ظرفیت 128 مگابیت که برابر است با 16 مگا بایت ( 128Mb/8=16MB )
_ تعداد بلوک ها : مقدار کل حافظه آیسی تقسیم بر مقدار 64 کیلوبایت : 256 بلوک
_ تعداد سکتورها : مقدار حافظه هر بلوک تقسیم بر 4 کیلوبایت که می شود 16 سکتور به ازای هر بلوک حال مجموع کل سکتورها برابر است با 4096=16*256
_ تعداد صفحه ها : مقدار حافظه هر سکتور تقسیم بر 256 بایت که می شود 16 صفحه به ازای هر سکتور حال مجموع کل صفحه ها برابر است با 65536=16*4096
3 – نحوه خواندن و نوشتن اطلاعات در آیسی فلش
در حافظه فلش به دلیل استفاده از مدارات کمتر، دیگر دسترسی مستقیم به تک تک بایت ها وجود ندارد و باید به صورت مجموعه(صفحه به صفحه) آنها را کنترل کرد .
برای مثال اگر ما بخواهیم بایت دهم از حافظه را بخوانیم چون این بایت در صفحه صفر است ما باید کل این صفحه را که 256 بایت است را بخوانیم و سپس درون یک متغیر 256 بایتی بریزیم بعد از بایت دهم استفاده کنیم .
برای نوشتن اطلاعات نیز ما نمی توانیم به صورت بایت بایت اطلاعات را از روی آیسی فلش بخوانیم و خواندن دیتا باید بصورت صفحه ای ( 256 بایتی ) صورت بگیرد .
نکته مهم : ما نمی توانیم دوبار روی یک صفحه اطلاعات بنویسم باید ابتدا اطلاعات صفحه را پاک کنیم و مجددا روی آن صفحه عملیات نوشتن را انجام دهیم .
4 – نحوه پاک کردن اطلاعات در آیسی فلش
برای پاک کردن اطلاعات ما از چهار روش زیر می توانیم استفاده کنیم :
_ پاک کردن اطلاعات به صورت سکتور ( 4 کیلوبایتی )
_ پاک کردن اطلاعات به صورت بلوک ( 32 کیلوبایتی )
_ پاک کردن اطلاعات به صورت بلوک ( 64 کیلوبایتی )
_ پاک کردن اطلاعات به صورت کلی
نکته مهم : در آیسی فلش ما قادر نیستیم تا اطلاعات را بصورت بایت به بایت پاک کنیم .
5 – نحوه اتصال حافظه فلش به میکروکنترلر
نکته : پایه های RESET و WP را در صورتی که نیازی به کنترل نداشته باشید می توانید به مثبت VCC متصل کنید .
6 – برنامه نویسی
تیم فنی پژوهشگران الکترونیک و رباتیک برنامه ای در کامپایلر کدویژن آماده کرده است که شما به راحتی می توانید با آیسی فلش ارتباط برقرار کنید.
پروتوتایپ توابع آماده شده توسط تیم پژوهشگران به صورت زیر است:
unsigned int W25Q_Read_Manufact_Device_ID(void); void W25Q_Disable_Write(void); void W25Q_Enable_Write(void); unsigned char W25Q_Read_StatusReg(unsigned char RG); void W25Q_WaitBusy(void); void W25Q_WritePage(unsigned long int NumPage); void W25Q_ReadPage(unsigned long int NumPage); void W25Q_EraseSector4KB(unsigned long int address); void W25Q_EraseBlock32KB(unsigned long int address); void W25Q_EraseBlock64KB(unsigned long int address); void W25Q_EraseChip(void);
_ عملکرد تابع (unsigned int W25Q_Read_Manufact_Device_ID(void :
این تابع شماره کارخانه و دستگاه را به ما می دهد.
ID=W25Q_Read_Manufact_Device_ID(); ManuFacturerID=)ID&0xFF); DeviceID=(ID>>8)&0xFF);
برای مثال مقدار شماره کارخانه برابر 0xEF و شماره دستگاه برای آیسی 25Q128 برابر 0x17 می باشد .
_ عملکرد تابع (void W25Q_Disable_Write(void : غیرفعال کردن عملیات نوشتن
_ عملکرد تابع (void W25Q_Enable_Write(void : فعال کردن عملیات نوشتن
_ عملکرد تابع (unsigned char W25Q_Read_StatusReg(unsigned char RG :
یکی از مهمترین رجیسترهای آیسی فلش، رجیستر وضعیت است که به کمک آن می توانید وضعیت، رایت کردن، مشغولی، وضعیت های امنیتی آیسی و … را ببینید .
_ عملکرد تابع (void W25Q_WaitBusy(void : چک کردن وضعیت مشغول بودن آیسی فلش
_ عملکرد تابع (void W25Q_WritePage(unsigned long int NumPage : تابع نوشتن اطلاعات به صورت 256 بایتی روی حافظه فلش
_ عملکرد تابع (void W25Q_ReadPage(unsigned long int NumPage : تابع خواندن اطلاعات به صورت 256 بایتی از روی حافظه فلش
_ عملکرد تابع (void W25Q_EraseSector4KB(unsigned long int address : پاک کردن اطلاعات آیسی به صورت سکتوری
_ عملکرد تابع (void W25Q_EraseBlock32KB(unsigned long int address : پاک کردن اطلاعات آیسی به صورت بلوک های 32 کیلو بایتی
_ عملکرد تابع (void W25Q_EraseBlock64KB(unsigned long int address : پاک کردن اطلاعات آیسی به صورت بلوک های 64 کیلو بایتی
_ عملکرد تابع (void W25Q_EraseChip(void : پاک کردن تمام اطلاعات آیسی
در انتها برنامه نمونه ای که توسط تیم فنی ما آماده شده را در زیر مشاهده می کنید که با فرمان دادن از طریق پورت سریال شما می توانید تمام توابع را اجرا کنید به عنوان مثال با ارسال کد i\r* مقدار شماره دستگاه و کارخانه برگردانده می شود.
ID=W25Q_Read_Manufact_Device_ID(); printf("ManuFacturer ID : "); putchar(ID&0xFF); printf(" & ID Device ID : "); putchar((ID>>8)&0xFF); putchar('\r');
_ با ارسال کد s\r* مقدار رجیستر وضعیت برگردانده می شود .
_ با ارسال کد e\r* سکتور 4 کیلو بایتی اول پاک می شود .
_ با ارسال کد w\r* اطلاعات در صفحه اول نوشته می شود .
_ با ارسال کد r\r* اطلاعات صفحه اول خوانده می شود .
فایل های مورد نیاز راه اندازی آیسیهای فلش سری W25Qxx :
تمامی محصولات نرم افزاری سایت شامل خدمات پشتیبانی میباشند و در صورتی که آپدیت ارائه شود، به صورت رایگان برای خریداران قبلی نیز ارسال میشود. در صورت وجود هرگونه مشکل در سورس میتوانید از بخش “نظرات” و یا “تماس با ما” با ما در ارتباط باشید.
سوالی داشتید، در قسمت نظرات بپرسید، کارشناسان فنی پژوهشگران در اسرع وقت پاسخگو خواهد بود.
سلام
آیا میتوان این حافظه رو مثل فلش مموری با کامپزوتر فرمت کرد و فت روی آن نصب کرد ؟؟
خیر، این نوع حافظه با آن چیزی که شما فکر می کنید متفاوت است.
سلام وقت بخیر من به عنوان یک پروژه باید یک فلش مموری usb بسازم و روی ای سی اون یه برنامه بریزم ( هر چی میتونه باشه) که با فرمت شدن فلش هم پاک نشه کسی میتونه کمکم کنه
درود . میخواستم بدونم پروگرمر mk2 قابلیت پروگرم ای سی های فلش رو داره ؟ البته بیرون از برد و به تنهایی سپاس
سلام. خیر عزیز. MKII فقط مربوط به AVR هست
سلام، ممنون از مطالب مفیدتون. من برنامه رو خریداری کردم اما چون در این زمینه کار نکردم میخواستم بپرسم در برنامه، در قسمت نوشتن داده روی حافظه دقیقا دارید چه داده ای رو ارسال میکنید؟؟
عرض سلام و خسته نباشید
همسر من تو کار عروسک سازی هست و میخواهیم عروسک ها رو صدا دار کنیم. مثلا بتونه گریه کنه یا اگر بشه متن مختصری رو ضبط کنیم تا اونو بخونه
میخواستم راهنمایی کنید چطور میشه اینکار رو کرد
یکم وبگردی کردم فهمیدم که با استفاده از کیت صدا میشه همچین کاری کرد اما حقیقتش چون دانشی نسبت به این کارهای فنی نداریم متوجه نشدم
ممنون بابت راهنماییتون
تشکر
سلام و درود.
بله یقینا این کار شدنی هست، از اونجایی که جزییات زیادی داره پیشنهاد می کنم حتما به یک مهندس الکترونیک خبره مراجعه کنید و سفارش طراحی بهش بدید.
با سلام ، آیا امکان پاک کردن شماره سریال 12 رقمی آیسی فلش w25q64
وجود داردکه بتوان دوباره با استفاده از لودر شماره سریال جدید را به آیسی منتقل کنیم؟
سپاس
سلام
من میخوام با پروگرامر اتمگا ای سی فلش گیرنده و مدم را پروگرا کنم سری ۲۵ ممکنه؟
بله بعضی پروگرامر های مثلا سری USBasp بعضی سریهای E2prom رو پروگرام می کنه ولی برای حافظه فلش من تا حالا ندیدم. باید جستجو کنید.
پروگرامرهای حرفه ای هم که کم نیستند، مخصوص برنامه ریزی تراشه های فلش مثل پروگرامر TNM
باسلام.من تعمیرکاردستگاه دیجیتال و رسیور هستم.من تازه واردقسمت نرم افزارشدم.برای پروگرم کردن آی سی فلش های سری25q32 بیشتر.یه پروگرمر قیمت پایین گرفتم.ch341.ولی متاسفانه این پروگرمر شناسایی خودکارآی سی نداره.پروگرامرهای Tnmهم خیلی گرونه.میخواستم اگه ممکنه طریقه خواندن آی سی های سری25Q32یا16روبگید..مثلا روی آی سی نوشته… 25Q32Lc..البته چندتاحرف دیگم داره.میخام بدونم اون حرفهای بعد از 32چه معنی داره.وآیا وقتی میخوام توی نرم افزار پروگرمر شماره آی سی رو وارد کنم حتما اون حرف های بعدشم مهمه یا فقط همون 25Q32کافیه?خواهش میکنم راهنماییم کنید.
نه عزیز دانستن همان سری 25 و ظرفیت 16 یا 32 یا … کفایت می کند، حروف بعد از آن در هر تراشه ای متفاوت است و مربوط به ساخت آن دستگاه است.
با عرض سلام وقت بخیر
یه سوال داشتم خدمتتون
من از این آی سی استفاده می کنم و برای پروگرام کردن اون از پروگرامر TNM استفاده می کنم.
اما مشکلی که دارم اینجاست که وقتی می خوام به صورت ISP پروگرام کنم قطعه رو نمی شناسه
می تونین منو راهنمایی کنین؟
باید به راهنمای دستگاه TNM مراجعه کنید
با درود
شما تو توضیحات بجای سکتور از کلمه سلکتور استفاده کردید،موفق باشید
ممنون از بازخورد مثبت تون. اصلاح میشه
سلام دوست عزیز
بعد از خرید اطلاعات پروژه، فایل دانلود 25Q128 برای شما نمایش داده می شود.
سلام فایل 25q128jvsq لطفا
سلام آفرین تک وب سایتی هستید که تونستید مشکل منو حل کنید درود
باعث افتخار است.
سلام و درود بر شما
شما می تونید از پرواگرامر های سری TNM یا از پروگرامر Sofi استفاده نمایید.
درود برتیم خوب ودوست داشتنی
بنده تازه با این ای سی فلش سری 25Lوسری25Qآشناشدم وبدنبال مطالب آموزشی هستم;بهترین توضیح را دراین سایت دیدم.
یک راهنمایی بفرمایید. برای پروگرام کردن این مدل ایسی چه پروگرامی پیشنهادمیکنید؟یابسازم واگر قیمت مناسب باشهخریداری کنم.
محمدی هستم اراک تعمیرات بُرد انجام میدم
شماره همراه بنده 0918xxx19