๋ง์ดํฌ๋ก์นฉ์ค์ EEPROM ์ ํ์ธ 25LC040A-E/OT ์ SPI๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ์ฝ๋ ๊ณผ์ ์ ํ ๊ฒ์ด๋ค. DSP ๋ TMS320F28069 ๋ชจ๋ธ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
1) SPI ์ก์ ๊ณผ ์์
TI DSP๋ก EEPROM๊ณผ SPI๋ก ํต์ ํ๋ ๊ฒ์ ์ด์ ์์ํด ๋ณผ ๊ฒ์ด๋ค.
[TI] TMS320F28069 SPI ์ธํ ํ๊ธฐ
[TI] TMS320F28069๋ก EEPROM์ธ 25LC040A-E/OT๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํ
(1) SPI TX
์๋ ์ฝ๋๋ SPI ์ ์ก์ ๋ํ ์ฝ๋์ด๋ค. EEPROM์ ์ฐ๋ ๊ณผ์ ์ ์๋์๋ ํจ์๋ฅผ ํ์ธํ์.
void Spibtxwr(Uint16 Data)
{
SpibRegs.SPITXBUF = Data;
while(SpibRegs.SPISTS.bit.INT_FLAG !=1) { }
}
์์ ์์ค์ธ๋ฐ, ์ฌ๊ธฐ์ ํต์ฌ์ ์ด๋ ์์ด๋ค. SpibRegs.SPITXBUF = Data;
SPI ์ ์ก ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์๋์ผ๋ก ์ฌํํธ ๋ ์ง์คํฐ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณต์ฌ๋๊ณ ์ถ๋ ฅ์ด ๋๋ค. ์ถ๋ ฅ์ด ์๋ฃ๊ฐ ๋์๋ค๋ฉด SPISTS ๋ ์ง์คํฐ์ 6๋ฒ ๋นํธ์ธ INT_FLAG๊ฐ 0์์ 1๋ก ๋ฐ๋ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค๊ณ ์๋ฆฌ๋ ํ๋๊ทธ์ด๋ค. ์ด ํ๋๊ทธ๋ฅผ ํตํด์ ์ ์ ๋ ์ ์ก์ด ์๋ฃ๋ ๊ฒ์ ์ ์ ์๋ ๊ฒ์ด๋ค.
์ด ์ธํฐ๋ฝํธ ํ๋๊ทธ๋ฅผ ์ง์ฐ๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์๋ค. ๊ฐ์ฅ ๋จผ์ SPI ์์ ๋ฒํผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๊ฐ๋ ๊ฒ์ด๋ค. ๋ค์์ SPI SW RESET์ ํ๋ ๊ฒ์ธ๋ฐ, SPI๊ฐ ๋จนํต์ด ๋ ๊ฒ ๊ฐ์ผ๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๋ค. ๋ง์ง๋ง์ผ๋ก ์์คํ ๋ฆฌ์ ์ ํ์๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค. ์ด๊ฑด ๊ฑฐ์ ์ฌ์ฉํ ์ผ ์์ ๊ฒ ๊ฐ๋ค.
(2) SPI RX
์์์ SPI ์ก์ ์ ๋ํด์ ์์๋ดค๋ค. ์ด์ ๋ ์์ ์ ๋ํด์ ๋ณด๋๋ก ํ๊ฒ ๋ค.
Uint16 SpibRxRd(Uint16 Data)
{
Uint16 rxdata;
SpibRegs.SPITXBUF = Data;
while(SpibRegs.SPISTS.bit.INT_FLAG !=1) { }
rxdata = SpibRegs.SPIRXBUF;
return(rxdata);
}
SPI๋ก ์์ ์ ๋ฐ์ ๋ ์์ ๋ฐ์ ๋ฐ์ดํฐ์ ์ด๋๋ ์ค ๊ฐ์ ์ฌ๋ ์ด๋ธ์ธ EEPROM์๊ฒ ์ ์กํด ์ค์ผ ํ๋ค. ์ด๋๋ ์ค ๊ฐ์ ๋ฐ์ ์ฌ๋ ์ด๋ธ๋ ์ฆ์ ํด๋น ์ด๋๋ ์ค์ ์๋ ๋ฐ์ดํฐ๋ฅผ MISO๋ฅผ ํตํด ์ ์กํด์ค๋ค.
SPISTS ๋ ์ง์คํฐ์ 6๋ฒ ๋นํธ์ธ INT_FLAG ๋ ์ก์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์ด ์๋ฃ๋๋ฉด ํ๋๊ทธ๊ฐ 0์์ 1์ด ๋๋ค. SPIRXBUF์์ rxdata ์ง์ญ๋ณ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์จ ํ ๋ฆฌํด์ํค๋ ์ฝ๋์ด๋ค.
๊ทธ๋ฐ๋ฐ TXํ ๋ ๋ฐ์ํ INT_FLAG๋ฅผ ํด์์ํค์ง ์์ผ๋ฉด ์ ํจ์์์ ์ด๋๋ ์ค ๊ฐ์ ์ ๋ฌํ๊ณ ํ์ธํด์ผ ํ ํ๋๊ทธ๋ ์ป์ง ๋ชปํ๋ค. ์ธ์์ ์ผ๋ก ํ๋๊ทธ๋ฅผ ํ๋ฒ ํด์ํด์ฃผ๋ ๊ณผ์ ์ด ํ์ํ ๋ฏ ํ๋ค.
2) EEPROM์ ์ฐ๊ณ ์ฝ๊ธฐ
์์์ DSP๋ก SPI ์ก์ ๊ณผ ์์ ์ ๋ํ ๋ฐฉ๋ฒ์ ์์๋ดค๋ค. ์ด์ EEPROM์ ์ฐ๊ณ ์ฝ์ด๋ณด์.
(1) WRITE
SPI๋ก EEPROM์ ์๋ฌด๊ฐ์ด๋ ์ ์ด์ฃผ๊ณ ์ ํ๋ค. ์ฐ๊ธฐ๋ฅผ ํ๊ธฐ ์ ์ ๋จผ์ ์ฐ๊ธฐ๋ฅผ ํ์ฑํ ์ํค๋ ๊ณผ์ ์ด ํ์ํ๋ค. ๊ทธ ์ํ์ค๋ ์๋์ ๊ฐ๋ค.
CS๋ฅผ 1์์ 0์ผ๋ก ๋จ๊ตฐ ํ MOSI๋ก ์ฐ๊ธฐ ํ์ฑํ ๋ช ๋ น์ ๋จผ์ ํด์ฃผ์ด์ผ ํ๋ค. ๋ช ๋ น(0000 0110)์ ์ฃผ๊ณ ๋๋ฉด CS๋ฅผ ๋ค์ 1๋ก ์ฌ๋ ค์ฃผ์.
๋ถ์์ ์ผ๋ก ์ฐ๊ธฐ ๋นํ์ฑํ ์ํ์ค๋ ๋ณด๊ณ ๋ง ์ง๋๊ฐ๊ฒ ๋ค. ๋นํ์ฑํ ๋ช ๋ น์ 0000 0100 ์ด๋ค.
์ด์ ์ฐ๊ธฐ๋ฅผ ํ์ฑํํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ๊ณผ์ ์ ๋ณด๋๋ก ํ๊ฒ ๋ค.
์ฐ๊ธฐ๋ฅผ ํ ๋๋ ๋ช ๋ น๊ณผ ์ด๋๋ ์ค๋ฅผ ์ฃผ๊ณ ๋ ํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ ์์๋ก ํ๋ฉด๋๋ค.
๊ทธ๋ผ ์ด์ ์์ ์์ค๋ฅผ ๋ณด๊ฒ ๋ค.
void EpWrite(Uint16 EE_address,Uint16 EE_data)
{
EP_CS = 1;
DelayLoop(1);
EP_CS = 0;
SpibTxWr(EWEN);
EP_CS = 1;
DelayLoop(1);
EP_CS = 0;
SpibTxWr((WRITE) | (EE_address));
SpibTxWr(EE_data);
DelayLoop(1);
EP_CS = 1;
}
EP_CS๋ SPI CS์ด๋ค. f28069_Peri.h ํ์ผ์ ์ ์๋์ด ์๋ค.
#define EP_CS GpioDataRegs.GPADAT.bit.GPIO15
EWEN์ด๋ผ๋ ๋ ์์ ์์์ ๋ดค๋ ์ฐ๊ธฐ ํ์ฑํ๋ฅผ ์ํ ๋ช ๋ น ์ฝ๋์ด๋ค. f28069_Peri.c ํ์ผ์ ์ ์ ๋์ด ์๋ค.
#define EWEN (0x0600) // 0000 0110 0000 0000
WRITE๋ ์ฐ๊ธฐ ๋ช ๋ น(0000)๊ณผ ์ฐ๊ธฐ ์ด๋๋ ์ค(0010)์ ๋ํ ๊ฐ์ด๋ค. f28069_Peri.c ํ์ผ์ ์ ์๋์ด ์๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ด๋๋ ์ค๋ ๋งค๊ฐ๋ณ์1์ธ EE_address์ด๋ค.
#define WRITE (0x0200)
EP_CS๋ฅผ 1์ ์ฃผ๊ณ ๊ณง ๋ฐ๋ก 0์ผ๋ก ๋ด๋ ค์ ์นฉ ์ ๋ ํธ๋ฅผ ํด์ค ํ ์ฐ๊ธฐ ํ์ฑํ ๋ช ๋ น์ SPI ์ ์ก ํจ์๋ฅผ ํตํด ์จ์ค๋ค. ๊ทธ ํ CS๋ฅผ 1๋ก ์ฌ๋ฆฐ ํ ๋ค์ CS๋ฅผ 0์ผ๋ก ๋ด๋ ค์ ๋ช ๋ น๊ณผ ์ด๋๋ ์ค๋ฅผ ์จ์ค ํ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ๊ณผ์ ์ด๋ค. ๋ฐ์ดํฐ๊น์ง ์ฐ๊ณ ๋๋ฉด CS๋ฅผ 1๋ก ๋ค์ ์ฌ๋ ค์ค๋ค.
(2) READ
์ด์ EEPROM์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ณผ์ ์ด๋ค.
์ฝ์๋๋ ๊ฐ๋จํ๋ค. CS๋ฅผ 0์ผ๋ก ๋ด๋ฆฐ ํ ์์ ๊ฐ์ด ๋ช ๋ น(0000)+์ฝ๊ธฐ ์ด๋๋ ์ค(0011)+์ฝ์ด์ฌ ์ด๋๋ ์ค ๊ฐ์ EEPROM์๊ฒ ์ ์กํ๋ฉด MISO๋ฅผ ํตํด์ ํด๋น ์ด๋๋ ์ค์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๋ค.
Uint16 EpRead(Uint16 EE_address)
{
Uint16 EE_data;
EP_CS = 1;
DelayLoop(1);
EP_CS = 0;
SpibTxWr((READ) | EE_address);
EE_data = SpibRxRd(DUMMY_BYTE); // dummy byte send & Read Data
DelayLoop(1);
EP_CS = 1;
return(EE_data);
}
CS๋ฅผ 0์ผ๋ก ๋ด๋ฆฐ ํ SPI ์ ์กํจ์๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ EEPROM์ ์ด๋๋ ์ค ๊ฐ์ ๋งค๊ฐ๋ณ์(EE_address)๋ฅผ ํตํด ๋ฃ์ด์ค๋ค. ์ฝ๊ธฐ ์ด๋๋ ์ค์ธ READ๋ ์๋์ ๊ฐ์ด ์ ์๋์ด ์๋ค.
#define READ (0x0300)
์ด์ ์ก์์ , ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ์ ๋๋์ง ํ์ธ์ ํด๋ณด์.
'EMBEDED > TI (C2000...)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TI] TMS320F28069๋ก EEPROM์ธ 25LC040A-E/OT๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํ (0) | 2023.03.03 |
---|---|
[TI] TMS320F28069 SPI ์ธํ ํ๊ธฐ (0) | 2023.02.27 |
[TI] SCI (UART) ์ธ๋ถํด๋ญ ์ฌ์ฉ์ BAUD RATE ์ธํ (1) | 2023.02.24 |
[TI] UART (SCI) ์ฝ์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๊ธฐ (0) | 2023.02.20 |
[TI][CCS] ํ๋ก๊ทธ๋จ ๋ค์ด๋ก๋ ๋ฐฉ๋ฒ (0) | 2023.02.02 |
์ต๊ทผ๋๊ธ