á€áá®áá®ááá¯ááœáẠááŒááá¬ážáááº- GPIO áá»áááºáááºáááááá¬ááŸáá áºááá·áº HDMI áá±á¬áºáá®áá¬áá áºáá¯ááŸáá·áº áá»áááºáááºáá¬ážááá·áº FPGA Mars Rover3rpi (Cyclone IV) áá¯ááºá¡á¬áž áá»áááºáááºáá¬ážááá·áº Raspberry Pi2 áá¯ááºáá áºáá¯á áá¯ááááá±á¬áºáá®áá¬á¡á¬áž áá¯á¶ááŸáẠRaspberry Pi3 HDMI áá»áááºáááºáááááá¬ááŸáá áºááá·áº áá»áááºáááºáá¬ážáááºá áááºážááẠdual monitor á áá áºáá²á·ááá¯á·á¡áá¯ááºáá¯ááºáááºá
á¡á²áá«ááᯠáááºááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááá²ááá¯áá¬ááᯠáá±á¬ááºáá
áºáá¯ááŒá±á¬ááŒáá«áááºá
áá°ááŒáá¯ááºáá»á¬ážáá±á¬ Raspberry Pi3 áá¯ááºááœáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ ááá¯ážáá»á²á·áá¯ááºáá»á¬áž- á¡á¬áá¯á¶áá¶áááááá¬áá»á¬ážá LED áá»á¬ážá stepper motor driver áá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážá áœá¬ááᯠáááºáá»áááºáááºááá¯ááºááá·áº GPIO áá»áááºáááºáááááá¬áá áºáá¯áá«ááŸááááºá connector áá±á«áºááŸá pin áá áºáá¯á á®á áá®ážááŒá¬ážáá¯ááºáá±á¬ááºáá»ááºááẠport configuration áá±á«áºááœááºáá°áááºáááºá GPIO ALT2 ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááẠááá·áºá¡á¬áž áá»áááºáááºáááááá¬á¡á¬áž DPI á¡ááºáá¬áá±á·á áºáá¯ááºá Display Parallel Interface ááá¯á· ááŒá±á¬ááºážááá¯ááºá á±áá«áááºá DPI ááŸáá áºááá·áº VGA áá±á¬áºáá®áá¬áá»á¬ážááᯠáá»áááºáááºáááºá¡ááœáẠááá¯ážáá»á²á·áá¯ááºáá»á¬ážááŸááááºá ááá¯á·áá±á¬áº ááááŠážá áœá¬á VGA áá±á¬áºáá®áá¬áá»á¬ážááẠHDMI áá²á·ááá¯á· áá¬áááºááá¯ááºáá±á¬á·áá²á áá¯áááá¡áá»ááºááŸá¬á áá áºáá»á áºáááºá¡ááºáá¬áááºááẠanalog ááẠááá¯áá±á¬ááºážáá¬áááºá ááá¯á·á¡ááŒááºá ááá¯áá²á·ááá¯á·áá±á¬ VGA ááá¯ážáá»á²á·áááºáá»á¬ážááŸá DAC ááᯠá¡áá»á¬ážá¡á¬ážááŒáá·áº R-2-R ááŒáá¯ážáá»á¬ážáá¯á¶á á¶ááŒáá·áº ááŒá¯áá¯ááºáá¬ážááŒá®áž á¡áá±á¬ááºáá áºáá¯áá»áŸáẠ6 bits ááẠáááá¯áá«á
ALT2 áá¯ááºááœáẠGPIO áá»áááºáááºáááááá¬á áááºáá¶áá«ááºáá»á¬ážááẠá¡á±á¬ááºáá«á¡ááá¯ááºáž á¡áááá¹áá¬ááºááŸááááºá
á€áá±áá¬ááœáẠáá»áœááºá¯ááºááẠáá»áááºáááºáááááá¬á RGB pins áá»á¬ážááᯠá¡áá®á á¡á
áááºážááŸáá·áº á¡ááŒá¬ááá¯á·ááᯠá¡áá®ážáá®áž á¡áá±á¬ááºááŒááºáá¬ážáááºá á¡ááŒá¬ážá¡áá±ážááŒá®ážáá±á¬á¡áá»ááºááŒááŸá¯áá»á¬ážááŸá¬ V-SYNC ááŸáá·áº H-SYNC sweep sync signals áá»á¬ážá¡ááŒáẠCLK ááŒá
áºáááºá CLK áá¬áá®ááŒáááºááŸá¯ááºážááẠáá»áááºáááºáááááá¬ááá¯á· áá
áºáááºáááºááá¯ážáá»á¬ážááᯠáá¯ááºáá±ážááá·áº ááŒáááºááŸá¯ááºážááŒá
áºááŒá®áž ááœá±ážáá»ááºáá¬ážááá·áº áá®áá®ááá¯áá¯ááºáá±á«áºááœáẠáá°áááºáááºá
áá áºáá»á áºááẠHDMI áá±á¬áºáá®áá¬áá áºáá¯á¶ážááᯠáá»áááºáááºáááºá áááºááẠDPI á¡ááºáá¬áá±á·á áºá¡áá»ááºááŒááŸá¯áá»á¬ážááᯠáááºážáá°áᬠáááºážááá¯á·á¡á¬áž HDMI á¡áá»ááºááŒááŸá¯áá»á¬ážá¡ááŒá ẠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááá·áº FPGA áá¯ááºááá¯áááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºááá¯ááºáááºá ááœááºáá¬ááá·áºá¡ááá¯ááºáž Mars Rover2rpi áá¯ááºááẠá€áááºááœááºáá»ááºá¡ááœáẠááá·áºáá»á±á¬áºáááºá á¡ááŸááºááŸá¬á á¡áá°ážá¡áááºáá¬ááŸáááá·áº á€áá¯ááºááŒá¬ážááᯠáá»áááºáááºáááºá¡ááœáẠá¡áááááœá±ážáá»ááºááŸá¯ááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá áºáááº-
á€áá¯ááºá¡á¬áž GPIO á¡áá±á«ááºáá»á¬áž á¡áá±á¡ááœáẠááá¯ážááŒáŸáá·áºáááºááŸáá·áº Raspberry ááŸáá·áº áá±á¬ááºááẠá¡áá¶áá
á¹á
ááºážáá»á¬ážááᯠáá»áááºáááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá áá
áºáá»áááºáááºážááŸá¬áááºá á€áá»áááºáááºááŸá¯áá«ááŸááá±á¬ GPIO á¡áá»ááºááŒááŸá¯ 4 áá¯ááᯠJTAG á¡áá»ááºááŒááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áº ááŒáá·áºááŒá°ážááŸá¯á០áááá¯ááááºááẠFPGA firmware ááᯠFPGA ááá¯á· áááºááá¯ááºá
á±áááºá ááá¯á·á¡ááœááºááŒá±á¬áá·áºá ááá¯ááá¯á·áá±á¬ áá¯á¶ááŸááºáá»áááºáááºááŸá¯ááẠáá»áœááºá¯ááºááŸáá·áº áááá¯ááºáá®áá«á 4 DPI á¡áá»ááºááŒááŸá¯áá»á¬áž ááœááºááœá¬ážáá«áááºá áá¶áá±á¬ááºážá
áœá¬ááŒáá·áºá áá¯ááºáá±á«áºááŸá á¡ááá¯áá®ážáá»á¬ážááœáẠRaspberry ááŸáá·áºááá¯ááºáááºáá±á¬ pinout áá
áºáá¯ááŸááááºá áá¯ááºááŒá¬ážááᯠáá áá®ááá® ááŸáá·áºááá¯ááºááŒá®áž áááºážááᯠáá»áœááºá¯ááºá Raspberry ááŸáá·áº áá»áááºáááºááá¯ááºá
á±áááºá
áá¯ááºáá«áááºá áááºááẠááŒááºá JTAG áááá¯ááááºáá¬ááᯠá¡áá¯á¶ážááŒá¯ááááá·áºáááºá ááá¯á·áá±á¬áº áááºážááẠááŒá¿áá¬ááá¯ááºáá«á
ááŒá¿áá¬áá±ážáá áºáá¯ááŸááá«áá±ážáááºá FPGA áááºáá¶áá«ááºááá¯ááºážááᯠáá¬áá®ááá·áºááœááºážááŸá¯á¡ááŒá Ạá¡áá¯á¶ážáááŒá¯ááá¯ááºáá«á á€áááºááœááºáá»ááºá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ áá®ážááá·áºáááºá¡áááºážáááºáá¬ááŸááá«áááºá ááá¯á·ááŒá±á¬áá·áº GPIO_0 CLK á¡áá»ááºááŒááŸá¯ááẠFPGA clock input á¡ááŒá áºáá¯á¶ážááá¯ááºááá·áº FPGA input ááá¯á·ááá±á¬ááºááŸáááŒá±á¬ááºáž á€áá±áá¬ááœáẠáá±á«áºááœááºáá²á·áá«áááºá áá®ááá¯áá«áá²á ááá¯á·á áºáá áºáá¯ááᯠááá«áá±á«áºáááºááá¯ááºáááºá áá»áœááºá¯ááºááẠáá¯ááºá GPIO_0 ááŸáá·áº KEY[1] á¡áá»ááºááŒááŸá¯ááᯠáá»áááºáááºáááº-
á¡áᯠFPGA ááá±á¬áá»ááºá¡ááŒá±á¬ááºáž áááºážáááºážááŒá±á¬ááŒáááºá HDMI á¡áá»ááºááŒááŸá¯áá»á¬áž ááœá²á·á
ááºážáá¬ááœáẠá¡áááá¡áááºá¡áá²ááŸá¬ ááŒáááºááŸá¯ááºážáá»á¬áž á¡ááœááºááŒáá·áºáá¬ážáááºá HDMI connector á pinout ááá¯ááŒáá·áºáá«á RGB á¡áá»ááºááŒááŸá¯áá»á¬ážááẠááá¯á¡áá« á¡ááŸááºá
ááºááœá²ááŒá¬ážááá·áºá¡áá»ááºááŒáá»á¬ážááŒá
áºááŒá±á¬ááºáž áááºááœá±á·ááŒááºááá¯ááºáááº-
ááœá²ááŒá¬ážáá±á¬á¡áá»ááºááŒá
áá
áºááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠáá®áá¬ááá¯ááºážááŸá áá¯á¶áá¯ááºáá°áá¶áá¶áá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážááá¯ááºá
á±áá«áááºá á€ááá
á¹á
ááœááºá á¡áá±á¬ááºá¡áá»ááºááŒááŸá¯áá
áºáá¯á
á®ááá°áááºážááŸá
áºáá
áºáá¯ááºááᯠ10-bit TMDS (á¡ááœááºáá°ážááŒá±á¬ááºážááŸá¯-á¡áááá·áºáá¯á¶ážá¡áá»ááºááŒááŸá¯) á¡ááŒá
áºááá¯á·ááŒá±á¬ááºážáááºá áááºážááẠá¡áá»ááºááŒááŸá¯á០DC á¡á
áááºá¡ááá¯ááºážááᯠáááºááŸá¬ážáááºááŸáá·áº differential ááá¯ááºážááœáẠá¡áá»ááºááŒááŒá±á¬ááºážááŒááºážááᯠáá»áŸá±á¬á·áá»ááẠá¡áá°ážáá¯ááºáá¶áá«ááºáááºážáááºážááŒá
áºáááºá á¡ááŸááºá
ááºáá»ááºážáá±á«áºááœáẠá¡áá±á¬ááºáá
áºááá¯ááºááᯠáá¯ááºááœáŸáá·áºááẠááᯠ10 bits ááŸááááºááŒá
áºáá±á¬ááŒá±á¬áá·áºá áá¶áá«ááºá
ááºá¡ááá¯áẠáá¬áá®áá¡ááŒáááºáá±ááẠpixels á áá¬áá®ááŒáááºááŸá¯ááºážááẠ10 á ááá¯ááá¯ááŒáá·áºáá¬ážááááºááŒá
áºáá«áááºá á¥ááᬠáá®áá®ááá¯áá¯áẠ1280x720 60Hz ááá¯áá°áá«áá á€áá¯ááºá pixel frequency ááẠ74,25MHz ááŒá
áºáááºá á¡ááŸááºá
ááºááẠ742,5 MHz ááŒá
áºááá·áºáááºá
ááá¬ážááá¯ážáá» FPGA áá»á¬ážááẠáá±áá°áá»á¡á¬ážááŒáá·áº áááºážááᯠáá áœááºážáá±á¬ááºááá¯ááºáá«á ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·áá¶áá±á¬ááºážá á±áááºá FPGA áá»á¬ážááœáẠDDIO áááºáá»á¬ážáá«ááŸááááºá áááºážááá¯á·ááẠááááºá¡ááá¯ááºážáááºá 2-to-1 á¡ááŸááºá ááºáá»á¬ážááŒá áºááá·áº áá±á¬ááºáá»ááºáá»ááŸá¯áá»á¬ážááŒá áºáááºá ááá¯ááá¯áááºááŸá¬á áááºážááá¯á·ááẠáá¬áá®ááŒáááºááŸá¯ááºážáá»á¬áž ááŒáá·áºáááºááŒááºážááŸáá·áº áá»áááºážááŒááºážáá áºáá»áŸá±á¬ááºááœáẠáá áºááŸá áºáá¯ááᯠáááºááá¯ááºáá¯ááºáá±ážááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬ FPGA ááá±á¬áá»ááºááœáẠáááºááẠ740 MHz ááá¯ááºáá² 370 MHz ááᯠá¡áá¯á¶ážáááŒá¯ááá¯ááºáá±á¬áºáááºáž FPGA ááŸá DDIO á¡ááœááºááŒááºá ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºáááºá á€ááœáẠ370 MHz ááẠáááá¯ááºáá±á¬ ááŒáááºááŸá¯ááºážááŒá áºáá±ááŒá®ááŒá áºáááºá áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá 1280Ã720 áá¯ááºááẠááá·áºáááºáá»ááºááŒá áºáááºá Rover2rpi áá¯ááºáá±á«áºááœáẠááá·áºááœááºážáá¬ážáá±á¬ áá»áœááºá¯ááºááá¯á·á FPGA Cyclone IV ááœáẠááá¯ááá¯ááŒáá·áºáá¬ážáá±á¬ resolution ááᯠááááŸáááá¯ááºáá«á
ááá¯á·ááŒá±á¬áá·áºá ááá±á¬áá»ááºááœááºá ááá·áºááœááºážááá·áº pixel frequency CLK á¡á¬áž 5 ááŒáá·áº ááŒáŸá±á¬ááºáá¬ážááá·áº PLL ááá¯á· ááŒáá·áºááœááºážáááºá á€ááŒáááºááŸá¯ááºážááœáẠR, G, B bytes á¡á¬áž áá áºá¡ááœá²áá»á¬ážá¡ááŒá áºááá¯á· ááŒá±á¬ááºážáááºá áááºážááẠTMDS áá¯ááºááŒá±á¬ááºážáááááᬠáá¯ááºáá±á¬ááºáááºá Verilog HDL ááŸá á¡áááºážá¡ááŒá áºáá¯ááºááẠá€áá²á·ááá¯á· ááŒá áºáááº-
module hdmi(
input wire pixclk, // 74MHz
input wire clk_TMDS2, // 370MHz
input wire hsync,
input wire vsync,
input wire active,
input wire [7:0]red,
input wire [7:0]green,
input wire [7:0]blue,
output wire TMDS_bh,
output wire TMDS_bl,
output wire TMDS_gh,
output wire TMDS_gl,
output wire TMDS_rh,
output wire TMDS_rl
);
wire [9:0] TMDS_red, TMDS_green, TMDS_blue;
TMDS_encoder encode_R(.clk(pixclk), .VD(red ), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_red));
TMDS_encoder encode_G(.clk(pixclk), .VD(green), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_green));
TMDS_encoder encode_B(.clk(pixclk), .VD(blue ), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_blue));
reg [2:0] TMDS_mod5=0; // modulus 5 counter
reg [4:0] TMDS_shift_bh=0, TMDS_shift_bl=0;
reg [4:0] TMDS_shift_gh=0, TMDS_shift_gl=0;
reg [4:0] TMDS_shift_rh=0, TMDS_shift_rl=0;
wire [4:0] TMDS_blue_l = {TMDS_blue[9],TMDS_blue[7],TMDS_blue[5],TMDS_blue[3],TMDS_blue[1]};
wire [4:0] TMDS_blue_h = {TMDS_blue[8],TMDS_blue[6],TMDS_blue[4],TMDS_blue[2],TMDS_blue[0]};
wire [4:0] TMDS_green_l = {TMDS_green[9],TMDS_green[7],TMDS_green[5],TMDS_green[3],TMDS_green[1]};
wire [4:0] TMDS_green_h = {TMDS_green[8],TMDS_green[6],TMDS_green[4],TMDS_green[2],TMDS_green[0]};
wire [4:0] TMDS_red_l = {TMDS_red[9],TMDS_red[7],TMDS_red[5],TMDS_red[3],TMDS_red[1]};
wire [4:0] TMDS_red_h = {TMDS_red[8],TMDS_red[6],TMDS_red[4],TMDS_red[2],TMDS_red[0]};
always @(posedge clk_TMDS2)
begin
TMDS_shift_bh <= TMDS_mod5[2] ? TMDS_blue_h : TMDS_shift_bh [4:1];
TMDS_shift_bl <= TMDS_mod5[2] ? TMDS_blue_l : TMDS_shift_bl [4:1];
TMDS_shift_gh <= TMDS_mod5[2] ? TMDS_green_h : TMDS_shift_gh [4:1];
TMDS_shift_gl <= TMDS_mod5[2] ? TMDS_green_l : TMDS_shift_gl [4:1];
TMDS_shift_rh <= TMDS_mod5[2] ? TMDS_red_h : TMDS_shift_rh [4:1];
TMDS_shift_rl <= TMDS_mod5[2] ? TMDS_red_l : TMDS_shift_rl [4:1];
TMDS_mod5 <= (TMDS_mod5[2]) ? 3'd0 : TMDS_mod5+3'd1;
end
assign TMDS_bh = TMDS_shift_bh[0];
assign TMDS_bl = TMDS_shift_bl[0];
assign TMDS_gh = TMDS_shift_gh[0];
assign TMDS_gl = TMDS_shift_gl[0];
assign TMDS_rh = TMDS_shift_rh[0];
assign TMDS_rl = TMDS_shift_rl[0];
endmodule
module TMDS_encoder(
input clk,
input [7:0] VD, // video data (red, green or blue)
input [1:0] CD, // control data
input VDE, // video data enable, to choose between CD (when VDE=0) and VD (when VDE=1)
output reg [9:0] TMDS = 0
);
wire [3:0] Nb1s = VD[0] + VD[1] + VD[2] + VD[3] + VD[4] + VD[5] + VD[6] + VD[7];
wire XNOR = (Nb1s>4'd4) || (Nb1s==4'd4 && VD[0]==1'b0);
wire [8:0] q_m = {~XNOR, q_m[6:0] ^ VD[7:1] ^ {7{XNOR}}, VD[0]};
reg [3:0] balance_acc = 0;
wire [3:0] balance = q_m[0] + q_m[1] + q_m[2] + q_m[3] + q_m[4] + q_m[5] + q_m[6] + q_m[7] - 4'd4;
wire balance_sign_eq = (balance[3] == balance_acc[3]);
wire invert_q_m = (balance==0 || balance_acc==0) ? ~q_m[8] : balance_sign_eq;
wire [3:0] balance_acc_inc = balance - ({q_m[8] ^ ~balance_sign_eq} & ~(balance==0 || balance_acc==0));
wire [3:0] balance_acc_new = invert_q_m ? balance_acc-balance_acc_inc : balance_acc+balance_acc_inc;
wire [9:0] TMDS_data = {invert_q_m, q_m[8], q_m[7:0] ^ {8{invert_q_m}}};
wire [9:0] TMDS_code = CD[1] ? (CD[0] ? 10'b1010101011 : 10'b0101010100) : (CD[0] ? 10'b0010101011 : 10'b1101010100);
always @(posedge clk) TMDS <= VDE ? TMDS_data : TMDS_code;
always @(posedge clk) balance_acc <= VDE ? balance_acc_new : 4'h0;
endmodule
ááá¯á·áá±á¬áẠoutput pairs áá»á¬ážááᯠDDIO output ááá¯á· ááŒáá·áºááœááºážááŒá®áž á¡áááºá¡áááºážááœáẠáá áºáá Ạsignal ááᯠáááºááá¯ááºáá¯ááºáá±ážáááºá
DDIO ááá¯ááºááá¯ááºááᯠVerilog áá¯ááºááŒáá·áº á€áá²á·ááá¯á· áá±á¬áºááŒááá¯ááºáááºá
module ddio(
input wire d0,
input wire d1,
input wire clk,
output wire out
);
reg r_d0;
reg r_d1;
always @(posedge clk)
begin
r_d0 <= d0;
r_d1 <= d1;
end
assign out = clk ? r_d0 : r_d1;
endmodule
áá«áá±ááá·áº áá®áááºážáá²á·áá±á¬á· á¡áá¯ááºááŒá áºááŸá¬ ááá¯ááºáá°ážá DDIO á¡ááœááºááŒááºá ááºáá»á¬ážááᯠá¡ááŸááºááááºá¡áá¯á¶ážááŒá¯ááẠáááºááẠAltera á ALTDDIO_OUT megafunction ááᯠá¡áá¯á¶ážááŒá¯áááºááá¯á¡ááºáááºá áá»áœááºá¯ááºá ááá±á¬áá»ááºááœááºá á á¬ááŒáá·áºááá¯áẠá¡á áááºá¡ááá¯ááºáž ALTDDIO_OUT ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáááºá
á¡á¬ážáá¯á¶ážá áááºážáááºáž áááºážáá»ááºáá¯á¶ááá±ááá·áº á¡áááºááŒá±áá«áááºá
Verilog HDL ááœááºáá±ážáá¬ážáá±á¬ source code áá
áºáá¯áá¯á¶ážááᯠáááºááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
FPGA á¡ááœáẠá á¯á ááºážáá¬ážáá±á¬ Firmware ááᯠMars Rover2rpi áá¯ááºáá±á«áºááœáẠááá·áºááœááºážáá¬ážááá·áº EPCS áá»á áºááºáá²ááá¯á· ááá·áºááœááºážáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áº FPGA áá¯ááºááá¯á· áá«áá«á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á FPGA ááẠflash memory á០á¡á ááŒá¯ááŒá®áž á áááºáááºááŒá áºáááºá
ááá¯áá»áœááºá¯ááºááá¯á·ááẠRaspberry ááá¯ááºááá¯ááºááœá²á·á ááºážáá¯á¶á¡ááŒá±á¬ááºážá¡áááºážáááºááŒá±á¬áááºááá¯áááºá
Debian Buster ááá¯á¡ááŒá±áá¶á Raspberry PI OS (32 bit) ááœáẠá
ááºážáááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá±áá«áááº
áá¯ááºáá±ááá·áºáááºá
áœá²- 2020-08-20á Kernel áá¬ážááŸááºáž- 5.4á
áááºá¡áá¬ááŸá áºáá¯áá¯ááºáááºááá¯áááº-
- config.txt ááá¯ááºááᯠáááºážááŒááºáá«á
- áá±á¬áºáá®áá¬ááŸá áºáá¯ááŸáá·áºá¡áá¯ááºáá¯ááºááẠX server configuration ááá¯áááºáá®ážáá«á
/boot/config.txt ááá¯ááºááᯠáááºážááŒááºáá±á¬á¡áá«á áááºáááº-
- i2c, i2s, spi á¡áá¯á¶ážááŒá¯ááŸá¯ááᯠááááºáá«á
- áááºááá·áº dtoverlay=dpi24 ááŒáá·áº DPI áá¯ááºááᯠááœáá·áºáá«á
- áá®áá®ááá¯áá¯áẠ1280Ã720 60Hzá DPI áá áºáá¯áá»áŸáẠá¡ááŸááºáá áºáá¯áá»áŸáẠ24 bits áááºááŸááºáá«á
- ááá¯á¡ááºáá±á¬ framebuffers 2 á¡áá±á¡ááœááºááᯠáááºááŸááºáá« (max_framebuffers=2á ááá¯á·ááŸáᬠáá¯áááá ááºáá á¹á ááºáž /dev/fb1 áá±á«áºáá¬áá«áááº)
config.txt ááá¯ááºá á á¬áá¬ážá¡ááŒáá·áºá¡á á¯á¶ááŸá¬ á€áá²á·ááá¯á·ááŒá áºáááºá
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
dtparam=i2c_arm=off
dtparam=spi=off
dtparam=i2s=off
dtoverlay=dpi24
overscan_left=0
overscan_right=0
overscan_top=0
overscan_bottom=0
framebuffer_width=1280
framebuffer_height=720
display_default_lcd=0
enable_dpi_lcd=1
dpi_group=2
dpi_mode=87
#dpi_group=1
#dpi_mode=4
dpi_output_format=0x6f027
dpi_timings=1280 1 110 40 220 720 1 5 5 20 0 0 0 60 0 74000000 3
# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18
# Additional overlays and parameters are documented /boot/overlays/README
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2
[all]
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2
áááºážáá±á¬ááºá framebuffer ááŸá áºáá¯ááœáẠ/dev/fb0 ááŸáá·áº /dev/fb1 ááŸá áºáá¯ááœáẠmonitor ááŸá áºáá¯á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠX server á¡ááœáẠconfiguration file áá áºáá¯ááᯠáááºáá®ážáááºááá¯á¡ááºáááºá
áá»áœááºá¯ááºá config ááá¯ááºááẠ/usr/share/x11/xorg.conf.d/60-dualscreen.conf ááŒá áºáááº
Section "Device"
Identifier "LCD"
Driver "fbturbo"
Option "fbdev" "/dev/fb0"
Option "ShadowFB" "off"
Option "SwapbuffersWait" "true"
EndSection
Section "Device"
Identifier "HDMI"
Driver "fbturbo"
Option "fbdev" "/dev/fb1"
Option "ShadowFB" "off"
Option "SwapbuffersWait" "true"
EndSection
Section "Monitor"
Identifier "LCD-monitor"
Option "Primary" "true"
EndSection
Section "Monitor"
Identifier "HDMI-monitor"
Option "RightOf" "LCD-monitor"
EndSection
Section "Screen"
Identifier "screen0"
Device "LCD"
Monitor "LCD-monitor"
EndSection
Section "Screen"
Identifier "screen1"
Device "HDMI"
Monitor "HDMI-monitor"
EndSection
Section "ServerLayout"
Identifier "default"
Option "Xinerama" "on"
Option "Clone" "off"
Screen 0 "screen0"
Screen 1 "screen1" RightOf "screen0"
EndSection
áá±á¬ááºážááŒá®á ááááºáááºááá±ážáá«á Xinerama ááá¯áááºááá·áºááœááºážáááºááá¯á¡ááºáááºá ááá¯á·áá±á¬áẠá¡áááºáá±á¬áºááŒáá« ááá¯ááºááŒáá®áá®ááá¯ááœáẠááŒáá¬ážááá·áºá¡ááá¯ááºáž áááºá áá±á¬á·áá±áá¬ááœááºááᯠáá±á¬áºáá®áá¬ááŸá áºáá¯á¡áá á¡ááŒáá·áºá¡á ááá¯ážáá»á²á·áááºááŒá áºáááºá
áá«áá²ááŒá áºááá¯ááºáá«áááºá ááá¯á¡áá« Raspberry Pi3 ááá¯ááºááŸááºáá»á¬ážááẠáá±á¬áºáá®áá¬ááŸá áºáá¯á¶ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬á·áááºááŒá áºáááºá
Mars Rover2rpi board á áá±á¬áºááŒáá»áẠááŸáá·áº áá¯á¶ááŒááºáž ááẠááŒá
áºááá¯ááºáááºá
source: www.habr.com