FPGA实现cameralink接口图像传输

这篇具有很好参考价值的文章主要介绍了FPGA实现cameralink接口图像传输。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 硬件芯片实现cameralink图像传输

常用的cameralink收发芯片有DS90CR287和288,287发送288接收。只需要向芯片提供像素时钟和cameralink协议中的28位数据信号就可以实现基本的图像数据传输非常方便。关于cameralink协议的常识详见http://t.csdn.cn/XtFud

cameralink输出,FPGA开发基础篇,接口篇,fpga开发,图像处理,人工智能,硬件架构,Powered by 金山文档

同样地,接收方可以直接接收28位数据还原位图像数据信号。

发送端代码:

示例是之前做的16位红外相机上使用cameralink发送接收模块,使用的是287、288芯片,base模式


/* Document info
document class : RES
module name    : CameraLink_Out
module purpose : video out
version        : V1.0
author         : mayidianzi
*/
///
`timescale 1ns / 1ps


module Clink(
    input I_img_frame,
    input I_img_line,
    input[15:0] I_img_data, 
    input  I_img_clk,
    output O_img_clk,
    output[27:0] O_tx_data
    );
    
/  parameter set  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  internal signal  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//wire S_data_vld       ;
//wire S_data_vld_1     ;
//wire S_img_clk        ;
//wire S_img_fram       ;
//wire S_img_line       ;
//wire[15:0] S_img_data ;
//reg[2:0] S_count_t    ;

assign O_img_clk = I_img_clk; 
//assign S_data_vld = (S_count_t==1) ? 1 : 0;
//assign S_data_vld_1 = S_data_vld & I_img_line;

wire[7:0] S_port_a,S_port_b,S_port_c;
assign  S_port_a = I_img_data[7:0];
assign  S_port_b = I_img_data[15:8];
assign  S_port_c = 8'h0000;

assign  O_tx_data[4:0]   =  S_port_a[4:0];
assign  O_tx_data[5]     =  S_port_a[7];
assign  O_tx_data[6]     =  S_port_a[5];          
assign  O_tx_data[9:7]   =  S_port_b[2:0];
assign  O_tx_data[11:10] =  S_port_b[7:6];
assign  O_tx_data[14:12] =  S_port_b[5:3];          
assign  O_tx_data[15]    =  S_port_c[0];
assign  O_tx_data[17:16] =  S_port_c[7:6];
assign  O_tx_data[22:18] =  S_port_c[5:1];
assign  O_tx_data[23]    =  0;             //spare
assign  O_tx_data[24]    =  I_img_line;    //LVAL,line valid                                 
assign  O_tx_data[25]    =  I_img_frame;    //FVAL,frame valid
assign  O_tx_data[26]    =  1;             //DVAL,data valid
assign  O_tx_data[27]    =  S_port_a[6];
      instance       \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 ila_0 ila_0_i(
   .clk(I_img_clk),
   .probe0(I_img_data),
   .probe1(I_img_line),
   .probe2(I_img_frame)
   );
    main programe    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\



endmodule

接收端代码


/* Document info
document class : RES
module name    : CameraLink_Out
module purpose : video out
version        : V1.0
author         : mayidianzi
*/
///
`timescale 1ns / 1ps


module Clink_B(
    input[27:0]            I_tx_data,    //
    input                I_reset,
    input                I_img_clk,
    output reg[15:0]    O_img_data, //S_sensor_data 
    output reg            O_img_frame, //S_sensor_FS 
    output reg            O_img_line //S_sensor_LINE 
    );
    
/  parameter set  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  internal signal  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//wire S_data_vld       ;
//wire S_data_vld_1     ;
//wire S_img_clk        ;
wire S_img_frame       ;
wire S_img_line       ;
wire[15:0] S_img_data ;
//reg[2:0] S_count_t    ;

//assign S_data_vld = (S_count_t==1) ? 1 : 0;
//assign S_data_vld_1 = S_data_vld & I_img_line;

wire[7:0] S_port_a,S_port_b,S_port_c;
assign  S_img_data[7:0]    =    S_port_a ; 
assign  S_img_data[15:8]=    S_port_b ; 

assign  S_port_a[4:0]    =     I_tx_data[4:0]    ;
assign  S_port_a[7]        =     I_tx_data[5]      ;
assign  S_port_a[5]          =     I_tx_data[6]      ;        
assign  S_port_b[2:0]    =     I_tx_data[9:7]    ;
assign  S_port_b[7:6]    =     I_tx_data[11:10]  ;
assign  S_port_b[5:3]    =     I_tx_data[14:12]  ;          
assign  S_port_c[0]        =     I_tx_data[15]     ;
assign  S_port_c[7:6]    =     I_tx_data[17:16]  ;
assign  S_port_c[5:1]    =     I_tx_data[22:18]  ;
assign  S_img_line       =     I_tx_data[24]     ; //LVAL,line valid                                 
assign  S_img_frame      =     I_tx_data[25]     ;  //FVAL,frame valid
assign  S_port_a[6]        =     I_tx_data[27]     ;
      instance       \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

 ila_4 ila_4_i(
   .clk(I_img_clk),
   .probe0(O_img_data),
   .probe1(O_img_line),
   .probe2(O_img_frame),
   .probe3(I_img_clk)
   );
    main programe    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

always@(posedge I_img_clk or posedge I_reset)
begin
    if(I_reset)    
        begin
            O_img_data    <= 0;
            O_img_frame    <= 0;
            O_img_line     <= 0;
        end    
    else 
        begin
            O_img_data    <= S_img_data;
            O_img_frame    <= S_img_frame;
            O_img_line     <= S_img_line;
        end
end


endmodule
  1. FPGA编写cameralink接口模块传输

如果不使用芯片可以用verilog写一个发送接收模块,按照标准时序将28位数通过4条差分线输出,这里需要注意4条数据线的同步时钟是像素同步时钟的7倍,像素时钟不可太高。硬件布线方面注意所有的差分线要做等长。若接收端发现接收数据和采样时钟不同步可通过时钟模块适当调整同步时钟的相位。以上为调试过程的经验。

发送端代码:

同样是以16位红外相机为例,Base模式

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/22 08:31:08
// Design Name: 
// Module Name: Clink
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module Clink(
  input I_336M_CLK,
  input I_reset,
  input[15:0] I_video_data,
  input I_frame_valid,
  input I_line_valid,
  output reg O_X0,
  output reg O_X1,
  output reg O_X2,
  output reg O_X3,
  output reg O_XCLK
  );
  
//
reg[7:0] S_cnt;
reg[1:0] S_cnt0;
reg[27:0] S_tx_data;
reg S_frame_valid, S_line_valid;
reg[15:0] S_video_data;
wire[7:0] S_port_a,S_port_b,S_port_c;
assign  S_port_a = S_video_data[7:0];
assign  S_port_b = S_video_data[15:8];
assign  S_port_c = 8'h0000;
//

/*ila_0 ila_0_i(
   .clk(I_336M_CLK),
   .probe0(O_XCLK),
   .probe1(S_line_valid),
   .probe2(S_frame_valid),
   .probe3(O_X0),
   .probe4(O_X1),
   .probe5(O_X2),
   .probe6(O_X3),
   .probe7(S_cnt),
   .probe8(S_video_data)
   );*/
//
always @(posedge I_336M_CLK or negedge I_reset)
begin
    if(!I_reset)
        begin
            S_video_data     <= 0;
            S_frame_valid     <= 0;
            S_line_valid     <= 0;
        end
    else
        begin
            S_video_data     <= I_video_data;
            S_frame_valid     <= I_frame_valid;
            S_line_valid    <= I_line_valid;
        end
end

always @(posedge I_336M_CLK or negedge I_reset)
begin
    if(!I_reset)
        S_tx_data <= 0;
    else if(S_cnt == 0 & S_cnt0 == 0)
        begin
            S_tx_data[4:0]   <=  S_port_a[4:0];
            S_tx_data[5]     <=  S_port_a[7];
            S_tx_data[6]     <=  S_port_a[5];          
            S_tx_data[9:7]   <=  S_port_b[2:0];
            S_tx_data[11:10] <=  S_port_b[7:6];
            S_tx_data[14:12] <=  S_port_b[5:3];          
            S_tx_data[15]    <=  S_port_c[0];
            S_tx_data[17:16] <=  S_port_c[7:6];
            S_tx_data[22:18] <=  S_port_c[5:1];
            S_tx_data[23]    <=  0;             //spare
            S_tx_data[24]    <=  S_line_valid;    //LVAL,line valid                                 
            S_tx_data[25]    <=  S_frame_valid;    //FVAL,frame valid
            S_tx_data[26]    <=  1;             //DVAL,data valid
            S_tx_data[27]    <=  S_port_a[6];
        end
end
  
always @(posedge I_336M_CLK or negedge I_reset)
begin
    if(!I_reset)
        begin
            S_cnt0     <= 0;
            S_cnt     <= 0;    
        end
      else
        begin
            if(S_cnt0 == 1 & S_cnt == 6)
                begin
                    S_cnt0     <= 0;
                    S_cnt     <= 0;             
                end
            else if(S_cnt0 == 1)
                begin
                    S_cnt     <= S_cnt + 1;    
                    S_cnt0     <= 0;
                end
            else
                S_cnt0 <= S_cnt0 + 1;
        end
end

always @ (posedge I_336M_CLK or negedge I_reset)
begin
      if(!I_reset)
        O_XCLK <= 0;
    else if(S_cnt0 == 1)
        begin
            if(S_cnt == 5)
                O_XCLK <= 1;
            if(S_cnt == 2)
                O_XCLK <= 0;
        end
end
  
  
always @ (posedge I_336M_CLK or negedge I_reset)
begin
      if(!I_reset)
        begin
            O_X0 <= 0;
            O_X1 <= 0;
            O_X2 <= 0;
            O_X3 <= 0;
        end
      else if(S_cnt0 == 1)
        begin
            case(S_cnt)
                8'd0:
                begin
                    O_X0 <= S_tx_data[7];
                    O_X1 <= S_tx_data[18];
                    O_X2 <= S_tx_data[26];
                    O_X3 <= S_tx_data[23];
                end
                8'd1:
                begin
                    O_X0 <= S_tx_data[6];
                    O_X1 <= S_tx_data[15];
                    O_X2 <= S_tx_data[25];
                    O_X3 <= S_tx_data[17];
                  end
                8'd2:
                begin
                    O_X0 <= S_tx_data[4];
                    O_X1 <= S_tx_data[14];
                    O_X2 <= S_tx_data[24];
                    O_X3 <= S_tx_data[16];
                  end
                8'd3:
                begin
                    O_X0 <= S_tx_data[3];
                    O_X1 <= S_tx_data[13];
                    O_X2 <= S_tx_data[22];
                    O_X3 <= S_tx_data[11];
                end 
                8'd4:
                begin
                    O_X0 <= S_tx_data[2];
                    O_X1 <= S_tx_data[12];
                    O_X2 <= S_tx_data[21];
                    O_X3 <= S_tx_data[10];
                end
                8'd5:
                begin
                    O_X0 <= S_tx_data[1];
                    O_X1 <= S_tx_data[9];
                    O_X2 <= S_tx_data[20];
                    O_X3 <= S_tx_data[5];
                end
                8'd6:
                begin
                    O_X0 <= S_tx_data[0];
                    O_X1 <= S_tx_data[8];
                    O_X2 <= S_tx_data[19];
                    O_X3 <= S_tx_data[27];
                end
                default
                begin
                    O_X0 <= 0;
                    O_X1 <= 0;
                    O_X2 <= 0;
                    O_X3 <= 0;
                end     
            endcase
        end
end
endmodule

接受端

代码中含有图像数据行帧头校验内容,自行忽略


/* Document info
document class : RES
module name    : CameraLink_Out
module purpose : video out
version        : V1.0
author         : mayidianzi
*/
///
`timescale 1ns / 1ps


module Cameralink_in(
    input I_CLINK_RxCLK, 
    input I_CLINK_RxCLKx7,
    input I_CLINK_RxCLKx7_n,
    input I_RESET,
    input I_X0,  
    input I_X1, 
    input I_X2, 
    input I_X3, 
    output O_img_clk,
    output O_img_frame,
    output reg O_img_line,
    output O_img_vblank,
    output O_img_hblank,
    output[15:0] O_img_data
    );
    
/  parameter set  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
reg [27:0] S_Rx_data;
reg [27:0] S_data, S_data_d0;
reg S_RxCLK_d0, S_RxCLK_d1, S_RxCLK_d2;
wire [15:0] S_img_data;
wire S_img_line, S_img_frame;

reg[15:0] S_imgdata_d0, S_imgdata_d1, S_imgdata_d2, S_imgdata_d3, S_cnt;
reg        S_img_frame_d0, S_img_frame_d1, S_img_frame_d2, S_img_frame_d3, S_false;
reg[3:0]    S_state;
parameter    C_idle = 0,
            C_valid = 1;
  internal signal  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ila_4 ila_4_i(
    .clk (I_CLINK_RxCLK),
    .probe0(O_img_frame),
    .probe1(O_img_line),
    .probe2(S_RxCLK_d1),
    .probe3(S_RxCLK_d2),
    .probe4(O_img_data),
    .probe5(I_X0),
    .probe6(I_X1),
    .probe7(I_X2),
    .probe8(S_false),
    .probe9(S_Rx_data),
    .probe10(S_img_data)
    );

  internal signal  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
assign O_img_vblank = ~O_img_frame;
assign O_img_hblank = O_img_frame & (~O_img_line);
wire[7:0] S_port_a, S_port_b, S_port_c;
assign  S_img_data[7:0] = S_port_a;
assign  S_img_data[15:8] = S_port_b;

assign  S_port_a[4:0] = S_data_d0[4:0];    
assign  S_port_a[7]   = S_data_d0[5];      
assign  S_port_a[5]   = S_data_d0[6];              
assign  S_port_b[2:0] = S_data_d0[9:7];    
assign  S_port_b[7:6] = S_data_d0[11:10];  
assign  S_port_b[5:3] = S_data_d0[14:12];            
//assign  S_port_c[0]   = S_data[15];     
//assign  S_port_c[7:6] = S_data[17:16];  
//assign  S_port_c[5:1] = S_data[22:18];  
assign  S_img_line    = S_data_d0[24];      //LVAL,line valid                                 
assign  S_img_frame   = S_data_d0[25];      //FVAL,frame valid
assign  S_port_a[6]   = S_data_d0[27];    
assign  O_img_frame = S_img_frame_d3;
//assign  O_img_line = S_img_line;
assign  O_img_data = S_imgdata_d3;
//assign  O_img_clk = S_RxCLK_d2;
assign    O_img_clk = I_CLINK_RxCLK;
  internal signal  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

always @(posedge I_CLINK_RxCLKx7 or posedge I_RESET)//
begin
  if(I_RESET)
    begin
      S_RxCLK_d0 <= 0;
      S_RxCLK_d1 <= 0;
      S_RxCLK_d2 <= 0;
    end
  else
   begin
    S_RxCLK_d0 <= I_CLINK_RxCLK;
    S_RxCLK_d1 <= S_RxCLK_d0;
    S_RxCLK_d2 <= S_RxCLK_d1;
   end
end

always @(posedge S_RxCLK_d2 or posedge I_RESET)// 
begin
  if(I_RESET)
    S_data <= 0;
  else
    S_data[27:0] <= {S_Rx_data[21:18],S_Rx_data[27],S_Rx_data[17:13],S_Rx_data[26:25],
                     S_Rx_data[12:9],S_Rx_data[24:23],S_Rx_data[8:5],S_Rx_data[22],S_Rx_data[4:0]};
end

always @(posedge I_CLINK_RxCLKx7_n or posedge I_RESET)//
begin
  if(I_RESET)
    S_Rx_data <= 0;
  else
    begin
      S_Rx_data[27:21] <= {S_Rx_data[26:21],I_X3};
      S_Rx_data[20:14] <= {S_Rx_data[19:14],I_X2};
      S_Rx_data[13:7]  <= {S_Rx_data[12:7],I_X1};
      S_Rx_data[6:0]   <= {S_Rx_data[5:0],I_X0};
    end
end

always @(posedge I_CLINK_RxCLK or posedge I_RESET)// 
begin
  if(I_RESET)
    S_data_d0 <= 0;
  else
    S_data_d0[27:0] <= S_data;
end

always @(posedge I_CLINK_RxCLK or posedge I_RESET)// 
begin
  if(I_RESET)
    begin
        S_imgdata_d0 <= 0;
        S_imgdata_d1 <= 0;
        S_imgdata_d2 <= 0;
        S_imgdata_d3 <= 0;
        S_img_frame_d0 <= 0;
        S_img_frame_d1 <= 0;
        S_img_frame_d2 <= 0;
        S_img_frame_d3 <= 0;
    end
  else
    begin
        S_imgdata_d0 <= S_img_data;
        S_imgdata_d1 <= S_imgdata_d0;
        S_imgdata_d2 <= S_imgdata_d1;
        S_imgdata_d3 <= S_imgdata_d2;
        S_img_frame_d0 <= S_img_frame;
        S_img_frame_d1 <= S_img_frame_d0;
        S_img_frame_d2 <= S_img_frame_d1;
        S_img_frame_d3 <= S_img_frame_d2;
    end
end

always @(posedge I_CLINK_RxCLK or posedge I_RESET)// 
begin
  if(I_RESET)
    begin
        S_state <= C_idle;
        S_cnt <= 0;
    end
  else
    begin
        case(S_state)
            C_idle:
                if(S_imgdata_d0 == 16'haa || S_imgdata_d1 == 16'hbb)
                    begin
                        S_state <= C_valid;
                        S_cnt <= 0;
                    end
                else
                    S_cnt <= S_cnt + 1;
            C_valid:
                if(S_cnt >= 645)
                    begin
                        S_cnt <= 0;
                        S_state <= C_idle;
                    end
                else
                    S_cnt <= S_cnt + 1;
        endcase
    end
end

always @(posedge I_CLINK_RxCLK or posedge I_RESET)// 
begin
  if(I_RESET)
    begin
        O_img_line <= 0;
        S_false <= 0;
    end
  else
    begin
        case(S_state)
            C_idle:
                begin
                    O_img_line <= 0;
                    if(S_cnt > 2500)
                        S_false <= 1;
                end
            C_valid:
                O_img_line <= 1;
        endcase
    end
end

endmodule

之前的领导脑子不好,天天催,代码写的很随意,将就看吧。

写的很累,给个关注可以不。文章来源地址https://www.toymoban.com/news/detail-531391.html

到了这里,关于FPGA实现cameralink接口图像传输的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA高端项目:图像缩放+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

    FPGA高端项目:图像缩放+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持 没玩过图像处理、GT高速接口、UDP网络通信,都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做

    2024年02月05日
    浏览(44)
  • FPGA 图像缩放 千兆网 UDP 网络视频传输,基于B50610 PHY实现,提供工程和QT上位机源码加技术支持

    没玩过UDP协议栈都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。UDP协议栈在实际项目中应用广泛,特别是在医疗和军工行业;本文使用Xilinx的Kintex7 FPGA基于B50610网络PHY芯片实现千兆网UDP视频传输(视频缩放后再传输),视频源有两种,分别对应开

    2024年02月07日
    浏览(33)
  • FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持

    没玩过UDP协议栈都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。UDP协议栈在实际项目中应用广泛,特别是在医疗和军工行业;本文使用Xilinx的Artix7 FPGA基于RTL8211 网络PHY芯片实现千兆网UDP视频传输(视频缩放后再传输),视频源有两种,分别对应

    2024年02月07日
    浏览(32)
  • FPGA 图像缩放 1G/2.5G Ethernet PCS/PMA or SGMII实现 UDP 网络视频传输,提供工程和QT上位机源码加技术支持

    没玩过UDP协议栈都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用Xilinx的Artix7 FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII实现千兆网UDP视频传输(视频缩放后再传输),视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用板载的

    2024年02月08日
    浏览(31)
  • Matlab Unity图像传输,实现Matlab与Unity之间通信

    using System; using System.Net.Sockets; using System.Text; using System.Collections; using System.Collections.Generic; using System.Threading; using UnityEngine; using System.Net; using System.IO; using System.Globalization; public class Server : MonoBehaviour {     //General Init     private ListServerClient clients;     private Listint disconnectInde

    2024年02月09日
    浏览(25)
  • 【ROS】基于WIFI网络实现图像消息跨机实时传输

    研究机器人目标检测算法的时候,常常需要把推理图像实时展示出来,以供观摩。而ROS1提供的跨机通信方法,要么是配置单Master,要么是配置多Master;一方面配置麻烦,另一方面传输效率低下,特别是在无线网络环境下,那叫一个鸡肋,仿佛我只需要喝一杯水,他却把整个太

    2024年02月10日
    浏览(30)
  • 5. QT环境下使用OPenCV(基于TCP实现摄像头图像数据的多线程传输)

    1. 说明 通常情况下对于图像数据的采集可以放在后端进行,采集到的图像数据如果有需要可以通过通信将数据传输到前端进行显示,这其中需要使用到TCP数据传输协议和QT下的多线程开发技术。 QT当中主线程一般是界面层次的,在主线程中执行耗时较长的数据操作,会引起界

    2024年02月11日
    浏览(46)
  • 基于OFDM的水下图像传输通信系统matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 matlab2022a        基于OFDM的水下图像传输通信系统是一种用于在水下环境中传输图像数据的通信系统。它采用了OFDM(Orthogonal Frequency Division Multiplexing)技术,这种技术在水下

    2024年02月10日
    浏览(27)
  • python socket 传输opencv读取的图像

    将ros机器人摄像头捕捉的画面在上位机实时显示,需要用到socket网络编程,提供了TCP和UDP两种方式 TCP服务器端代码: 创建TCP套接字 : s = socket(AF_INET, SOCK_STREAM) 创建了一个TCP套接字。 SOCK_STREAM 表示这是一个TCP套接字,而不是UDP的 SOCK_DGRAM 。 绑定地址 : s.bind(addr) 将套接字绑定到

    2024年02月06日
    浏览(32)
  • 综合布线系统中采用双绞线的原因以及双绞线传输图像的优点

    众所周知,在综合布线工程中双绞线能在很多地方应用来传输信号信息等,比如在工业控制需要中和干扰较大的场所以及远距离传输中都有使用,应用广泛的局域网也是使用了双绞线。之所以能在那么多的地方应用是因为其具有:价格低廉、节省空间、布线容易、传输距离远

    2024年02月07日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包