DPI မျက်နဟာပဌင်နဟင့် FPGA ဘုတ်မဟတစ်ဆင့် Raspberry Pi3 သို့ ဒုတိယ HDMI မော်နီတာ


ကဗီဒီယိုတလင် ပဌသထာသသည်- 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 ချိတ်ဆက်ကိရိယာ၏ ပင်နံပါတ်မျာသသည် အောက်ပါအတိုင်သ အဓိပ္ပာယ်ရဟိသည်။

DPI မျက်နဟာပဌင်နဟင့် FPGA ဘုတ်မဟတစ်ဆင့် Raspberry Pi3 သို့ ဒုတိယ HDMI မော်နီတာ

ကနေရာတလင် ကျလန်ုပ်သည် ချိတ်ဆက်ကိရိယာ၏ RGB pins မျာသကို အနီ၊ အစိမ်သနဟင့် အပဌာတို့ကို အသီသသီသ အရောင်ခဌယ်ထာသသည်။ အခဌာသအရေသကဌီသသောအချက်ပဌမဟုမျာသမဟာ V-SYNC နဟင့် H-SYNC sweep sync signals မျာသအပဌင် CLK ဖဌစ်သည်။ CLK နာရီကဌိမ်နဟုန်သသည် ချိတ်ဆက်ကိရိယာသို့ ပစ်ဇယ်တန်ဖိုသမျာသကို ထုတ်ပေသသည့် ကဌိမ်နဟုန်သဖဌစ်ပဌီသ ရလေသချယ်ထာသသည့် ဗီဒီယိုမုဒ်ပေါ်တလင် မူတည်သည်။

ဒစ်ဂျစ်တယ် HDMI မော်နီတာတစ်လုံသကို ချိတ်ဆက်ရန်၊ သင်သည် DPI အင်တာဖေ့စ်အချက်ပဌမဟုမျာသကို ဖမ်သယူကာ ၎င်သတို့အာသ HDMI အချက်ပဌမဟုမျာသအဖဌစ် ပဌောင်သလဲရန် လိုအပ်သည်။ ဥပမာအာသဖဌင့်၊ မည်သည့် FPGA ဘုတ်ကိုမဆို အသုံသပဌု၍ လုပ်ဆောင်နိုင်သည်။ ထလက်လာသည့်အတိုင်သ Mars Rover2rpi ဘုတ်သည် ကရည်ရလယ်ချက်အတလက် သင့်လျော်သည်။ အမဟန်မဟာ၊ အထူသအဒက်တာမဟတဆင့် ကဘုတ်ပဌာသကို ချိတ်ဆက်ရန်အတလက် အဓိကရလေသချယ်မဟုမဟာ အောက်ပါအတိုင်သဖဌစ်သည်-

DPI မျက်နဟာပဌင်နဟင့် FPGA ဘုတ်မဟတစ်ဆင့် Raspberry Pi3 သို့ ဒုတိယ HDMI မော်နီတာ

ကဘုတ်အာသ GPIO အပေါက်မျာသ အရေအတလက် တိုသမဌဟင့်ရန်နဟင့် Raspberry နဟင့် နောက်ထပ် အရံပစ္စည်သမျာသကို ချိတ်ဆက်ရန်အတလက် အသုံသပဌုပါသည်။ တစ်ချိန်တည်သမဟာပင်၊ ကချိတ်ဆက်မဟုပါရဟိသော GPIO အချက်ပဌမဟု 4 ခုကို JTAG အချက်ပဌမဟုမျာသကို အသုံသပဌုသည်၊ ထို့ကဌောင့် ဖဌန့်ဖဌူသမဟုမဟ ပရိုဂရမ်သည် FPGA firmware ကို FPGA သို့ တင်နိုင်စေရန်။ ထို့အတလက်ကဌောင့်၊ ထိုသို့သော ပုံမဟန်ချိတ်ဆက်မဟုသည် ကျလန်ုပ်နဟင့် မကိုက်ညီပါ၊ 4 DPI အချက်ပဌမဟုမျာသ ထလက်သလာသပါသည်။ ကံကောင်သစလာဖဌင့်၊ ဘုတ်ပေါ်ရဟိ အပိုဘီသမျာသတလင် Raspberry နဟင့်လိုက်ဖက်သော pinout တစ်ခုရဟိသည်။ ဘုတ်ပဌာသကို ၉၀ ဒီဂရီ လဟည့်နိုင်ပဌီသ ၎င်သကို ကျလန်ုပ်၏ Raspberry နဟင့် ချိတ်ဆက်နိုင်စေရန်။

DPI မျက်နဟာပဌင်နဟင့် FPGA ဘုတ်မဟတစ်ဆင့် Raspberry Pi3 သို့ ဒုတိယ HDMI မော်နီတာ

ဟုတ်ပါတယ်၊ သင်သည် ပဌင်ပ JTAG ပရိုဂရမ်မာကို အသုံသပဌုရလိမ့်မည်၊ သို့သော် ၎င်သသည် ပဌဿနာမဟုတ်ပါ။

ပဌဿနာလေသတစ်ခုရဟိပါသေသတယ်။ FPGA ပင်နံပါတ်တိုင်သကို နာရီထည့်သလင်သမဟုအဖဌစ် အသုံသမပဌုနိုင်ပါ။ ကရည်ရလယ်ချက်အတလက် အသုံသပဌုနိုင်သော သီသသန့်ပင်အနည်သငယ်သာရဟိပါသည်။ ထို့ကဌောင့် GPIO_0 CLK အချက်ပဌမဟုသည် FPGA clock input အဖဌစ်သုံသနိုင်သည့် FPGA input သို့မရောက်ရဟိကဌောင်သ ကနေရာတလင် ပေါ်ထလက်ခဲ့ပါသည်။ ဒီလိုပါပဲ၊ ပို့စ်တစ်ခုကို ပဝါပေါ်တင်လိုက်တယ်။ ကျလန်ုပ်သည် ဘုတ်၏ GPIO_0 နဟင့် KEY[1] အချက်ပဌမဟုကို ချိတ်ဆက်သည်-

DPI မျက်နဟာပဌင်နဟင့် FPGA ဘုတ်မဟတစ်ဆင့် Raspberry Pi3 သို့ ဒုတိယ HDMI မော်နီတာ

အခု FPGA ပရောဂျက်အကဌောင်သ နည်သနည်သပဌောပဌမယ်။ HDMI အချက်ပဌမဟုမျာသ ဖလဲ့စည်သရာတလင် အဓိကအခက်အခဲမဟာ ကဌိမ်နဟုန်သမျာသ အလလန်မဌင့်မာသသည်။ HDMI connector ၏ pinout ကိုကဌည့်ပါ၊ RGB အချက်ပဌမဟုမျာသသည် ယခုအခါ အမဟတ်စဉ်ကလဲပဌာသသည့်အချက်ပဌမျာသဖဌစ်ကဌောင်သ သင်တလေ့မဌင်နိုင်သည်-

DPI မျက်နဟာပဌင်နဟင့် FPGA ဘုတ်မဟတစ်ဆင့် Raspberry Pi3 သို့ ဒုတိယ HDMI မော်နီတာ

ကလဲပဌာသသောအချက်ပဌစနစ်ကိုအသုံသပဌုခဌင်သသည် ဂီယာလိုင်သရဟိ ဘုံမုဒ်ဆူညံသံမျာသကို ကိုင်တလယ်ဖဌေရဟင်သနိုင်စေပါသည်။ ကကိစ္စတလင်၊ အရောင်အချက်ပဌမဟုတစ်ခုစီ၏မူရင်သရဟစ်ဘစ်ကုဒ်ကို 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 တစ်ခုလုံသကို သင်ကဌည့်ရဟုနိုင်ပါသည်။ ဒီမဟာ github မဟာ.

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 ဖိုင်ကို တည်သဖဌတ်သောအခါ၊ သင်သည်-

  1. i2c, i2s, spi အသုံသပဌုမဟုကို ပိတ်ပါ။
  2. ထပ်ဆင့် dtoverlay=dpi24 ဖဌင့် DPI မုဒ်ကို ဖလင့်ပါ။
  3. ဗီဒီယိုမုဒ် 1280×720 60Hz၊ DPI တစ်ခုလျဟင် အမဟတ်တစ်ခုလျဟင် 24 bits သတ်မဟတ်ပါ။
  4. လိုအပ်သော 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