보통은 I2C EEPROM을 많이 이용하는데 어쩌다보니 SPI로 설계해 버렸다.

그로 인해서 시간을 조금 허비? 했다.


SPI Write를 하는데 1 PAGE만 쓰기가 가능하고 이후 데이터를 오리무중이다..

정말 쓰기가 잘못 된건지 반대로 읽기가 안되는건지 종일 고민했다.


AT25040B 의 경우 아이러니 하게도 WREN 명령을 1 PAGE Write 할때마다 줘야한다. 이게 포인트...



void SPI_Flash_WriteArray(uint16_t address, uint8_t *data, uint8_t len) { uint16_t addr = address; uint8_t i = 0; while( i < len ) { SPI_Flash_WriteEnable();    // <== 이놈이 문제였음. EEPROM_CS_LOW(); SPI_SendByte(WRITE); // 명령선택 //SPI_SendByte((addr & 0xFF00) >> 8); // 상위어드레스를 쓸 경우 SPI_SendByte(addr & 0xFF); // 하위어드레스 for(; i < len;) { SPI_SendByte(data[i++]); // 쓸 데이터 1 Byte씩 보내기 if(++addr % PAGE_SIZE == 0) { break; } } EEPROM_CS_HIGH(); delay_ms(10);    // 칩마다 틀리지만 쓰기를 실행하는데 5ms 필요하다. } }


Posted by +깡통+