
MCU๋ก EEPROM์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์ ํด๋ณผ ๊ฒ์ด๋ค. MCU๋ ST์ STM32F103์ ์ฌ์ฉํ์๊ณ , EEPROM์ I2C I/F์ธ MICROCHIP์ 24LC256์ ์ฌ์ฉํ์๋ค. ์ฉ๋์ด 256k-bit์ธ ๋ ์์ด๋ค.
1. I2C๋?
I2C ํฌ์คํ ์ผ๋ก ๊ฐ๊ธฐ (๋ ๋ค์์..)
1.1. 24LC256
์ฌ์ฉํ 24LC256์ SOIC 8ํ ํจํค์ง์ธ ๋ ์์ผ๋ก ํ๋งต์ ์๋์ ๊ฐ๋ค.
A0,1,2๊ฐ ๊ฐ๋ณํ ์ ์๋ ๋๋ฐ์ด์ค์ ์ด๋๋ ์ค ํ๋ค์ด๋ค. ์ฌ๊ธฐ์๋ ๋ชจ๋ 0์ผ๋ก ๋ง๋ค์ด์ค ๊ฒ์ด๋ค. 5, 6๋ฒ์ด I2Cํ์ด๋ค. WP๋ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๋ค. VCC๋ก ํ์ ์ธํ ํ๋ฉด ์ฐ๊ธฐ๋ฅผ ๋ชปํ๊ณ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ธฐ์ ์ด๊ธฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ฌด๊ฒ๋ ์๋๋ฐ ํ์ ํ๋ฉด ๋ฉฉ๊ฝ์ด๊ฐ ๋ ์ ์๋ค. GND๋ก ๋ฌถ์ด์ฃผ๋ฉด ๋ง๋๋ก ์ฐ๊ณ ์ง์ฐ๊ณ ํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ๋ ํ๊ณ ๋ณด์์ ์ํด์ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด GPIO๋ฅผ ํ์ฉํ์ฌ ๋ณ๋๋ก ์ ์ดํด ์ฃผ๋ฉด ๋๊ฒ ๋ค.
์์ ๊ฐ์ ๊ตฌ์กฐ๋ก I2C ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฆฌ๊ธฐ ์ ์ ๋ณด๋ด์ค ๊ฒ์ด ์๋ค. 'S' ์คํํธ ๋นํธ๊ฐ ๋ ์๊ฐ๊ณ ๋๋ฐ์ด์ค ์ด๋๋ ์ค๊ฐ ๋ ์๊ฐ๋๋ฐ ์ฌ๊ธฐ์ ์์ ์๋ 1010 (A)๋ ๊ณ ์ ์ด๊ณ ๋ค์ A2, A1, A0 ์ด ์ธ๋นํธ๋ ์ ๋์ ์ธ๋ฐ ์์์ ๋งํ๋ฏ์ด ๋ชจ๋ 0์ผ๋ก ์ธํ ํด ์ค ๊ฒ์ด๋ค. ๊ทธ๋์ ์ด๋๋ ์ค๋ 1byte์์ ๋ชจ์๋ 7bit๋ก ๊ตฌ์ฑ๋์ด ์๋ค. (1010 000x, 0xA0)
๋ค์์ Read, Write ๋นํธ์ธ๋ฐ, ์ด ๋นํธ๊ฐ 1์ด๋ฉด Read์ด๊ณ 0์ด๋ฉด Write์ธ ๊ฒ์ด๋ค. ์ฌ๊ธฐ๊น์ง ๋ ์๊ฐ๋ฉด ack๊ฐ ํ ๋นํธ ๋ณด์ผ ๊ฒ์ด๋ค.
์ ์ด ๋ฐ์ดํธ ๋ค์์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฝ๊ณ ์ธ ์ด๋๋ ์ค์ ํด๋นํ๋ ๋ฐ์ดํธ๋ฅผ ์ค์ผ ํ ๊ฒ์ด๋ค.
1๋ฐ์ดํธ๋ง ์ฌ์ฉํ๋ฉด A7~0๊น์ง๋ง ์ฌ์ฉ๋๊ณ , 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด A14~A0๊น์ง ์ฌ์ฉ๋๋ค. ํ๋ก ์ฌ์ฉํ๋ฉด 2์ 15์นํ๋ฉด 32k์ ๋ฐ์ดํฐ 8๋นํธ๋ฅผ ๊ณฑํ๋ฉด 256k๊ฐ ๋๋ค.
2. ์ฐ๊ธฐ/์ก์
์ฐ์ ์ ์ผ๋ก ํด์ค๊ฒ ์๋ค.
void eeprom_initialize(I2C_HandleTypeDef *I2C_Handler)
{
eeprom_hi2c = I2C_Handler;
}
EEPROM ์ด๊ธฐํ ํจ์๋ฅผ ๋ง๋ค์ด์ค ๊ฒ์ด๋ค. ์? ๊ทธ๋ฅ.. I2C๊ฐ ์ฌ๊ธฐ์ ๊ธฐ์ ์ธ ์ ์์ผ๋, ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฅ ํด์ฃผ๊ธฐ ์ํด ๋ณ๋์ ์ด๊ธฐํ ํจ์๋ก ๋ง๋ค์๋ค.
'I2C_HandleTypeDef' ๋ผ๋ ๊ตฌ์กฐ์ฒด์ ๋ณ๋ช ์ 'I2C_Handler' ๋ผ๊ณ ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ 'eeprom_hi2c'์ ๋ฃ๊ฒ ๋ค.
2.1. ์ฐ๊ธฐ (๋ฉ๋ชจ๋ฆฌ์ฉ)
์ฐ๊ธฐ ๋ฐฉ๋ฒ์ ์ธํฐ๋ฝํธ๋ฐฉ์๊ณผ ํด๋ง ๋ฐฉ์๋ ์๋๋ฐ, MEM ์ด๋ผ๋ ๋ฉ๋ชจ๋ฆฌ์ฉ์ด ์๋๋ฐ ์ฌ๊ธฐ์๋ ์ด๊ฒ์ ์ฌ์ฉํ๊ฒ ๋ค.
HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- I2C_HandleTypeDef *hi2c : HAL Library I2C์ ๊ตฌ์กฐ์ฒด์ด๋ค?
- uint16_t DevAddress : ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์ถ์ ๋๋ฐ์ด์ค ์ฃผ์ ๊ฐ
- uint16_t MemAddress : ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ
- uint16_t MemAddSize : ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ฌ์ด์ฆ๊ฐ 1byte์ธ๊ฐ, 2byte์ธ๊ฐ๋ฅผ 1byte๋ฉด '1', 2byte๋ฉด '2'
- uint8_t *pData : ์ฐ๊ณ ์ถ์ ๋ฐ์ดํฐ
- uint16_t Size : ๋ฐ์ดํฐ์ ์ฌ์ด์ฆ๊ฐ 1byte๋ฉด '1'
- uint32_t Timeout : x ms ๋์ ๋๊พธ๊ฐ ์์ผ๋ฉด error
์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด๋ดค๋ค. ํต์ ์ด ์๋๋ฉด printf๋ ๋ฌด์ํ๊ณ ๋์ด๊ฐ ๊ฒ์ด๊ณ , ํต์ ์ด ์ ์๋๋ฉด 'eeprom i2c write error' ๋ฉ์ธ์ง๊ฐ ์ฝ์์ ๋ฟ๋ ค์ง ๊ฒ์ด๋ค.
void eeprom_write(U16 address,U08 byte)
{
if (HAL_I2C_Mem_Write(eeprom_hi2c, EEPROM_ADDR, address, 2, &byte, 1, 10) != HAL_OK)
{
printf("eeprom i2c write Error!\r\n");
}
}
์ฌ๊ธฐ์ EEPROM_ADDR์ '0xA0' ์ด๋ค. 'address'์๋ ์๋ฌด ๊ฐ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์ถ์ ์ฃผ์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
2.2 ์ฝ๊ธฐ (๋ฉ๋ชจ๋ฆฌ์ฉ)
์ฝ๊ธฐ ๋ฐฉ๋ฒ๋ ์ฐ๊ธฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํฐ๋ฝํธ๋ฐฉ์๊ณผ ํด๋ง๋ฐฉ์์ด ์๋ค.์ฌ๊ธฐ์๋ MEM ๋ฉค๋ฉค๋ฉ~๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค.
HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- I2C_HandleTypeDef *hi2c : HAL Library I2C์ ๊ตฌ์กฐ์ฒด์ด๋ค?
- uint16_t DevAddress : ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ถ์ ๋๋ฐ์ด์ค ์ฃผ์ ๊ฐ
- uint16_t MemAddress : ์ฝ๊ณ ์ถ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ
- uint16_t MemAddSize : ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ฌ์ด์ฆ๊ฐ 1byte์ธ๊ฐ, 2byte์ธ๊ฐ๋ฅผ 1byte๋ฉด '1', 2byte๋ฉด '2'
- uint8_t *pData : ์ฝ๊ณ ์ถ์ ๋ฐ์ดํฐ
- uint16_t Size : ๋ฐ์ดํฐ์ ์ฌ์ด์ฆ๊ฐ 1byte๋ฉด '1'
- uint32_t Timeout : x ms ๋์ ๋๊พธ๊ฐ ์์ผ๋ฉด error
์๋์ ๊ฐ์ด ์ฝ๊ธฐ ์ฝ๋๋ฅผ ์์ฑํด๋ดค๋ค. ๋ฉ๋ชจ๋ฆฌ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ฐ ์คํจํ๋ฉด ์ฝ์์ฐฝ์ printf์ ์๋ ๋ด์ฉ๋ค์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค. Error!!!!
unsigned char eeprom_read(U16 address)
{
U08 data;
if (HAL_I2C_Mem_Read(eeprom_hi2c, EEPROM_ADDR, address, 2, &data, 1, 10) != HAL_OK)
{
printf("eeprom i2c read Error!\r\n");
}
return data;
}
์ฌ๊ธฐ๊น์ง..
๋ณผ๋งํ์ฑ
'Embedded HW & FW > STM (M3,4,7...)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[STM32F103] UART TEST CODE (NO HAL) (0) | 2023.01.04 |
---|---|
[STM] STM32F103, ADC 2์ฑ๋ ์ฝ๊ธฐ (0) | 2022.09.14 |
[STM] MCU SPI ์ธํ (0) | 2022.09.14 |
STM32F103์ ์ด์ฉํ SPI ์ธํฐํ์ด์ค๋ก TOUCH(ADS7846) ์ ์ด (0) | 2022.07.27 |
[STM] STM32F103์ผ๋ก USART๋ฅผ ์ด์ฉํด ์ฝ์์์ printf ์ฌ์ฉํ๊ธฐ (0) | 2022.07.20 |
์ต๊ทผ๋๊ธ