文章目录
一、创建云平台产品设备
使用串口助手测试传输过程

相关信息记录
二、FPGA仿真WIFI模块通信过程
仿真分析

c
//各个状态tx_data
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
uart_tx_data <= 8'd0;
end
else if((state==AT) && tx_count<8'd6 ) begin
uart_tx_data <= cmd_AT[47 - tx_count *8 -:8];
end
else if((state==CWMODE) && tx_count<8'd15 ) begin
uart_tx_data <= cmd_CWMODE[119 - tx_count *8 -:8];
end
else if((state==RST) && tx_count<8'd10 ) begin
uart_tx_data <= cmd_RST[79 - tx_count *8 -:8];
end
else if((state==CWJAP) && tx_count<8'd31 ) begin
uart_tx_data <= cmd_CWJAP[247 - tx_count *8 -:8];
end
else if((state==CWDHCP) && tx_count<8'd17 ) begin
uart_tx_data <= cmd_CWDHCP[135 - tx_count *8 -:8];
end
else if((state==MQTTUSERCFG) && tx_count<8'd172 ) begin
uart_tx_data <= cmd_MQTTUSERCFG[1375 - tx_count *8 -:8];
end
else if((state==MQTTCONN) && tx_count<8'd45 ) begin
uart_tx_data <= cmd_MQTTCONN[359 - tx_count *8 -:8];
end
else if((state==MQTTSUB) && tx_count<8'd67 ) begin
uart_tx_data <= cmd_MQTTSUB[535 - tx_count *8 -:8];
end
else if((state==MQTTPUB) && tx_count<8'd123 ) begin
uart_tx_data <= cmd_MQTTPUB[983 - tx_count *8 -:8];
end
else begin
uart_tx_data <= uart_tx_data;
end
end
c
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
state <= IDLE;
end
else begin
case(state)
IDLE:begin
state<=AT;
end
AT:begin//at test
if(tx_count==8'd6)begin
state <= WAK_AT;
end
else begin
state <= AT;
end
end
WAK_AT:begin
if(rx_count==8'd2)begin
state <= CWMODE;
end
else begin
state <= WAK_AT;
end
end
CWMODE:begin//set mode
if(tx_count==8'd15)begin
state <= WAK_CWMODE;
end
else begin
state <= CWMODE;
end
end
WAK_CWMODE:begin
if(rx_count==8'd2)begin
state <= RST;
end
else begin
state <= WAK_CWMODE;
end
end
RST:begin//at rst
if(tx_count==8'd10)begin
state <= WAK_RST;
end
else begin
state <= RST;
end
end
WAK_RST:begin
if(rx_count==8'd2)begin
state <= CWJAP;
end
else begin
state <= WAK_RST;
end
end
CWJAP:begin//at rst
if(tx_count==8'd31)begin
state <= WAK_CWJAP;
end
else begin
state <= CWJAP;
end
end
WAK_CWJAP:begin//at rst
if(rx_count==8'd2)begin
state <= CWDHCP;
end
else begin
state <= WAK_CWJAP;
end
end
CWDHCP:begin//at rst
if(tx_count==8'd17)begin
state <= WAK_CWDHCP;
end
else begin
state <= CWDHCP;
end
end
WAK_CWDHCP:begin//at rst
if(rx_count==8'd2)begin
state <= MQTTUSERCFG;
end
else begin
state <= WAK_CWDHCP;
end
end
MQTTUSERCFG:begin//at rst
if(tx_count==8'd172)begin
state <= WAK_MQTTUSERCFG;
end
else begin
state <= MQTTUSERCFG;
end
end
WAK_MQTTUSERCFG:begin//at rst
if(rx_count==8'd2)begin
state <= MQTTCONN;
end
else begin
state <= WAK_MQTTUSERCFG;
end
end
MQTTCONN:begin//at rst
if(tx_count==8'd45)begin
state <= WAK_MQTTCONN;
end
else begin
state <= MQTTCONN;
end
end
WAK_MQTTCONN:begin//at rst
if(rx_count==8'd2)begin
state <= MQTTSUB;
end
else begin
state <= WAK_MQTTCONN;
end
end
MQTTSUB:begin//at rst
if(tx_count==8'd67)begin
state <= WAK_MQTTSUB;
end
else begin
state <= MQTTSUB;
end
end
WAK_MQTTSUB:begin//at rst
if(rx_count==8'd2)begin
state <= MQTTPUB;
end
else begin
state <= WAK_MQTTSUB;
end
end
MQTTPUB:begin//at rst
if(tx_count==8'd123)begin
state <= WAK_MQTTPUB;
end
else begin
state <= MQTTPUB;
end
end
WAK_MQTTPUB:begin//at rst
if(rx_count==8'd2)begin
state <= IDLE;
end
else begin
state <= WAK_MQTTPUB;
end
end
default:state <= IDLE;
endcase
end
end
接收数据判断只是简单做了一下,因为是正确回应的话所有的指令最后都是OK。所以可以一直缓存16位数据,当持续时间大于串口接受结束标志之间的间隔后进行判断,如果最后接收到的缓存16位数据是"OK",则进入下一个状态即可,仿真只是检验一下过程,没做这一块。
按照第一部分设置的AT指令进行发送,主要就是一个状态机,一个是数据缓存发送。
2.上板
买的模块还没到,等到了再加上这部分内容。
总结
持续更新...