แแ แแแแแแจแ แแแฉแแแแแแแ: Raspberry Pi3 แแแคแ, แ แแแแแแช แแแแแแจแแ แแแฃแแแ แแแก GPIO แแแแแฅแขแแ แแก แกแแจแฃแแแแแแ, แแ แแก FPGA แแแคแ Mars Rover2rpi (Cyclone IV), แ แแแแแกแแช แฃแแแแจแแ แแแแ HDMI แแแแแขแแ แ. แแแแ แ แแแแแขแแ แ แแแแแแจแแ แแแฃแแแ Raspberry Pi3-แแก แกแขแแแแแ แขแฃแแ HDMI แแแแแฅแขแแ แแก แแแจแแแแแแ. แงแแแแแคแแ แ แแ แแแ แแฃแจแแแแก, แ แแแแ แช แแ แแแแ แแแแแขแแ แแก แกแแกแขแแแ.
แจแแแแแ แแ แแแขแงแแแ, แ แแแแ แฎแแ แชแแแแแแแ แแก.
แแแแฃแแแ แฃแ Raspberry Pi3 แแแคแแก แแฅแแก GPIO แแแแแฅแขแแ แ, แ แแแแแก แแแจแแแแแแแแช แจแแแแซแแแแ แแแแแแแจแแ แแ แกแฎแแแแแกแฎแแ แแแคแแ แแแแแแก แแแ แแแแแ: แกแแแกแแ แแแ, LED-แแแ, แกแขแแแแ แซแ แแแแก แแ แแแแแ แแแ แแ แแ แแแแแ แกแฎแแ. แแแแแฅแขแแ แแ แแแแแแฃแแ แแแแแก แแฃแกแขแ แคแฃแแฅแชแแ แแแแแแแแแแฃแแแ แแแ แขแแก แแแแคแแแฃแ แแชแแแแ. GPIO ALT2 แแแแคแแแฃแ แแชแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแแ แแแ แแแแแฅแขแแ แ DPI แแแขแแ แคแแแกแแก แ แแแแแจแ, แแแ แแแแก แแแ แแแแแฃแ แ แแแขแแ แคแแแกแ. แแ แกแแแแแก แแแคแแ แแแแแแก แแแ แแแแแ VGA แแแแแขแแ แแแแก DPI-แแ แแแกแแแแแจแแ แแแแแ. แแฃแแชแ, แฏแแ แแ แแ, VGA แแแแแขแแ แแแ แแฆแแ แแ แแก แแกแแแแแ แแแแ แชแแแแแฃแแ, แ แแแแ แช HDMI แแ แแแแ แแช, แชแแคแ แฃแแ แแแขแแ แคแแแกแ แกแฃแ แฃแคแ แ แฃแแแแแกแแ, แแแแ แ แแแแแแแฃแ แ. แฃแคแ แ แแแขแแช, DAC แแกแแ VGA แแแคแแ แแแแแแก แแแคแแแแ แฉแแแฃแแแแ แแ แแแแแแแแ R-2-R แฏแแญแแแแแก แกแแฎแแ แแ แฎแจแแ แแ แแ แแฃแแแขแแก 6 แแแขแ แแแแ แคแแ แจแ.
ALT2 แ แแแแแจแ, GPIO แแแแแฅแขแแ แแก แแแแแแก แแฅแแก แจแแแแแแ แแแแจแแแแแแแ:
แแฅ แแ แแแแแคแแ แแแ แแแแแฅแขแแ แแก RGB แฅแแแซแแกแแแแแแ แฌแแแแแ, แแฌแแแแ แแ แแฃแ แฏแ, แจแแกแแแแแแกแแ. แกแฎแแ แแแแจแแแแแแแแแ แกแแแแแแแแแ V-SYNC แแ H-SYNC แกแแแแแแแแ, แแกแแแ CLK. CLK แกแแแแแก แกแแฎแจแแ แ แแ แแก แกแแฎแจแแ แ, แ แแแแแแแช แแแฅแกแแแแก แแแแจแแแแแแแแแ แแแแแแแก แแแแแฅแขแแ แแ; แแก แแแแแแแแแแฃแแแ แแ แฉแแฃแ แแแแแ แ แแแแแแ.
แชแแคแ แฃแแ HDMI แแแแแขแแ แแก แแแกแแแแแจแแ แแแแแ, แแฅแแแ แฃแแแ แแแแแแฆแแ แแแขแแ แคแแแกแแก DPI แกแแแแแแแแ แแ แแแแแแงแแแแแ แแกแแแ HDMI แกแแแแแแแแแ. แแก แจแแแซแแแแ แแแแแแแแก, แแแแแแแแแ, แ แแแแ แกแแฎแแก FPGA แแแคแแก แแแแแงแแแแแแ. แ แแแแ แช แแ แแแแแ, Mars Rover2rpi แแแคแ แจแแกแแคแแ แแกแแ แแ แแแแแแแแกแแแแแก. แกแแแแแแแแแแจแ, แแ แแแคแแก แแแแแแจแแ แแแแก แซแแ แแแแแ แแแ แแแแขแ แกแแแชแแแแฃแ แ แแแแแขแแ แแก แกแแจแฃแแแแแแ แแกแ แแแแแแงแฃแ แแแ:
แแก แแแคแ แแแแแแงแแแแแ GPIO แแแ แขแแแแก แ แแแแแแแแแก แแแกแแแ แแแแแ แแ แแแขแ แแแ แแคแแ แแฃแแ แแแฌแงแแแแแแแแแแก แแแแแก แแแกแแแแแจแแ แแแแแ. แแแแแแ แแฃแแแ, แแ แแแแจแแ แแ 4 GPIO แกแแแแแแ แแแแแแงแแแแแ JTAG แกแแแแแแแแแกแแแแก, แ แแแ Raspberry-แแก แแ แแแ แแแแ แจแแซแแแก FPGA firmware แฉแแขแแแ แแแ FPGA-แจแ. แแแแก แแแแ, แแก แกแขแแแแแ แขแฃแแ แแแแจแแ แ แแ แแแฌแงแแแก; 4 DPI แกแแแแแแ แแจแแแแ. แกแแแแแแแแ แแ, แแแคแแแ แแแแแขแแแแ แกแแแแ แชแฎแแแแก แแฅแแก Raspberry-แแแ แแแแกแแแแแ แแแแ. แแกแ แ แแ, แจแแแแซแแแ แแแแแขแ แแแแ แแแคแ 90 แแ แแแฃแกแแ แแ แแแแแช แแแแฃแแแแจแแ แ แแก แฉแแแก แแแแแก:
แ แ แแฅแแ แฃแแแ, แแแแแฌแแแ แแแ แ JTAG แแ แแแ แแแแกแขแแก แแแแแงแแแแแ, แแแแ แแ แแก แแ แแ แแก แแ แแแแแแ.
แฏแแ แแแแแ แแ แแก แแแขแแ แ แแ แแแแแแ. แงแแแแ FPGA แแแแ แแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แกแแแแแก แจแแงแแแแแ. แแ แกแแแแแก แแฎแแแแ แ แแแแแแแแ แแแแแงแแคแแแ แแแแ, แ แแแแแแช แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแ แแแแแแแแกแแแแแก. แแกแ แ แแ, แแฅ แแฆแแแฉแแแ, แ แแ GPIO_0 CLK แกแแแแแแ แแ แแฆแฌแแแก FPGA แจแแงแแแแแก, แ แแแแแแช แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แ แแแแ แช FPGA แกแแแแแก แจแแงแแแแ. แแแแขแแ แจแแ แคแแ แแ แแ แแแแแฃแแ แแแแแช แแแแแฌแแ. แแ แแแแแแจแแ แแ GPIO_0-แก แแ แแแคแแก KEY[1] แกแแแแแแก:
แแฎแแ แแ แแแขแงแแแ แชแแขแแก FPGA แแ แแแฅแขแแก แจแแกแแฎแแ. HDMI แกแแแแแแแแแก แแแแแ แแ แแแแก แแแแแแ แ แกแแ แแฃแแ แแ แแก แซแแแแแ แแแฆแแแ แกแแฎแจแแ แแแแ. แแฃ แแแแแแแ แแแแแ HDMI แแแแแฅแขแแ แแก แแแแแแแก, แฎแแแแแ, แ แแ RGB แกแแแแแแแแ แแฎแแ แกแแ แแฃแแ แแแคแแ แแแชแแแแฃแ แ แกแแแแแแแแแ:
แแแคแแ แแแชแแแแฃแ แ แกแแแแแแแก แแแแแงแแแแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแ แซแแแแ แแแแแแชแแ แฎแแแแ แกแแแ แแ แ แแแแแแก แฉแแ แแแแก. แแ แจแแแแฎแแแแแจแ, แแแแแแฃแแ แคแแ แแแ แกแแแแแแแก แแ แแแแแแแฃแ แ แ แแ แแแขแแแแ แแแแ แแแ แแแแฅแแแแแ 10-แแแขแแแ TMDS-แแ (แขแ แแแแแชแแแก แแแแแแแแแแฃแแ แแแคแแ แแแชแแแแฃแ แ แกแแแแแแแแแชแแ). แแก แแ แแก แกแแแชแแแแฃแ แ แแแแแ แแแแก แแแแแแ DC แแแแแแแแแขแแก แกแแแแแแแแแ แแแแกแแฆแแแแ แแ แแแคแแ แแแชแแแแฃแ แฎแแแแ แกแแแแแแแก แแแแแ แแแแก แแแแแแฃแแแแแ แจแแกแแแชแแ แแแแแ. แแแแแแแแ 10 แแแขแ แแฎแแ แกแแ แแฃแ แฎแแแแ แฃแแแ แแแแแแชแแก แแ แแ แแแแขแ แคแแ แแกแแแแก, แแแแแแแก, แ แแ แกแแ แแแแแแแขแแ แแก แกแแแแแก แกแแฉแฅแแ แ 10-แฏแแ แแแขแ แฃแแแ แแงแแก แแแฅแกแแแแก แกแแแแแก แกแแฉแฅแแ แแแ. แแฃ แแแแแแแแแ แแแแฆแแแ แแแแแ แ แแแแแก 1280x720 60Hz, แแแจแแ แแ แ แแแแแแก แแแฅแกแแแแก แกแแฎแจแแ แแ 74,25 MHz. แกแแ แแแแแแแขแแ แ แฃแแแ แแงแแก 742,5 MHz.
แ แแแฃแแแ แฃแ FPGA-แแแก, แกแแแฌแฃแฎแแ แแ, แแก แแ แจแแฃแซแแแแ. แแฃแแชแ, แฉแแแแแแแก แกแแแแแแแแ แแ, FPGA-แก แแฅแแก แฉแแจแแแแแฃแแ DDIO แฅแแแซแแกแแแแแแ. แแก แแ แแก แแแกแแแแแแ, แ แแแแแแแช แฃแแแ, แ แแแแ แช แแก แแงแ, 2-แแแ 1-แแก แกแแ แแแแแแแ. แแแฃ, แแแ แจแแฃแซแแแแ แแ แ แแแขแ แแแแแแแแแแ แฃแแแ แแแแแแขแแแแ แกแแแแแก แกแแฎแจแแ แแก แแแแแแแแ แแ แแแแแ แแแแ แแแแแแแแ. แแก แแแจแแแแก, แ แแ FPGA แแ แแแฅแขแจแ แจแแแแซแแแแ แแแแแแงแแแแ แแ แ 740 MHz, แแ แแแแ 370 MHz, แแแแ แแ แแฅแแแ แฃแแแ แแแแแแงแแแแ DDIO แแแแแแแแแแ แแแแแแแขแแแ FPGA-แจแ. แแฎแแ 370 MHz แฃแแแ แกแ แฃแแแแ แแแฆแฌแแแแแ แกแแฎแจแแ แแ. แกแแแฌแฃแฎแแ แแ, 1280x720 แ แแแแแ แแ แแก แแแแแขแ. แฃแคแ แ แแแฆแแแ แแแ แฉแแแแแแแแก แแแฆแฌแแแ แจแแฃแซแแแแแแแ แฉแแแแ Cyclone IV FPGA แแแงแแแแแฃแแ Mars Rover2rpi แแแคแแแ.
แแกแ แ แแ, แแแแแแแจแ, แจแแงแแแแแก แแแฅแกแแแแก แกแแฎแจแแ แ CLK แแแแแก PLL-แแ, แกแแแแช แแก แแ แแแแแแแ 5-แแ. แแ แกแแฎแจแแ แแแ R, G, B แแแแขแแแ แแแ แแแแฅแแแแแ แแแข แฌแงแแแแแแแ. แแแแก แแแแแแแก 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
แจแแแแแ แแแแแแแแแแ แฌแงแแแแแแ แแแแฌแแแแแ DDIO แแแแแแแแแแก, แ แแแแแแช แแแแแแแแแแ แฃแแแ แฌแแ แแแฅแแแแก แแ แ แแแขแแแ แกแแแแแแก แแแแแแแแ แแ แแแแแ แแแแ แแแแแแแแ.
แแแแแ 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
แแแแ แแ แแแแ แแแแแแแแแ แแก แแกแ แแ แแแฃแจแแแแแก. แแฅแแแ แฃแแแ แแแแแแงแแแแ Alter-แแก แแแแแคแฃแแฅแชแแ ALTDDIO_OUT, แ แแ แ แแแแฃแ แแ แฉแแ แแแ DDIO แแแแแแแแแแ แแแแแแแขแแแ. แฉแแแ แแ แแแฅแขแ แแงแแแแแก ALTDDIO_OUT แแแแแแแแแแแก แแแแแแแแแขแก.
แแก แงแแแแแคแแ แ แจแแแซแแแแ แชแแขแ แ แแฃแแ แฉแแแแแก, แแแแ แแ แแฃแจแแแแก.
แแฅแแแ แจแแแแซแแแแ แแแฎแแ Verilog HDL-แจแ แแแฌแแ แแแ แงแแแแ แฌแงแแ แแก แแแแ
FPGA-แกแแแแก แจแแแแแแแแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแ แฉแแ แแฃแแแ EPCS แฉแแแจแ, แ แแแแแแช แแแแแกแขแแแแ แแแฃแแแ Mars Rover2rpi แแแคแแแ. แแแ แแแแ, FPGA แแแคแแแ แแแแฅแขแ แแแแแ แแแแก แแแแแงแแแแแแกแแก, FPGA แแแแชแแแแแแแแแ แคแแแจ แแแฎแกแแแ แแแแแแ แแ แแแแฌแงแแแ.
แแฎแแ แฉแแแ แชแแขแ แฃแแแ แแแกแแฃแแ แแ แแแแแ Raspberry-แแก แแแแคแแแฃแ แแชแแแแ.
แแ แแแแแแแ แแฅแกแแแ แแแแแขแแแก Raspberry PI OS-แแ (32 แแแขแแแแ) Debian Buster-แแก แกแแคแฃแซแแแแแ, แแแ แกแแ: แแแแแกแขแ 2020,
แแแแแจแแแแแก แแแ แแฆแ: 2020-08-20, แแแ แแแแก แแแ แกแแ: 5.4.
แแฅแแแ แฃแแแ แแแแแแแแ แแ แ แ แแ:
- config.txt แคแแแแแก แ แแแแฅแขแแ แแแ;
- แจแแฅแแแแแ X แกแแ แแแ แแก แแแแคแแแฃแ แแชแแ แแ แแแแแขแแ แแแ แแฃแจแแแแแกแแแแก.
/boot/config.txt แคแแแแแก แ แแแแฅแขแแ แแแแกแแก แแญแแ แแแแแ:
- แแแแแ แแแ i2c, i2s, spi-แแแแก แแแแแงแแแแแ;
- DPI แ แแแแแแก แฉแแ แแแ แแแแแคแแ แแแก แแแแแงแแแแแแ dtoverlay=dpi24;
- แแแแแ แ แแแแแแก แแแแคแแแฃแ แแชแแ 1280ร720 60Hz, 24 แแแขแ แแแแ แแแฅแกแแแแ DPI-แแ;
- แแแฃแแแแแ แคแ แแแแแฃแคแแ แแก แกแแญแแ แ แ แแแแแแแแ 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
แแแแก แจแแแแแ, แแฅแแแ แฃแแแ แจแแฅแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแ X แกแแ แแแ แแกแแแแก, แ แแ แแแแแแงแแแแก แแ แ แแแแแขแแ แ แแ แคแ แแแแฃแคแแ แแ /dev/fb0 แแ /dev/fb1:
แฉแแแ แแแแคแแแฃแ แแชแแแก แคแแแแ /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 แแแคแแก แแฆแฌแแ แ แแ แแแแ แแกแฅแแแแก แแแแแ แแแ แจแแแแซแแแแ แแฎแแแแ
แฌแงแแ แ: www.habr.com