ถามเกี่ยวกับflash memory ของ stm32f4

Started by yokky7935, March 24, 2015, 09:05:32 PM

Previous topic - Next topic

yokky7935

อยากสอบถามว่าเราสามารถ read ค่าในflash memory ได้หรือไม่คะ ไม่เห็นฟังก์ชันในการ read เลย
ใช้ coocox ในการเขียนโปรแกรมค่ะ

khenk

ผมเคยใช้แบบนี้ครับ โดยการอ้าง Address ตรงๆเลยครับ

const u8 ADDRESS [] = {"www.electoday.com"};
unsigned char BuffUID[17] ;
unsigned char i;
for (i=0;i<17;i++){
    BuffUID = *((unsigned char*) ADDRESS + i);
}

yokky7935

ออ ขอบคุณค่ะ
แล้วพอมีตัวอย่างโคดในการเขียน อ่านflash memoryบ้างไหมอะคะ
ไม่ทราบว่ามันต้องกำหมดอะไรบ้าง


zerochero

อ่านข้อมูลจาก Flash memory ระบุ Address ได้เลยครับ แต่ถ้าเขียนจะยากนิดหน่อยครับ

ตัวอย่างการอ่านนะครับ
verifyData = *(__IO uint32_t*)DataAddress;

ตัวอย่างการเขียนนะครับ ใช้ Library ของ ST นะครับ
/* Flash unlock */
FLASH_If_FlashUnlock();
uint33_t newData = 0, data = 0x12345678;
newData = Data;
newData |= Data << 8;
newData |= Data << 16;
newData |= Data << 24;

//write and verify new firmware
FLASH_If_ProgramWord(newDataAddress, newData);

/* Flash lock */
FLASH_If_FlashLock();

ch25

ผมกำลังทำตรงนี้อยู่พอดี ติดปัญหา จากตัวอย่าง FLASH_Program ของ STM32F3 Discovery 
พบว่าถ้ากำหนดเป็นค่าคงที่ ตามตัวออย่าง จะโปรแกรมค่าลงไปได้
#define DATA_32                 ((uint32_t)0x12345678)
FLASH_ProgramWord(Address, DATA_32);

แต่กำหนดเป็นค่า ตัวแปรแทน  uint32_t   DATA_32  มันไม่ยอม โปรแกรมมันไปค้างใน
FLASH_ProgramWord(Address, DATA_32)   
ผมจะเอาไว้เก็บค่า ID ของ บอร์ดโดยส่งเข้าไปทาง Serial port นะครับไม่อยากเพิ่ม EEprom ข้างนอก

รบกวนแนะนำด้วยครับ

ch25

มีคำถาม
- Flash ณ.ตำแหน่งที่จะเขียนทับลงไปมัน Erase ก่อนหรือเปล่าครับถึงจะเขียนได้ ซึ่งการ Erase ต้องลบทั้ง Page ด้วยใช่ไหม
   ผมลอง Write โดยไม่ได้ Erase ก่อนมันค้างไปเลย
- แต่ละตำแหน่งเก็บค่า ได้ 8 bit ใช่ไหม

zerochero

Quote from: ch25 on April 09, 2015, 04:03:20 PM
มีคำถาม
- Flash ณ.ตำแหน่งที่จะเขียนทับลงไปมัน Erase ก่อนหรือเปล่าครับถึงจะเขียนได้ ซึ่งการ Erase ต้องลบทั้ง Page ด้วยใช่ไหม
   ผมลอง Write โดยไม่ได้ Erase ก่อนมันค้างไปเลย
- แต่ละตำแหน่งเก็บค่า ได้ 8 bit ใช่ไหม
1. ในการเขียน Flash จำเป็นต้องลบก่อนเขียนทุกครั้งครับ (ผมหมายถึงถ้าเขียนทับ Address ที่มีข้อมูลอยู่แล้วนะครับ) ไม่สามารถเขียนทับได้ (ถ้าเขียนทับข้อมูลจะเสียหาย) ส่วนการลบ Flash ต้องลบทั้ง Sector อันนี้ลองศึกษาดูจาก Application note นะครับ
2. แต่ละ Address เก็บค่าได้ 8 bits ถูกต้องครับ