




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
WritebyGianttank
我實(shí)驗(yàn)的是AT24co8的單字節(jié)讀,單字節(jié)寫,頁(yè)讀和頁(yè)寫,在高于3.3V系統(tǒng)中他的通信速率最高400KHz的,我實(shí)驗(yàn)里用的是100KHZ的速
率。圖1是硬件原理圖
圖工
DeviceAddress
圖2
圖2是器件地址,我的原理圖是A2接高。
IIC通信協(xié)議中要注意的地方:
1.當(dāng)時(shí)鐘線SCL高電平時(shí),假如把數(shù)據(jù)線SDA從高電平拉到低電平,則表達(dá)通信開始(START);假如把數(shù)據(jù)線SDA從低電平拉到高電平,則表達(dá)通信
結(jié)束(STOP)、SDA數(shù)據(jù)不變,視為數(shù)據(jù)采樣。
2,前一個(gè)STOP結(jié)束后。與下一個(gè)START開始要保證5ms的間隔。
3.頁(yè)寫有字節(jié)限制,而頁(yè)讀沒有,可以一次讀出所有的數(shù)據(jù)。
4.SDA信號(hào)在FPGA為接受方時(shí)要設(shè)立為高阻態(tài)。
5.應(yīng)答信號(hào)永遠(yuǎn)是接受方發(fā)送的,這個(gè)很重要,我就是卡在這里幾天沒找到因素。FPGA在讀數(shù)據(jù)的時(shí)候,第9個(gè)周期是FPGA發(fā)低電平給EEPRO
M的。
圖3
引腳定義
信號(hào)名稱方向描述
elkinpui50M的主時(shí)鐘
rst_ninput復(fù)位信號(hào)
swlinput按鍵1低電平有效按下執(zhí)行字節(jié)寫
sw2input按鍵2低電平有效按下執(zhí)行字節(jié)讀
sw3input按鍵3低電平有效按下執(zhí)行頁(yè)寫
sw4input按鍵4低電平有效按下執(zhí)行頁(yè)寫
SDAinoutHC數(shù)據(jù)端口
SCLoutputIIC時(shí)鐘端口
1eddataoutput數(shù)碼管段選
ledcomoutput數(shù)碼管位選
代碼中分了兩個(gè)模塊,iic_com模塊除了執(zhí)行和12c通信有關(guān)的代碼設(shè)計(jì)外,尚有按鍵檢測(cè)部分,而]edshow模塊只是驅(qū)動(dòng)數(shù)碼管顯示讀出的數(shù)
據(jù)。對(duì)于這個(gè)通信的過程,內(nèi)部使用了一段式狀態(tài)機(jī)進(jìn)行設(shè)計(jì)。圖4是狀態(tài)機(jī)的狀態(tài)圖。具體每個(gè)狀態(tài)見程序。
圖4
1.字節(jié)寫
ByteWrite
S
TW
AR
RI
TDEVICET
ADDRESSEWORDADDRESSDATA
SDAUNE[JU]工
MnLRiAI-:M::::::LiA[in
SS/CSSCA
BBwKBBKC
圖5
ModeIsim后仿真的圖
nniniri|||||np|in||jT
藍(lán)色為sda數(shù)據(jù)線高阻態(tài),fpga接受eeprom應(yīng)答。寫入數(shù)據(jù)88h.
2.字節(jié)讀
RandomRead
swSRS
TR;DEVICEET
AIAO
RDEVICETWORDDP
TADDRESSEADDRESSn-
-
MLRAMLAMLAN
SS/CSScSSCDATAno
BBwKBBkBBK
—A
C
K
DUMMYWHYE
圖6
ModeIsim后仿真的圖
nKhnl」J[JrLIiMrLrU"[[][VuTI
3.頁(yè)寫
,PageWrite
sw
TR
AI
RDEVICET
TADDRESSEWORDADDRESS(n)
0ALinn
LRAA
MS/CC
SBWKK
B
圖7
由于我只有8個(gè)數(shù)碼管,所以我程序里的頁(yè)寫,頁(yè)讀都只有4個(gè)數(shù)據(jù)。
Modelsim后仿真的圖
可以看到寫入數(shù)據(jù)位2lh,43h,65hz87ho
4.八龍
SequentialRead
RS
EAT
AC
DEVICEO
DKP
ADORESS
〔
廠
SOAUNEu
L
RAN
/CDATAno
wK
A
C
K
圖8
隨機(jī)字節(jié)讀和當(dāng)前字節(jié)讀都能觸發(fā)頁(yè)讀,我只做了隨機(jī)字節(jié)讀
Modelsim后仿真的圖
二匚二匚二匚:二匚二匚匚:[:二:匚二:匚二工:二:匚:二『:二:匚二匚二
HWLLT【IIILI;也
這里就是應(yīng)答是fpga應(yīng)答給eeprom的。
最后希望這篇文檔能幫助對(duì)IIC協(xié)議還不夠了解的同學(xué)。
源程序在下一篇文章中。
<ahref="blogs,com/cnb1ogs_com/gianttank/WindowsLiveWriter/verilogI
IC_CClB/clip_imageO02_2,jpg"Ximgwidth="786"height_265"title="clip_image002"style="bord
er-width:0px;display:inline;z,alt=,rc1ipimage002"src="hltp:〃image
/cnblogscom/gianttank/WindowsLiveWriter/verilogIIC_CCIB/c1ip_image002_thu
mb.jpgnborder="0"></a>
頂層
1timescaleIns/Ips
amodu1eiicmax(
4cIk,rst_n,
5swl,sw2,sw3,sw4,
scl,sda,
leddata,ledcom
8
9);
10
11inputclk;〃50MHz
Ainputrstn;〃復(fù)位信號(hào),低有效
「inputsw1,sw2,sw3,sw4;〃按鍵,(1按下執(zhí)行寫入操作,2按下執(zhí)行讀操作,3按下執(zhí)行連寫操作,4按下執(zhí)行
15連讀操作)
16outputscl;〃24co8的時(shí)鐘端口
17inoutsda;//24co8的數(shù)據(jù)端口
18
19
20output[7:0]ledcom;〃數(shù)碼管片選信號(hào),低有效
21output[7:0]1eddata;〃7段數(shù)碼管(不涉及小數(shù)點(diǎn))
22
23
24wire[7:0]tansdata;//傳送的數(shù)據(jù)
25wire[2:0]ackf1ag;〃標(biāo)志
26
27iiccomiiccom(
28
.clk(cIk),
29
30.rst_n(rst_n),
31.sw1(swl),
32.sw2(sw2),
J3
.sw3(sw3),
34
35.sw4(sw4),
36.sda(sda),
37.scl(scl),
38
.ackflag(ackf1ag),
39
40.outdata(tansdata)
41);
42ledshow1edshow(
43.c1k(clk),
AA
.rst_n(rst_n),
45
.ackflag(ackflag),
.1edcom(ledcom),
.1eddata(leddata),
.indata(tansdata)
);
endmodule
<fontface=z,Verdana/,>IICCOM
模塊</font>
timescaleIns/Ips
2
3moduleiiccom(
4cIk,rst_n,
5swl,sw2,sw3,sw4,
6
7scl,sda,
8ackflag,
9outdata
10
11
12
//50MHz
13inputc1k;
14inputrstn;//復(fù)位信號(hào),低有效
15inputswl,sw2,sw3,sw4;//按鍵,(1按下執(zhí)行寫入操作,2按下執(zhí)行讀操作,3按下執(zhí)行連寫操作,4按下執(zhí)
16行連讀操作)
17
18outputscl;//24co8的時(shí)鐘端口
19output[2:0]ackf1ag;//后面顯示接受到數(shù)據(jù)的標(biāo)準(zhǔn)
20inoutsda;//24co8的數(shù)據(jù)端口
21output[7:0]outdata;//數(shù)碼管顯示的數(shù)據(jù)
22
23
24
25//按鍵檢測(cè)
26regsw1_r,sw2_r,sw3_r,sw4_r;//鍵值鎖存寄存器,每20ms檢測(cè)一次鍵值
27
reg[19:0]cnt_20ms;//20ms計(jì)數(shù)寄存器
28
29
30always?(posedgec1kornegedgerst_n)
31if(!rst_n)cnt_20ms<=20'dO;
32elseif(cnt20ms==20*hfffff)ent_20ms<=2O'hO;
33
34eIsecnt_20ms<=ent_20ms+1'b1;//不斷計(jì)數(shù)
35
36always@(posedgeelkornegedgerst_n)
37if(!rst_n)begin
38
39sw1_r<=Vb1;//鍵值寄存器復(fù)位,沒有鍵盤按下時(shí)鍵值都為1
40sw2_r<=fbl;
41sw3_r<=fbl;
42sw4_r<=fbl;
43
end
44
45elseif(cnt_20ms==20>hffff0)begin
46swl_r<=swl;〃按鍵值鎖存
47sw2_r<=sw2;
48
49sw3r<=sw3;
50sw4_r<=sw4;
51end
52
53//
54
〃分頻部分
55
56reg[2:0]cnt;//cnt=0:scl上升沿,cnt=1:sc1高電平中間,cnt=2:sc1下降沿,cnt=3:scl低電平
57中間
58reg[8:0]cnt_delay;//500循環(huán)計(jì)數(shù),產(chǎn)生iic所需要的時(shí)鐘
59regscl_r;〃時(shí)鐘脈沖寄存器
60
61
62aIways@(posedgeelkornegedgerst_n)
63if(!rst_n)ent_delay<=9'dO;
64elseif(cntdelay==9'd499)cntdelay09'dO://計(jì)數(shù)至U10us為scl的周期,即10OK
65Hz
66
67elseent_delay<=cntde1ay+Tb1;//時(shí)鐘計(jì)數(shù)
68
69aIways@(posedgeelkornegedgerstn)begin
70if(!rst_n)ent<=3'd5;
71elsebegin
72
case(cnt_delay)
73
749*d124:cnt<=3'dl;〃cnt=l:sc1高電平中間,用于數(shù)據(jù)采樣
759'd255:ent<=3Zd2;〃cnt=2:sc1下降沿后面點(diǎn)
769'd374:ent<=3'd3;〃cnt=3:sc1低電平中間,用于數(shù)據(jù)變化
779'd495:ent<=3>dO;//cnt=0:scl上升沿前面點(diǎn)
78
79default:ent<=3'd5;
80endcase
81end
82end
83
84
85
'defineSCL_POS(ent==3'd0)//cnt=0:scl
86上升沿前面點(diǎn)
87defineSCL_IITG(cnt==3'dl)//cnt=l:scl高電平中間,用于數(shù)據(jù)采樣
88defineSCL.NEG(cnt==3*d2)//cnt=2:scl下降沿后面點(diǎn)
89defineSCL_LOW(ent==3*d3)〃cnt=3:sc]低電平中間,用于數(shù)據(jù)變化
90
91
92
always@(posedgeelkornegedgerst_n)
93
94if(!rst_n)scl_r<=Tb0;
95e1seif(cnt_delay==9,d499)scl_r<=1'bl;//scl信號(hào)上升沿
96elseif(cnt_de1ay==9Jd249)scl_r<=1'bO;〃scl信號(hào)下降沿
97
98
assignscl=sc1_r;//產(chǎn)生iic所需要的時(shí)鐘
99
10
0//需要寫入24C02的地址和數(shù)據(jù)
101
I0
defineDEVICEREAD8'b10101001//被尋址器件地址(讀操作)
2
103defineDEVICEWRITE8'bl010?1000//被尋址器件地址(寫操作)
104defineWRTTE_DATAO8Jb1000_l000
105defineWRITE_DATA18'b0010_0001//寫入EEPROM的數(shù)據(jù)
10
defineWRITE_DATA28'b0100_0011
6
8'bO110_0101
107defineWRITE_DATA3
I0defineWRITEDATA48*bl0000111
f?rne
81BYTE_ADDR8*b00000100〃寫入/讀出EEPROM的地址寄存器
g—7:0
1091db_r;//在IIC上傳送的數(shù)據(jù)寄存器
110[7
:read_data;
111[01//讀出EEPROM的數(shù)據(jù)寄存器
77:01
112eoutdata_r;//輸出數(shù)據(jù)貯存器
r
113amerPAGEDATA_NUM=3*d4;〃頁(yè)寫數(shù)據(jù)個(gè)數(shù)
114
11//-
5〃讀、寫時(shí)序
11
6parameterIDLE=1Tb0_0000_0000_0000_0001;//初始態(tài)
117parameterSTART1=17*b0_0000_0000_0000_0010:〃起始信號(hào)
118parameterADD1=17'b0_0000_0000__0000_0100;//寫入器件地址
119parameterACK1=17'b0_0000_0000_0000_1000;〃應(yīng)答
120
parameterADD2=17'b0_0000_0000_0001_0000;//寫入字節(jié)土也址
121
122parameterACK2=17*b0_0000_0000_0010_0000;//應(yīng)答
123parameterSTART2=irbooooooooo_oioooooo;//讀操作開始前的起始信號(hào)
124parameterADD3=1TbO000000001000_0000;〃寫入器件地址
125parameterACK3=17'b0000000010000_0000;//應(yīng)答
126
127parameterACKR=17*b10000_000000000000;//fpga給應(yīng)答
128parameterDATA=17'b00000_001000000000;//字節(jié)讀寫
129parameterPAGER二17'b0_0000_0100_0000_0000;//頁(yè)讀
130parameterPAGEW=1Vb0_0000_1000_0000_0000;//頁(yè)寫
131
132parameterACK4=17'b0_0001_0000_0000_0000;〃應(yīng)答
133parameterHIGH=17*b0_0010_0000_0000_0000;〃高電平
134parameterSTOPI=17'b0_0100_0000_0000_0000;//停止位
135parameterSTOP2=17'b0_1000_0000_0000_0000;//延時(shí)同步
136
137
138reg[l6:0]cstate;//狀態(tài)寄存器
139
140regsda_r;〃輸出數(shù)據(jù)寄存器
141regsdalink;//輸出數(shù)據(jù)sda信號(hào)inout方向控制位
142reg[3:0]num:〃讀寫的字節(jié)計(jì)數(shù)
14reg[2:0]ackf1ag;〃連讀時(shí)的數(shù)據(jù)標(biāo)志
3
reg[2:0]pageent;//連讀連寫時(shí)的數(shù)據(jù)計(jì)數(shù)器
144
14reg[7:0]pagedata_r:〃連讀儲(chǔ)存器
5
146always@(posedgec1kornegedgerst_n)begin
147if(!rst_n)begin
148pagedata_r<=8'dO;
149
150end
151elsebegin
152case(pagecnt)
1533'dO:pagedata_r<=WRITE_DATA1;
154
1553'd1:pagedata_r<=WRITE_DATA2;
1563'd2:pagedata」<=1WRITE_DATA3;
1573'd3:pagedata_r<=WRITE_DATA4;
158
default:;
15
9endcase
160end
161end
16狀態(tài)機(jī)
2
?//
163
164a1ways?(posedgeclkornegedgerst_n)begin
16if(!rst_n)begin
5cstate<=IDLE;
166sda_r<=I*b1;
167
168sda_link<=1'bO;
169num<=4'd0;
170ackflag<=3'dO;
17pageent<=3'dO;
1
172read_data<=8'b0000_0000;
173outdata_r<=8>bOO000000;
174end
175else
176
case(cstate)
177
178IDLE:begin
179sda_link<=1'b1;//數(shù)據(jù)線sda為inp
180ut
18
sda_r<=I*b1;
1
182read_data<=8'bO000_0000;
183//ackflag<=3'dO;
184if(!swl_r||!sw2_r|!sw3_r|I!sw4_r)begi
185
//SW1,SW2,SW3,SW4鍵有一個(gè)被按下
18
6db_r<=、DEVICE」RI
187TE;//送器件地址(寫操作)
188cstate<=START1;
189
end
190
19elsecstate<=IDLE;〃沒有任何鍵被按下
1end
192START1:begin
193if('SCL_HIG)begin〃sc1為高電平期間
194
195sda_link<=fb1;〃數(shù)據(jù)線sda為。utput
196sdar<=rbO;//拉低數(shù)據(jù)線sda,產(chǎn)生起始
197位信號(hào)
198cstate<=ADD1;
19ackflag<=1'bO;
9
num<=4'dO;〃num計(jì)數(shù)清零
200
201end
202elsecstate<=START1;〃等待scl高電平中間位置到來
203end
204ADD1:begin
205
20if('SCL_LOW)begin
6if(num==4*d8)begin
207num<=4'dO;/
208/num計(jì)數(shù)清零
20
9sda_r<=1'b1;
210sda」ink<=1'b
2110;〃sda置為高阻態(tài)(input)
212cstate<=ACK1:
213
21end
4elsebegin
215cstate<=ADD1;
216num<=num+1'bl;
217case(num)
218
214'd0:sda_r<=d
9b_r[7];
2204,dl:sda_r<=d
221b_r[6];
22
24'd2:sda_r<=db_r
223[5];
2244'd3:sda_r<=
225db_r[4];
226
224*d4:sda_r<=
7db_r[3];
2284'd5:sda_r<=db—
22r[2];
94,d6:sda_r<=dbr
230
[1];
231
2324’d7:sda_r<=db
233_r[0]:
234default:;
235
endcase
236
237end
23end
8elsecstate<=ADD1;
239end
24
ACKI:begin
0
241if('SCL_NEG)begin
242estate<=ADD2;〃從機(jī)響應(yīng)信號(hào)
243db_r<='BYTE_ADDR;//1地址
244
end
245
24e1secstate<=ACK1;〃等待從機(jī)響應(yīng)
6end
247ADD2:begin
248if('SCL.LOW)begin
249
,
250if(num==4d8)begin
251num<=4'dO;//
252num計(jì)數(shù)清零
25sda_r<=rbl;
3
sda_1ink<=1'b
25
40;//sda置為高阻態(tài)(input)
255cstate<=ACK2;
256
end
257
258e1sebegin
25sda_link<=Tb
91;//sda作為output
260num<=num+1*b1;
261
26case(num)
24'd0:sda_r<=dbr
263[7]:
2644'd1:sdar<=d
265b_r[6];
266
2674'd2:sda_r<=db_r
268[5]:
264'd3:sda_r<=db_r
9[4];
270
4*d4:sda_r<=db_
27
1r[3];
2724'd5:sda_r<=db_r
273[2];
274
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北省襄陽(yáng)地區(qū)2025年數(shù)學(xué)四年級(jí)第二學(xué)期期末綜合測(cè)試模擬試題含解析
- 跨境電話詐騙的識(shí)別與應(yīng)對(duì)策略
- 廣東新安職業(yè)技術(shù)學(xué)院《中醫(yī)學(xué)基礎(chǔ)與適宜技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年林芝地區(qū)朗縣三下數(shù)學(xué)期末聯(lián)考模擬試題含解析
- 2025屆浙江省杭州市濱江區(qū)四年級(jí)數(shù)學(xué)第二學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 遠(yuǎn)程醫(yī)療在慢性病管理中的應(yīng)用及效果評(píng)估報(bào)告
- 2025年02月河南安陽(yáng)市殷都區(qū)區(qū)直事業(yè)單位公開選調(diào)工作人員34人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 課題開題報(bào)告:地方高校服務(wù)區(qū)域發(fā)展效能的評(píng)價(jià)研究
- 課題開題報(bào)告:大學(xué)校園交通管理組織與實(shí)施研究
- 課題開題報(bào)告:產(chǎn)教深度融合共同體的實(shí)踐研究
- 《營(yíng)養(yǎng)均衡膳食指南》課件
- 《智能家居系統(tǒng)》課件
- 基礎(chǔ)模塊下冊(cè)《中國(guó)人民站起來了》2
- 繼電保護(hù)業(yè)務(wù)技能實(shí)操題庫(kù)
- IATF16949質(zhì)量體系基礎(chǔ)知識(shí)培訓(xùn)
- 內(nèi)科學(xué)-高血壓病
- 車間6S管理實(shí)施方案
- 廣州預(yù)拌混凝土行業(yè)發(fā)展專項(xiàng)規(guī)劃
- 【教案】 人民音樂家 教案高中人音版(2019)必修《音樂鑒賞》
- 河南省中等職業(yè)教育技能大賽組委會(huì)辦公室
- 武漢市城中村綜合改造掛牌出讓土地成本測(cè)算
評(píng)論
0/150
提交評(píng)論