W5500之Socket寄存器區介紹

W5500之Socket寄存器區介紹

1)、Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)偏移地址為0x0000,可讀寫,復位值為0x00

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

MULTI/MFEN

BCASTB

ND/MC/MMB

UCASTB/MIP6B

P3

P2

P1

P0

MULTI/MFEN占用“Socket n模式寄存器”的bit7:

#define Sn_MR_MULTI?? 0x80

//Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit7(MULTI/MFEN)1,在UDP模式中,使能“組播”。

/*在將Sn_CR寄存器中的OPEN=1之前,必須先將Sn_DIPR寄存器配置為組播的IP地址“224, 1, 1, 11”,再將Sn_DPORT寄存器配置為組播的端口6000,才可以使用組播。*/

#define Sn_MR_MFEN?? Sn_MR_MULTI

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit7(MULTI/MFEN)1,在MACRAW模式中,表示使能“MAC濾波器”。*/

BCASTB占用“Socket n模式寄存器”的bit6:

它是“Broadcast Blocking in MACRAW and UDP mode”的簡寫。BCASTB=1表示使能“UDP廣播阻塞模式”或 “MACRAW廣播阻塞模式”。

#define Sn_MR_BCASTB?? 0x40

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit6(BCASTB)1

UDP模式中,表示使能阻塞接收“廣播數據包”;

MACRAW模式中,表示使能阻塞接收“廣播數據包”;*/

ND/MC/MMB占用“Socket n模式寄存器”的bit5:

#define Sn_MR_ND? 0x20

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit5(ND/MC/MMB),

TCP模式中,ND/MC/MMB=1后,W5500一旦收到一個數據包,就會毫不延遲地發送ACK包;在TCP模式中,ND/MC/MMB=0后,W5500會等待“RTR重試定時值寄存器”配置的超時時間后,再發送ACK數據包;*/

#define Sn_MR_MMB?? Sn_MR_ND

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit5(ND/MC/MMB)

UDP模式中,且MULTI/MFEN=1(使能組播),如果ND/MC/MMB=0,表示IGMP版本2;如果ND/MC/MMB=1,表示IGMP版本1*/

#define Sn_MR_MC???? Sn_MR_ND

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit5(ND/MC/MMB)

MACRAW模式中,如果ND/MC/MMB=1,則表示使能阻塞接收“具有組播的MAC地址的數據包”;*/

UCASTB/MIP6B占用“Socket n模式寄存器”的bit4:

#define Sn_MR_UCASTB?? 0x10

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit4(UCASTB/MIP6B)

UDP模式中,且MULTI/MFEN=1(使能組播),如果UCASTB/MIP6B=1,它會阻止接收“單播數據包”;*/

#define Sn_MR_MIP6B??? Sn_MR_UCASTB

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)bit4(UCASTB/MIP6B)

MACRAW模式中,如果UCASTB/MIP6B=1,它會阻止接收IPv6數據包;*/

P[3:0]占用“Socket n模式寄存器”的bit3:0

#define Sn_MR_CLOSE? 0x00

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)中的bit3:0(P[3:0])=0000B,表示Socket n沒有使用任何協議*/

P[3:0]=0001B,表示Socket n被配置為TCP協議。

#define Sn_MR_TCP?? 0x01

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)中的bit3:0(P[3:0])=0001B,表示Socket n使用TCP協議*/

P[3:0]=0010B,表示Socket n被配置為UDP協議。

#define Sn_MR_UDP?? 0x02

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)中的bit3:0(P[3:0])=0010B,表示Socket n使用UDP協議*/

#define Sn_MR_IPRAW? 0x03

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)中的bit3:0(P[3:0])=0011B,表示Socket n使用IPRAW協議。IPRAW屬于IP層的數據通信,它是比TCPUDP低一層協議。 IP LAYER RAW SOCK*/

P[3:0]=0100B,表示Socket n被配置為MACRAW協議。

#define Sn_MR_MACRAW? 0x04

/*Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)中的bit3:0(P[3:0])=0100B,表示Socket n使用MACRAW協議。MACRAW是一個低于IP層的以太網MAC通信。Socket 0使用MACRAW協議模式*/

地址重定義:

#define Sn_MR(N) (_W5500_IO_BASE_+(0x0000<< 8)+(WIZCHIP_SREG_BLOCK(N)<<3))

//設置“Socket n模式寄存器”在W5500幀中的“第1個字節,第2個字節,第3個字節的高5位和低3位為0

//WIZCHIP_SREG_BLOCK(N)用來指定位于哪個“Socket n模式寄存器”

//WIZCHIP_SREG_BLOCK(N)左移3位,是因為BSB[4:0]位于控制段的bit7:3

2)、Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)偏移地址為0x0001,可讀寫,復位值為0x00

“Socket n命令寄存器”用來設置“OPEN,CLOSE,CONNECT,LISTEN,SEND和RECEIVE”命令。W5500接收命令后,就令“Socket n命令寄存器”的Sn_CR=0x00。即使Sn_CR= 0x00,可能該命令還在處理中,為了檢查“命令”是否被處理完成,請檢查“Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)”或“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”。

#define Sn_CR_OPEN?????????????????? 0x01

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x01

根據“Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)”中P[3:0]指定的協議(TCP, UDP MACRAW),初始化并打開“Socket n;

執行后,“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值如下:

在無協議模式中,Sn_SR=0x00,用SOCK_CLOSED表示,Sn_MR中的P[3:0]Sn_MR_CLOSE表示;

TCP模式中,Sn_SR=0x13,SOCK_INIT表示,Sn_MR中的P[3:0]Sn_MR_TCP表示;

UDP模式中,Sn_SR=0x22,SOCK_UDP表示,Sn_MR中的P[3:0]Sn_MR_UDP表示;

MACRAW模式中,Sn_SR=0x42,SOCK_MACRAW表示,Sn_MR中的P[3:0]Sn_MR_MACRAW表示;*/

#define Sn_CR_LISTEN? 0x02

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x02,只用于TCP服務器模式,等待接收來自“TCP客戶端”的連接請求。

Sn_SR寄存器從SOCK_INIT變成SOCKET_LISTEN時,令“Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x02”,

當“TCP客戶端的連接請求”建立成功后,Sn_SR寄存器從SOCK_LISTEN變成SOCK_ESTABLISHED,且Sn_IR寄存器的bit0=1

當“TCP客戶端的連接請求”建立失敗后,Sn_SR寄存器從SOCK_LISTEN變成SOCK_CLOSEDSn_IR寄存器的bit1=1*/

#define Sn_CR_CONNECT? 0x04

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x04,只用于TCP客戶端模式,“TCP客戶端”會發送“SYN包”給“TCP服務端”。如果連接請求成功,Sn_SR寄存器從SOCK_INIT變成SOCK_ESTABLISHED,且Sn_IR寄存器的bit0=1*/

#define Sn_CR_DISCON? 0x08

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x08,只用于TCP模式。無論是“TCP服務器”,還是“TCP客戶端”,DISCON命令用來處理“斷開連接進程”(“主動關閉[Active close]”或“被動關閉[Passive close]);

“主動關閉[Active close]”就是它將斷開連接請求(FIN數據包)傳輸到“所連接的對等端”。

“被動關閉[Passive close]”就是當從“對等端”接收到FIN數據包時,再將FIN數據包回傳給“對等端”。

當“斷開請求成功”,就是說“FIN數據包”和“ACK數據包”被成功接收了,Sn_SR寄存器變成SOCK_CLOSED

否則,Sn_IR寄存器的bit3=1,然后再讓Sn_SR寄存器變成SOCK_CLOSED

如果“Socket n關閉”不是由“DISCON命令”引起的,則不用發送“斷開請求”,Sn_SR寄存器就會變成SOCK_CLOSED

如果“Socket n關閉”是采用通訊從“對等端”接收到“RST數據包”,Sn_SR寄存器會無條件變成SOCK_CLOSED

*/

#define Sn_CR_CLOSE? 0x10

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x10

執行CLOSE命令,就會關閉“Socket n”,同時,Sn_SR寄存器變成SOCK_CLOSED*/

#define Sn_CR_SEND? 0x20

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x20

執行SEND命令,將位于“Socket n TX buffer”中的數據發送出去,了解更多詳情,

請參考“Socket n的發送緩沖區剩余量大小寄存器(Socket n TX Free Size Register,簡寫Sn_TX_FSR)”,“Socket n的發送緩沖區寫指針寄存器(Socket n TX Write Pointer Register,簡寫Sn_TX_WR)”和“Socket n的發送緩沖區讀指針寄存器(Socket n TX Read Pointer Register,簡寫Sn_TX_RD)*/

#define Sn_CR_SEND_MAC ?0x21

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x21

只用于“UDP模式”,基本操作是與發送“SEND命令”相同的。一般來說,發送“SEND命令數據”通常需要先通過自動ARP(地址解析協議)請求獲得“目的地MAC地址”才能進行傳輸。而“SEND_MAC命令” 卻不需要使用自動ARP請求。此時,“目的地MAC地址”使用的是主機Sn_DHAR 的設置,而不是通過ARP過程獲取的。*/

#define Sn_CR_SEND_KEEP? 0x22

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x22

只用于TCP模式,SEND_KEEP命令通過發送“1字節在線心跳包”來檢查連接狀態。如果“對方”不能在“超時計數期”內反饋“在線心跳包”,這個連接將會被關閉并觸發“超時中斷”。*/

#define Sn_CR_RECV? 0x40

/*Socket n命令寄存器(Socket n Command Register,簡寫Sn_CR)的值為0x40

RECV命令”通過使用“Socket n的接收緩沖區的接收量大小寄存器(Socket n RX Received Size Register,簡寫Sn_RX_RSR)”來完成在“Socket n接收緩存”中接收數據的過程。了解更多詳情,請參考“Socket n的接收緩沖區的接收量大小寄存器(Socket n RX Received Size Register,簡寫Sn_RX_RSR)”,“Socket n的的接收緩沖區的讀指針寄存器(Socket n RX Read Pointer Register,簡寫Sn_RX_RD)”和“Socket n的接收緩沖區的寫指針寄存器(Socket n RX Write Pointer Register,簡寫Sn_RX_WR)*/

3)、Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)偏移地址為0x0002。只讀,復位值為0x00

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Reserved

Reserved

Reserved

SEND_OK

TIMEOUT

RECV

DISCON

CON

Sn_IR寄存器的bit7:5為保留。

#define Sn_IR_SENDOK?? 0x10

/*(Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)bit4SEND_OK

如果“SEND命令”執行完成,則SEND_OK=1*/

#define Sn_IR_TIMEOUT? 0x08

/*Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)bit3TIMEOUT

如果“ARP數據包或者TCP數據包”超時,則TIMEOUT=1;*/

#define Sn_IR_RECV?? 0x04

/*Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)bit2RECV

如果接收到“對方的數據”,則RECV=1;*/

#define Sn_IR_DISCON? 0x02

/*Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)bit1DISCON

如果接收到來自“對方的FINFIN/ACK包”,則DISCON=1;*/

#define Sn_IR_CON?? 0x01

/*Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)bit0CON

如果與對方建立連接成功,且Sn_SR寄存器變為“SOCK_ESTABLISHED”,則CON=1;*/

地址重定義:

#define Sn_IR(N) (_W5500_IO_BASE_+(0x0002<< 8) + (WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0,用來訪問Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)

Socket n中斷寄存器(Socket n Interrupt Register,簡寫Sn_IR)偏移地址為0x0002

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”*/

4)、Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)偏移地址為0x0003。

#define SOCK_CLOSED ?0x00

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x00,

SOCK_CLOSED表示,“Socket n”處于關閉狀態,資源被釋放。

DICON命令,CLOSE命令被執行,或當觸發超時中斷時,“Sn_SR寄存器”變為0x00,SOCK_CLOSED*/

#define SOCK_INIT? 0x13

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x13,

SOCK_INIT表示,表示“Socket n”以TCP模式打開。首先將“Socket n模式寄存器(Socket n Mode Register,簡寫Sn_MR)”中的bit3:0(P[3:0])=0001B,即設置為“TCP模式”;再將Sn_CR寄存器中的OPEN命令置1,則Sn_SR寄存器的值為0x13,即SOCK_INIT*/

#define SOCK_LISTEN? 0x14

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x14,

SOCK_LISTEN表示,表示“Socket n”工作在“TCP服務器模式”,正在等待“來自TCP客戶端的連接請求”。當TCP服務器成功接收到“連接請求”時,Sn_SR寄存器的值變成為SOCK_ESTALBLISHED;否則,Sn_IR寄存器中的TIMEOUT1,并觸發TCP超時中斷,Sn_SR寄存器的值才會變成為SOCK_CLOSED*/

#define SOCK_ESTABLISHED???????????? 0x17

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x17,

SOCK_ESTABLISHED表示;Sn_SR寄存器的值為“SOCK_LISTEN”時,如果 TCP服務器”處理來自“TCP客戶端”的SYN數據包,或者是“TCP客戶端”設置“CONNECT命令(SYN數據包)”成功,Sn_SR寄存器的值都會變成SOCK_ESTABLISHED。在Sn_SR寄存器的值為“SOCK_ESTABLISHED”時,“數據包”就可以使用“SEND命令”發送,或是通過“RECV命令”執行接收。*/

#define SOCK_CLOSE_WAIT?? 0x1C

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x1C,

SOCK_CLOSE_WAIT表示“半關閉狀態”;這個狀態表示“Socket n”接收到來自“對方端”的“FIN數據包(斷開請求)”,這是一個“半關閉狀態”,可以進行數據傳輸。若要完全關閉,則要執行“DISCON命令”,如果只是關閉“Socket n”,則要執行“CLOSE命令”。*/

#define SOCK_UDP? 0x22

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x22,

SOCK_UDP表示“Socket n”在“UDP模式”下打開的。當Sn_MR寄存器的P[3:0]=0010B

并且“OPEN命令”被執行了,則Sn_SR的值就會變成“SOCK_UDP”。不像“TCP模式”,它無需“連接處理”,就可以進行數據傳輸。*/

#define SOCK_MACRAW?? 0x42

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x42,

SOCK_MACRAW表示“Socket 0”是在“MACRAW模式”下打開的。

當設置Sn_MR寄存器的P[3:0]=0100B,即“MACRAW模式”,并且“OPEN命令”被執行了,則Sn_SR的值就會變成“SOCK_MACRAW”。和“UDP模式的Socket”一樣,“SOCK_MACRAW模式”中的“Socket 0”無需連接處理,就可以直接傳輸“MAC(Ethernet frame)*/

#define SOCK_SYNSENT?? 0x15

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x15,

SOCK_SYNSENT表示,它是一個臨時狀態,表示Socket n”發送“SYN數據包(連接請求包)”給對方。它是在發送“CONNECT命令”后, Sn_SR寄存器的值從SOCK_INIT變成SOCK_ESTABLISHED過程中出現的臨時數值。當“Sn_SR寄存器的值”為SOCK_SYNSENT那個時刻,接收到來自對方端的“連接接受包(SYN/ACK數據包)”,

然后“Sn_SR寄存器的值”就變成為SOCK_ESTABLISHED。否則,出現TCP超時后,“Sn_SR寄存器的值”會變成SOCK_CLOSED*/

#define SOCK_SYNRECV?? 0x16

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x16,

SOCK_SYNRECV表示,它是一個臨時狀態,表示Socket n”成功接收來自對方端的“SYN數據包(連接請求包)”。如果“Socket n”成功發送“SYN/ACK應答數據包”給對方端,“Sn_SR寄存器的值”會變成SOCK_ESTABLISHED。如果發送失敗,在出現超時(Sn_IR寄存器的TIMEOUT位置1)后,“Sn_SR寄存器的值”會變成SOCK_CLOSED

*/

#define SOCK_FIN_WAIT? 0x18

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x18,

SOCK_FIN_WAIT表示,它是一個臨時狀態,表示Socket n”正在關閉。它顯示在“斷開處理”中,是主動關閉還是被動關閉。當“斷開處理”完成,或是超時,“Sn_SR寄存器的值”會變成SOCK_CLOSED*/

#define SOCK_CLOSING? 0x1A

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x1A,

SOCK_CLOSING表示,它是一個臨時狀態,表示“Socket n”正在關閉。它顯示在“斷開處理”中,是主動關閉還是被動關閉。當“斷開處理”完成,或是超時,“Sn_SR寄存器的值”會變成SOCK_CLOSED*/

#define SOCK_TIME_WAIT?? 0x1B

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x1B,

SOCK_TIME_WAIT表示,它是一個臨時狀態,表示“Socket n”正在關閉。它顯示在“斷開處理”中,是主動關閉還是被動關閉。當“斷開處理”完成,或是超時,“Sn_SR寄存器的值”會變成SOCK_CLOSED*/

#define SOCK_LAST_ACK??? 0x1D

/*如果“Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)”的值為0x1D,

SOCK_LAST_ACK表示。它是一個臨時狀態,表示“Socket n”在被動關閉狀態下,正在等待對“斷開連接請求(FIN packet)”做出回應的“FIN/ACK數據包”。如果“Socket n”成功接收到了“斷開連接請求(FIN packet)”做出回應的“FIN/ACK數據包”或觸發超時中斷,則 Sn_SR寄存器的值”會變成SOCK_CLOSED*/

地址重定義:

#define Sn_SR(N) (_W5500_IO_BASE_+(0x0003<< 8)+(WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0,用來訪問Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)

Socket n狀態寄存器(Socket n Status Register,簡寫Sn_SR)偏移地址為0x0003

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”*/

5)、Socket n源端口寄存器(Socket n Source Port Register,簡寫Sn_PORT)偏移地址為0x0004,可讀寫,復位值為0x0000;采用“大端存儲方式”。

寄存器地址

0x0004

0x0005

寄存器名稱

Sn_PORT0? (8位數值)

Sn_PORT1? (8位數值)

“Socketn源端口寄存器”保存的是“Socket n的端口”,屬于“本地端口”。

地址重定義:

#define Sn_PORT(N) (_W5500_IO_BASE_+(0x0004<<8)+(WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0,用來訪問Socket n源端口寄存器(Socket n Source Port Register)

Socket n源端口寄存器(Socket n Source Port Register)偏移地址為0x0004

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”*/

6)、Socket n的目的硬件地址寄存器(Socket n Destination Hardware Address Register,簡寫Sn_DHAR)偏移地址為0x0006,可讀寫,復位值為0xFFFFFFFFFF;采用“大端存儲方式”。

寄存器地址

0x0006

0x0007

0x0008

0x0009

0x000A

0x000B

寄存器名稱

Sn_DHAR0

Sn_DHAR1

Sn_DHAR2

Sn_DHAR3

Sn_DHAR4

Sn_DHAR5

在“UDP模式”中,當發送“SEND_MAC命令”時,“Socket n的目的硬件地址寄存器”保存的是“Socket ?n”要訪問的“MAC地址”。在“ARP過程”中,通過“CONNECT命令/SEND命令”獲取“目的硬件地址”。

地址重定義:

#define Sn_DHAR(N) (_W5500_IO_BASE_+(0x0006<< 8)+(WIZCHIP_SREG_BLOCK(N)<< 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的目的硬件地址寄存器”偏移地址為0x0006

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”*/

7)、Socket n的目的IP地址寄存器(Socket n Destination IP Address Register,簡寫Sn_DIPR)偏移地址為0x000C,可讀寫,復位值為0xFFFFFFFF;采用“大端存儲方式”。

寄存器地址

0x000C

0x000D

0x000E

0x000F

寄存器名稱

Sn_DIPR0

Sn_DIPR1

Sn_DIPR2

Sn_DIPR3

在“TCP客戶端模式”中,還沒有使用“CONNECT命令”之前,“Socket n的目的IP地址寄存器”保存的是“TCP 服務器”的IP地址。

在“TCP服務器模式”中,“Socket n的目的IP地址寄存器”保存的是“TCP客戶端”已成功地建立了連接的IP地址

在“UDP模式”中,“Socket n的目的IP地址寄存器”保存的是“對方端”的IP地址,它是通過“SEND命令”或“SEND_MAC命令”接收“UDP數據包”得到的。

地址重定義:

#define Sn_DIPR(N) (_W5500_IO_BASE_ + (0x000C << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的目的IP地址寄存器偏移地址為0x000C

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”*/

8)、Socket n的目的端口寄存器(Socket n Destination Port Register,簡寫Sn_DPORT)偏移地址為0x0010,可讀寫,復位值為0x0000;采用“大端存儲方式”。

寄存器地址

0x0010

0x0011

寄存器名稱

Sn_DPORT0

Sn_DPORT1

在“TCP客戶端模式”中,還沒有使用“CONNECT命令”之前,“Socket n的目的端口寄存器”保存的是“TCP 服務器的監聽端口”。

在“TCP服務器模式”中,“Socket n的目的端口寄存器”保存的是“TCP客戶端”已成功地建立了連接的端口數值

在“UDP模式”中,“Socket n的目的端口寄存器”保存的是“對方端”的端口數值,它是通過“SEND命令”或“SEND_MAC命令”接收“UDP數據包”得到的。

地址重定義:

#define Sn_DPORT(N) (_W5500_IO_BASE_ + (0x0010 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的目的端口寄存器偏移地址為0x0010

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

9)、Socket n的最大分段大小寄存器(Socket n Maximum Segment Size Register,簡寫Sn_MSSR)偏移地址為0x0012,可讀寫,復位值為0x0000;采用“大端存儲方式”。

寄存器地址

0x0012

0x0013

寄存器名稱

Sn_MSSR0

Sn_MSSR1

注意:MSS是“Maximum Segment Size”的縮寫,它指在TCP連接中,一個“TCP段”所能承載的最大數據量。當TCP工作在被動模式時,“Socket n的最大分段大小寄存器”顯示的是“對方端的設置的MSS”。

地址重定義:

#define Sn_MSSR(N) (_W5500_IO_BASE_ + (0x0012 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的最大分段大小寄存器”的偏移地址為0x0012

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

10)、Socket n的IP報文轉發優先級寄存器(Socket n IP TOS Register,簡寫Sn_TOS)是Sn_TOS寄存器,偏移地址為0x0015,可讀寫,復位值為0x00

TOS是“Type Of Service field in IP Header”的縮寫,IP報頭中的服務字段的類型。

地址重定義:

#define Sn_TOS(N) (_W5500_IO_BASE_ + (0x0015 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket nIP報文轉發優先級寄存器偏移地址為0x0015

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

11)、Socket n的TTL值寄存器(Socket n IP TTL Register,簡寫Sn_TTL)是Sn_TTL寄存器,偏移地址為0x0016,可讀寫,復位值為0x80

TTL是“Time To Live field in IP header”的縮寫。每個IP數據包在被轉發時,其“TTL值”就會被減一。一旦TTL值變為零,路由器會丟棄該數據包,并發送一個“ICMP Time Exceeded消息”回“源主機”,通知“源端數據包”已經超時無法到達目的地。

地址重定義:

#define Sn_TTL(N) (_W5500_IO_BASE_ + (0x0016 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket nTTL值寄存器(Socket n IP TTL Register,簡寫Sn_TTL)偏移地址為0x0016

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

12)、Socket n的接收緩沖區大小寄存器(Socket n Receive Buffer Size Register,簡寫Sn_RXBUF_SIZE)偏移地址為0x001E,可讀寫,復位值為0x02,即“Socket n”接收緩存的大小為2K字節。

用來指定“Socket n”接收緩存的大小。

W5500有一個“16KB的接收內存”用作“8個Socket接收緩存區”,可以通過 “Sn_RXBUF_SIZE寄存器”,偏重新分配“各個Socket接收緩存的大小”,但“8個Socket接收緩存區”的總內存不能超過16K。注意:Socket n接收緩存區大小”可以配置 1K2K4K8K16K字節。如果配置為其他大小,則 W5500不能正常的從對方主機接收數據

地址重定義:

#define Sn_RXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001E << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

“Socket n的接收緩沖區大小寄存器偏移地址為0x001E

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

13)、Socket n的發送緩沖區大小寄存器(Socket n Transmit Buffer Size Register,簡寫Sn_TXBUF_SIZE)偏移地址為0x001F,可讀寫,復位值為0x02,即“Socket n”發送緩存的大小為2K字節。

用來指定該Socket發送緩存的大小。

W5500有一個“16KB的發送內存”用作“8個Socket發送緩存區”,通過 “Sn_TXBUF_SIZE寄存器”,重新分配“各個Socket發送緩存的大小”,但“8個Socket發送緩存區”的總內存不能超過16K。注意:Socket n發送緩存區大小”可以配置為1K2K4K8K16K字節。如果配置為其他大小,則 W5500不能正常給對方主機發送數據

地址重定義:

#define Sn_TXBUF_SIZE(N)?? (_W5500_IO_BASE_ + (0x001F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

“Socket n的發送緩沖區大小寄存器偏移地址為0x001F

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

14)、Socket n的發送緩沖區剩余量大小寄存器(Socket n TX Free Size Register,簡寫Sn_TX_FSR)偏移地址為0x0020,可讀寫,復位值為0x0800,即“Socket n的發送緩沖區”有2K字節是沒有使用。采用“大端存儲方式”。

寄存器地址

0x0020

0x0021

寄存器名稱

高8位

低8位

“Socket n的發送緩沖區剩量余大小寄存器”用來指示“Socket n的發送緩沖區”的空閑區有多少個字節沒有被使用,意思是還可以寫入多少個字節。

地址重定義:

#define Sn_TX_FSR(N)? (_W5500_IO_BASE_ + (0x0020 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的發送緩沖區剩余量大小寄存器”偏移地址為0x0020

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

15)、Socket n的發送緩沖區讀指針寄存器(Socket n TX Read Pointer Register,簡寫Sn_TX_RD)偏移地址為0x0022,只讀,復位值為0x0000

寄存器地址

0x0022

0x0023

寄存器名稱

Sn_TX_RD0

Sn_TX_RD1

“Socket n的發送緩沖區讀指針寄存器”通過“OPEN命令”進行初始化。但是在“TCP連接”期間,它會被重新初始化。“Socket n的發送緩沖區讀指針寄存器”初始化之后,會根據“SEND命令”自增。

“SEND命令”傳輸的是“Socket n的發送緩沖區”中的數據,即“Sn_TX_RD所指向的地址”到“Sn_TX_WR所指向的地址”之間的數據。在傳輸完這部分數據之后,“SEND命令”會將“Sn_TX_RD寄存器”等于“Sn_TX_WR寄存器” 的值。

當“Sn_TX_RD寄存器”增加的值超出最大值0xFFFF,“Sn_TX_RD寄存器”會忽略進位,僅使用低16位的值。

地址重定義:

#define Sn_TX_RD(N)??????? (_W5500_IO_BASE_ + (0x0022 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的發送緩沖區讀指針寄存器”偏移地址為0x0022

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

18)、Socket n的發送緩沖區寫指針寄存器(Socket n TX Write Pointer Register,簡寫Sn_TX_WR)偏移地址為0x0024,可讀可寫,復位值為0x0000;采用“大端存儲方式”。

寄存器地址

0x0024

0x0025

寄存器名稱

Sn_TX_WR0

Sn_TX_WR1

“Sn_TX_WR寄存器”可以通過“OPEN命令”進行初始化。但是在“TCP連接”期間,它會被重新初始化。

“Socket n的發送緩沖區寫指針寄存器”的讀取和更新:

①讀取“Socket n的發送緩沖區”中將要保存“傳輸數據的首地址”。

②從“Socket n的發送緩沖區”對應的首地址開始,保存需要“傳輸的數據”;

③在保存完“傳輸數據”之后,將“Sn_TX_WR寄存器”的值增加到傳輸數據大小。如果增加后,超過最大值0xFFFF,“Sn_TX_WR寄存器”會自動忽略進位,并自動更新為低16位的值。

④通過使用“SEND命令”發送保存在“Socket n的發送緩沖區”中的數據。

地址重定義:

#define Sn_TX_WR(N)??????? (_W5500_IO_BASE_ + (0x0024 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的發送緩沖區寫指針寄存器”偏移地址為0x0024

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

17)、Socket n的接收緩沖區的接收量大小寄存器(Socket n RX Received Size Register,簡寫Sn_RX_RSR)偏移地址為0x0026,可讀可寫,復位值為0x0000;采用“大端存儲方式”。

寄存器地址

0x0026

0x0027

寄存器名稱

Sn_RX_RSR0

Sn_RX_RSR1

“Socket n的接收緩沖區的接收量大小寄存器”顯示了“Socket n的接收緩沖區”中已接收和保存的數據大小。Sn_RX_RSR的值不會超過“Sn_RXBUF_SIZE寄存器”大小,且計算的為“Socket n的接收緩沖區的寫指針(Sn_RX_WR)” 和“Socket n的的接收緩沖區的讀指針(Sn_RX_RD)”之間的空間大小。

地址重定義:

#define Sn_RX_RSR(N)?????? (_W5500_IO_BASE_ + (0x0026 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的接收緩沖區的接收量大小寄存器”偏移地址為0x0026

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

18)、Socket n的的接收緩沖區的讀指針寄存器(Socket n RX Read Pointer Register,簡寫Sn_RX_RD)偏移地址為0x0028,可讀可寫,復位值為0x0000;采用“大端存儲方式”。

寄存器地址

0x0028

0x0029

寄存器名稱

Sn_RX_RD0

Sn_RX_RD1

“Socket n的的接收緩沖區的讀指針寄存器”可以通過“OPEN命令”進行初始化。

“Socket n的的接收緩沖區的讀指針寄存器”讀取更新步驟:

①讀取保存在“Socket n的的接收緩沖區”中數據的首地址;

②從保存在“Socket n的的接收緩沖區”中數據的首地址開始讀取數據;

③在讀取完畢“接收數據”后,將“Socket n的的接收緩沖區的讀指針寄存器Sn_RX_RD” 的值更新為“所讀數據大小”。如果增加后的值 超過最大值 0xFFFF,“Socket n的的接收緩沖區的讀指針寄存器”將會忽略進位,只取低16位值。

④在接收到“RECV命令”后,將更新后的“Socket n的的接收緩沖區的讀指針寄存器Sn_RX_RD”值告知W5500。

地址重定義:

#define Sn_RX_RD(N)??????? (_W5500_IO_BASE_ + (0x0028 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的的接收緩沖區的讀指針寄存器”偏移地址為0x0028

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

19)、Socket n的接收緩沖區的寫指針寄存器(Socket n RX Write Pointer Register,簡寫Sn_RX_WR)偏移地址為0x002A,只讀,復位值為0x0000;采用“大端存儲方式”。

寄存器地址

0x002A

0x002B

寄存器名稱

Sn_RX_WR 0

Sn_RX_WR 1

“Socket n的接收緩沖區的寫指針寄存器”通過“OPEN命令”進行初始化。并且隨著數據接收自動增加。

如果“Socket n的接收緩沖區的寫指針寄存器Sn_RX_WR”的值增長到超過最大值 0xFFFF,將會自動忽略進位,并自動更新為低16位的值。

地址重定義:

#define Sn_RX_WR(N)??????? (_W5500_IO_BASE_ + (0x002A << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的接收緩沖區的寫指針寄存器”偏移地址為0x002A

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

20)、Socket n的中斷使能寄存器(Socket n Interrupt Mask Register,簡寫Sn_IMR)偏移地址為0x002C,可讀可寫,復位值為0xFF

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Reserved

Reserved

Reserved

SEND_OK

TIMEOUT

RECV

DISCON

CON

Socket n的中斷使能寄存器(Socket n Interrupt Mask Register,簡寫Sn_IMR)的bit4(SEND_OK)=1,使能“SEND命令”執行完成,產生SEND_OK中斷。

Socket n的中斷使能寄存器(Socket n Interrupt Mask Register,簡寫Sn_IMR)的bit3(TIMEOUT)=1,使能“ARP數據包或者TCP數據包”超時,產生TIMEOUT中斷。

Socket n的中斷使能寄存器(Socket n Interrupt Mask Register,簡寫Sn_IMR)的bit2(RECV)=1,使能接收到“對方的數據”,產生RECV中斷。

Socket n的中斷使能寄存器(Socket n Interrupt Mask Register,簡寫Sn_IMR)的bit1(DISCON)=1,使能接收到來自“對方的FIN或FIN/ACK包”,產生DISCON中斷。

Socket n的中斷使能寄存器(Socket n Interrupt Mask Register,簡寫Sn_IMR)的bit0(CON)=1,使能與對方建立連接成功,且Sn_SR寄存器變為“SOCK_ESTABLISHED”,產生CON中斷。

地址重定義:

#define Sn_IMR(N)????????? (_W5500_IO_BASE_ + (0x002C << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket n的中斷使能寄存器”偏移地址為0x002C

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

21)、Socket n的IP頭中的分片偏移量寄存器(Socket n Fragment Offset in IP header Register,簡寫Sn_FRAG)偏移地址為0x002D,可讀可寫,復位值為0x4000;采用“大端存儲方式”。

寄存器地址

0x002D

0x002E

寄存器名稱

Sn_FRAG0

Sn_FRAG1

Fragment Offset:分片偏移,用于標識分片在原始數據報文中的位置。

地址重定義:

#define Sn_FRAG(N)???????? (_W5500_IO_BASE_ + (0x002D << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

Socket nIP頭中的分片偏移量寄存器”偏移地址為0x002D

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

22)、保活定時器寄存器(Keep alive timer Register,簡寫Sn_KPALVTR)偏移地址為0x002F,可讀可寫,復位值為0x00

保活定時器寄存器也稱“Socket在線時間寄存器”,只用于“TCP模式”,時間單位是5秒。

“KA數據包”的條件:當“Sn_SR寄存器”的值為“SOCK_ESTABLISHED”時,W5500與“對方端”至少進行過一次收或發后,或者進行“KA數據包”傳輸。

如果Sn_KPALVTR > 0,W5500會在“一定時間周期”內自動傳輸“KA數據包”以檢查 TCP 的連接狀態(自動在線驗證)。

如果Sn_KPALVTR = 0,將不會啟動“自動在線驗證”。主機可以通過對“保活定時器寄存器(Keep alive timer Register,簡寫Sn_KPALVTR)”配置,發送“KA數據包”,執行“手動在線驗證”。在Sn_KPALVTR > 0時,W5500將會無視“手動在線驗證”。

地址重定義:

#define Sn_KPALVTR(N)????? (_W5500_IO_BASE_ + (0x002F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))

/*生成“W5500幀”的第1個字節,第2個字節和第3個字節的高5位值,3位為0

保活定時器寄存器偏移地址為0x002F

WIZCHIP_SREG_BLOCK(N)用來選擇“Socket n寄存器區”;*/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95074.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

酉矩陣(Unitary Matrix)和隨機矩陣

先討論酉矩陣&#xff08;Unitary Matrix&#xff09;的性質。1. 酉矩陣定義酉矩陣&#xff08;Unitary Matrix&#xff09;是復數域上的方陣&#xff0c;滿足以下條件&#xff1a;其中&#xff1a;是 的共軛轉置&#xff08;即 Hermitian 轉置&#xff0c; &#xff09;。是單…

「iOS」————單例與代理

iOS學習單例代理代理模式的原理代理的循環引用設計模式單例 優點&#xff1a; 全局訪問&#xff1a;單例模式確保一個類只有一個實例&#xff0c;并提供全局訪問點&#xff0c;方便在整個應用中共享數據或功能。節省資源&#xff1a;由于只創建一個實例&#xff0c;可以減少內…

Microsoft Dynamics AX 性能優化解決方案

一、方案背景Microsoft Dynamics AX 是功能強大的企業ERP系統&#xff0c;雖然Microsoft 已推出基于云的現代化 ERP 平臺 Dynamics 365 Finance and Operations&#xff0c;提供了更高的性能和持續更新&#xff0c;用來替代Dynamics AX。在考慮升級到Dynamics 365之前&#xff…

ARM保留的標準中斷處理程序入口和外設中斷處理程序入口介紹

在ARM架構中&#xff0c;中斷處理是一個關鍵機制&#xff0c;它允許CPU在執行主程序時能夠響應外部或內部的事件。對于ARM MCU&#xff08;微控制器單元&#xff09;而言&#xff0c;中斷處理程序入口通常分為兩類&#xff1a;ARM保留的標準中斷處理程序入口和外設中斷處理程序…

防火墻環境下的全網服務器數據自動化備份平臺搭建:基于 rsync 的完整實施指南

一、項目總覽 1.內容介紹 本文以 3 臺 CentOS 7.9 服務器&#xff08;Web 服務器、NFS 服務器、備份服務器&#xff09;為載體&#xff0c;詳解如何在全防火墻開啟的前提下&#xff0c;搭建一套自動化數據備份平臺&#xff1a;每日自動打包 Web 站點、NFS 共享數據及系統關鍵…

Spring之【Import】

目錄 Import注解 源碼分析 使用示例 ImportSelector 源碼分析 使用示例 DeferredImportSelector 源碼分析 使用示例 ImportBeanDefinitionRegistrar 源碼分析 使用示例 Import注解 源碼分析 處理組件類上的Import注解 將Import引入類對應的BeanDefinition對象添加…

RN項目環境搭建和使用-Mac版本(模擬器啟動不起來的排查)

ReactNative&#xff1a; https://github.com/facebook/react-native https://reactnative.cn/docs/getting-started &#xff08;可以先通讀一下這個&#xff09; 環境搭建 &#xff08;mac版&#xff09;https://juejin.cn/post/7404860612758765605 搭建之前確認版本&#x…

懸賞任務系統網站兼職賺錢小程序搭建地推抖音視頻任務拉新源碼功能詳解二開

功能詳解&#xff08;一&#xff09;登錄與注冊1、登錄&#xff1a;打開系統用戶端&#xff0c;輸入已注冊的手機號&#xff0c;若為首次登錄或忘記密碼&#xff0c;可通過 “找回密碼” 功能&#xff0c;按提示驗證身份后重置密碼登錄。 2、注冊&#xff1a;點擊 “注冊” 按鈕…

scikit-learn/sklearn學習|線性回歸解讀

【1】引言 前序學習進程中&#xff0c;對SVM相關的數學原理進行了探索和推導&#xff0c;相關文章鏈接包括且不限于&#xff1a; python學智能算法&#xff08;二十六&#xff09;|SVM-拉格朗日函數構造-CSDN博客 python學智能算法&#xff08;二十八&#xff09;|SVM-拉格朗…

音視頻學習(五十一):AAC編碼器

什么是AAC編碼器&#xff1f; 高級音頻編碼&#xff08;Advanced Audio Coding&#xff0c;簡稱AAC&#xff09; 是一種有損音頻壓縮技術&#xff0c;旨在作為MP3的下一代標準而開發。它的主要目標是在比MP3更低的比特率下提供更好的音質&#xff0c;同時具備更強的靈活性和功能…

10-netty基礎-手寫rpc-定義協議頭-02

netty系列文章&#xff1a; 01-netty基礎-socket02-netty基礎-java四種IO模型03-netty基礎-多路復用select、poll、epoll04-netty基礎-Reactor三種模型05-netty基礎-ByteBuf數據結構06-netty基礎-編碼解碼07-netty基礎-自定義編解碼器08-netty基礎-自定義序列化和反序列化09-n…

計算機畢設缺乏創新點?基于大數據的快手平臺用戶活躍度分析系統給你思路【程序開發+項目定制】

精彩專欄推薦訂閱&#xff1a;在 下方專欄&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主頁&#xff1a;計算機畢設木哥&#x1f525; &#x1f496; 文章目錄 一、項目介紹二…

01.【面試題】在SpringBoot中如何實現多數據源配置

文章目錄 1. 什么是多數據源 1.1 基本概念 1.2 傳統單數據源 vs 多數據源 單數據源架構 多數據源架構 2. 為什么需要多數據源 2.1 業務場景需求 2.2 技術優勢 3. 多數據源的實現方式 3.1 靜態多數據源 3.2 動態多數據源 4. 環境準備 4.1 創建SpringBoot項目 pom.xml依賴配置 4.…

redis主從模型與對象模型

redis淘汰策略 首先我們要明確這里說的淘汰策略是淘汰散列表中的key-value&#xff0c;而不是value中的各個數據結構 過期key中 volatile-lru 從設置了過期時間的鍵中&#xff0c;移除最近最少使用的鍵&#xff08;LRU算法&#xff09;。適合需要優先保留高頻訪問數據的場景…

快速搭建開源網頁編輯器(vue+TinyMCE)

文章目錄 Tiny MCE 安裝方法 1. 安裝node.js 2. 創建vue3項目 3. 安裝TinyMCE依賴并使用 (1)在component文件夾創建Editor.vue文件 (2)編輯App.vue文件 (3)運行項目 (4)獲取并設置API key (5)設置中文菜單 Tiny MCE 安裝方法 1. 安裝node.js 下載地址:https://nod…

ADK【4】內置前端調用流程

文章目錄說明ADK內置前端ADK內置前端開啟流程說明 本文學自賦范社區公開課&#xff0c;僅供學習和交流使用&#xff0c;不用作任何商業用途&#xff01; ADK內置前端 ADK作為最新一代Agent開發框架&#xff0c;不僅功能特性非常領先&#xff0c;而且還內置了非常多的工具&am…

LLMs之GPT-5:OpenAI 發布更智能、更快速、更有用的 AI 模型—內置思考能力,賦能人人專家級智能—技術突破、性能評估與安全保障全面解讀

LLMs之GPT-5&#xff1a;OpenAI 發布更智能、更快速、更有用的 AI 模型—內置思考能力&#xff0c;賦能人人專家級智能—技術突破、性能評估與安全保障全面解讀 導讀&#xff1a;2025年8月7日&#xff0c;OpenAI 發布了 GPT-5&#xff0c;這是他們目前最智能的 AI 系統。它在編…

Java 中操作 R 的全面指南

Java 中操作 R 的全面指南 引言 Java作為一種廣泛使用的編程語言,具有跨平臺、高性能、可擴展等特點。隨著大數據和機器學習的興起,Java在處理和分析復雜數據集方面發揮著越來越重要的作用。R語言,作為一種專門用于統計計算和圖形展示的語言,同樣在數據分析領域有著舉足輕…

數據結構——優先級隊列(PriorityQueue):一文解決 Top K 問題!

目錄 1.優先級隊列 2. 堆的概念 3. 堆的存儲方式 4. 堆的創建 4.1 向下調整 4.2 堆的創建 4.3 堆的插入 4.4 堆的刪除 5.用堆模擬實現優先級隊列 6.常用接口的介紹 6.1 PriorityQueue 的特性 6.2 PriorityQueue 的方法 7. Top K問題 1.優先級隊列 隊列是一種先進先…

C語言自定義類型深度解析:聯合體與枚舉

在C語言中&#xff0c;自定義類型為數據組織提供了極大的靈活性。除了常用的結構體&#xff0c;聯合體&#xff08;共用體&#xff09;和枚舉也是非常重要的自定義類型。本文將結合實例&#xff0c;詳細解析聯合體和枚舉的特性、用法及實際應用場景。 一、聯合體&#xff08;Un…