C Library لتحويل فلاش SPI المادي إلى عدد تعسفي من المخازن المؤقتة الدائرية المنطقية. يتم تحقيق الواجهة بين SFCB و SPI Core كذاكرة مشتركة.
-D في وقت الترجمة| إصدار | تاريخ | مصدر | تغيير السجل |
|---|---|---|---|
| أحدث | أحدث |
git clone --recursive https://github.com/andkae/SPI-Flash-Circular-Buffer.gitيقوم Makefile ببناء المستودع مع اختبار الوحدة:
$ make
gcc -c -O -Wall -Wextra -Wconversion -I . -I ../ -DW25Q16JV ./test/sfcb_test.c -o ./test/sfcb_test.o
gcc -c -O -Wall -Wextra -Wconversion -I . -I ../ -DW25Q16JV -DSFCB_PRINTF_EN ./spi_flash_cb.c -o ./test/sfcb.o
gcc -c -O -Wall -Wextra -Wconversion -I . -I ../ -DW25Q16JV ./test/spi_flash_model/spi_flash_model.c -o ./test/spi_flash_model.o
gcc ./test/sfcb_test.o ./test/sfcb.o ./test/spi_flash_model.o -Wall -Wextra -I. -lm -o ./test/sfcb_testيمكن بناء جزء المكتبة نفسه مع:
gcc -c -O -Wall -Wextra -Wconversion -I . -DW25Q16JV -Werror ./spi_flash_cb.c -o ./test/sfcb.o تم تحديد ذاكرة الفلاش W25Q16JV عبر مفتاح التجميع -D .
لتشغيل مكالمة اختبار الوحدة:
$ ./test/sfcb_testتهيئة مقبض SFCB المشترك ويعين الذاكرة.
int sfcb_init ( t_sfcb * self , void * cb , uint8_t cbLen , void * spi , uint16_t spiLen );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| CB | ذاكرة قائمة انتظار المخزن المؤقت الدائرية |
| cblen | الأعلى. عدد قوائم انتظار CB |
| spi | SFCB / SPI Core Exchange العازلة |
| سبلين | حجم العازلة SPI في البايتات |
رموز الخروج
ينشئ قائمة انتظار عازلة دائرية مستقلة منطقية جديدة في فلاش SPI.
int sfcb_new_cb ( t_sfcb * self , uint32_t magicNum , uint16_t elemSizeByte , uint16_t numElems , uint8_t * cbID );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| Magicnum | الرقم السحري ، يجب أن يكون فريدًا لكل قائمة انتظار على نفس فلاش SPI |
| elemsizeByte | حجم الحمولة في البايت ، أسباب الرأس/التذييل |
| numelems | الحد الأدنى من العناصر المطلوبة في قائمة الانتظار ، مستدير إلى القطاع الكامل التالي |
| cbid | المعرف المعين لهذه قائمة الانتظار ، اللازمة لجميع الطلبات الإضافية |
رموز الخروج
يتحقق مما إذا كان SFCB يعالج طلبًا آخر.
int sfcb_busy ( t_sfcb * self );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
رموز الخروج
في آخر طلب انتهى بالخطأ.
int sfcb_isero ( t_sfcb * self );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
رموز الخروج
يكتسب جميع معلومات قائمة الانتظار من SPI Flash. مطلوب بعد استدعاء SFCB_ADD لتحديث جميع معلومات الإدارة.
int sfcb_mkcb ( t_sfcb * self );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
رموز الخروج
قم بإلحاق بايت إلى عنصر قائمة انتظار المخزن المؤقت الدائري الحالي.
int sfcb_add ( t_sfcb * self , uint8_t cbID , void * data , uint16_t len );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| cbid | قائمة انتظار المخزن المؤقت الدائرية للتفاعل |
| *بيانات | مؤشر لكتابة البيانات |
| لين | عدد البايتات في *البيانات |
رموز الخروج
إجبار على كتابة تذييل إن لم يكن كل البايتات المتاحة في عنصر قائمة انتظار المخزن المؤقت الدائرية ، بواسطة إضافة. يتم استخدام تذييل الكشف عن كتابة كاملة لعنصر. تتمثل التوصية العامة في الاتصال بـ sfcb_add_done في كل مرة عند إكمال كتابة عنصر قائمة الانتظار.
int sfcb_add_done ( t_sfcb * self , uint8_t cbID );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| cbid | قائمة انتظار المخزن المؤقت الدائرية للتفاعل |
رموز الخروج
الحصول على العدد الحالي من البايتات المكتوبة إلى عنصر قوائم الانتظار. يتيح كتابة كائن البيانات متعددة المراحل إلى عنصر مخزن مؤقت دائري.
uint16_t sfcb_get_pl_wrcnt ( t_sfcb * self , uint8_t cbID );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| cbid | قائمة انتظار المخزن المؤقت الدائرية للتفاعل |
اكتب عدد البايت لعنصر قائمة الانتظار.
اقرأ آخر عنصر قائمة الانتظار المكتوب مرة أخرى.
int sfcb_get_last ( t_sfcb * self , uint8_t cbID , void * data , uint16_t len , uint32_t * elemID );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| cbid | قائمة انتظار المخزن المؤقت الدائرية للتفاعل |
| *بيانات | مؤشر لقراءة البيانات |
| لين | عدد البايتات في *البيانات |
| *Elemid | رقم عنصر قائمة الانتظار |
رموز الخروج
قراءة البيانات الخام من فلاش.
int sfcb_flash_read ( t_sfcb * self , uint32_t adr , void * data , uint16_t len );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| ADR | عنوان ذاكرة فلاش SPI |
| *بيانات | مؤشر لقراءة البيانات |
| لين | عدد البايتات في *البيانات |
رموز الخروج
خدمات الطبقة العازلة للخدمات وكذلك معالجة حزمة SPI. يجب أن تسمى هذه الوظيفة في المسألة القائمة على الوقت. يجب أن يستخدم نقل حزمة بيانات SPI تدفق بيانات يعتمد على ISR.
void sfcb_worker ( t_sfcb * self );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
لا أحد.
بواسطة SFCB_Worker إنشاء حجم حزمة SPI في البايتات.
uint16_t sfcb_spi_len ( t_sfcb * self );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
عدد البايت من حزمة SPI.
الحصول على SFCB تجميع نوع الفلاش الحجم الإجمالي.
uint32_t sfcb_flash_size ( void );الحجم في البايتات.
احصل على أكبر عدد من العناصر من قائمة انتظار المخزن المؤقت الدائرية.
uint32_t sfcb_idmax ( t_sfcb * self , uint8_t cbID );| arg | وصف |
|---|---|
| الذات | عنصر تخزين SFCB |
| cbid | قائمة انتظار المخزن المؤقت الدائرية للتفاعل |
أعلى رقم عنصر.
| قيمة | وصف |
|---|---|
| SFCB_OK | مقبول |
| SFCB_E_NO_FLASH | لم يتم تحديد نوع فلاش ، استخدم -D |
| SFCB_E_MEM | لا يكفي الذاكرة المخصصة في sfcb_init |
| sfcb_e_flash_full | سعة الفلاش تجاوزت |
| SFCB_E_WKR_BSY | sfcb_worker مشغول ، انتظر |
| SFCB_E_NO_CB_Q | cbID انتظار المخزن المؤقت الدائرية غير موجود |
| SFCB_E_WKR_REQ | بيانات إدارة المخزن المؤقت الدائرية غير مستعدة للطلب ، قم بتشغيل sfcb_mkcb |
| SFCB_E_CB_Q_MTY | لا توجد إدخالات صالحة في قائمة الانتظار |
يدعم SFCB عددًا تعسفيًا من قوائم قوائم العازلة الدائرية. يبدأ كل مخزن مؤقت دائري في أدنى عنوان فلاش SPI المجاني. تتطلب بنية الفلاش بيانات مخصصة واضحة - تسمى محو القطاع . من خلال هذا القيد ، يجب أن يكون قطاعان على الأقل مخصصين. وإلا فإن الكتابة فوق العنصر المكتوب الأول يؤدي إلى الكتابة فوق قائمة انتظار عازلة دائرية كاملة دون الاحتفاظ بأي إدخالات سابقة. يتم وضع علامة على كل إدخال جديد مع أعلى 32 بت Idnum و MagicNum . يضمن MagicNum اكتشاف عنصر قائمة انتظار المخزن المؤقت الدائري المشغل.
تُظهر منظمة ذاكرة مثالية لـ 240 بايت حمولة و 32 عنصرًا (= قطاعان) الشكل أدناه: