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

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

*

Offline khenk

  • **
  • 67
    • View Profile
Re: ถามเกี่ยวกับflash memory ของ stm32f4
« Reply #1 on: March 25, 2015, 10:24:20 am »
ผมเคยใช้แบบนี้ครับ โดยการอ้าง 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);
}

Re: ถามเกี่ยวกับflash memory ของ stm32f4
« Reply #2 on: March 25, 2015, 09:56:18 pm »
ออ ขอบคุณค่ะ
แล้วพอมีตัวอย่างโคดในการเขียน อ่านflash memoryบ้างไหมอะคะ
ไม่ทราบว่ามันต้องกำหมดอะไรบ้าง

Re: ถามเกี่ยวกับflash memory ของ stm32f4
« Reply #3 on: April 07, 2015, 11:08:43 pm »
อ่านข้อมูลจาก 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();

*

Offline ch25

  • ***
  • 157
    • View Profile
Re: ถามเกี่ยวกับflash memory ของ stm32f4
« Reply #4 on: April 09, 2015, 08:32:48 am »
ผมกำลังทำตรงนี้อยู่พอดี ติดปัญหา จากตัวอย่าง 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 ข้างนอก

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

*

Offline ch25

  • ***
  • 157
    • View Profile
Re: ถามเกี่ยวกับflash memory ของ stm32f4
« Reply #5 on: April 09, 2015, 04:03:20 pm »
มีคำถาม
- Flash ณ.ตำแหน่งที่จะเขียนทับลงไปมัน Erase ก่อนหรือเปล่าครับถึงจะเขียนได้ ซึ่งการ Erase ต้องลบทั้ง Page ด้วยใช่ไหม
   ผมลอง Write โดยไม่ได้ Erase ก่อนมันค้างไปเลย
- แต่ละตำแหน่งเก็บค่า ได้ 8 bit ใช่ไหม

Re: ถามเกี่ยวกับflash memory ของ stm32f4
« Reply #6 on: April 10, 2015, 11:47:14 am »
มีคำถาม
- Flash ณ.ตำแหน่งที่จะเขียนทับลงไปมัน Erase ก่อนหรือเปล่าครับถึงจะเขียนได้ ซึ่งการ Erase ต้องลบทั้ง Page ด้วยใช่ไหม
   ผมลอง Write โดยไม่ได้ Erase ก่อนมันค้างไปเลย
- แต่ละตำแหน่งเก็บค่า ได้ 8 bit ใช่ไหม
1. ในการเขียน Flash จำเป็นต้องลบก่อนเขียนทุกครั้งครับ (ผมหมายถึงถ้าเขียนทับ Address ที่มีข้อมูลอยู่แล้วนะครับ) ไม่สามารถเขียนทับได้ (ถ้าเขียนทับข้อมูลจะเสียหาย) ส่วนการลบ Flash ต้องลบทั้ง Sector อันนี้ลองศึกษาดูจาก Application note นะครับ
2. แต่ละ Address เก็บค่าได้ 8 bits ถูกต้องครับ