<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[全志v851s使用fbtft驱动0.96寸st7735屏分享]]></title><description><![CDATA[<p dir="auto">最近打算做个小玩意，需要驱动0.96寸的st7735，为此也踩了些坑，特此记录分享。<br />
直接上配置吧：<br />
1.电路图：<br />
<img src="/assets/uploads/files/1703071736393-yuanlitu.png" alt="yuanlitu.png" class=" img-responsive img-markdown" width="757" height="577" /><br />
<img src="/assets/uploads/files/1703071739056-yuanlitu1.png" alt="yuanlitu1.png" class=" img-responsive img-markdown" width="452" height="104" /> <img src="/assets/uploads/files/1703071741742-yuanlitu2.png" alt="yuanlitu2.png" class=" img-responsive img-markdown" width="735" height="154" /><br />
这里使用到spi0 以及 PD2 PD4 还有PH0 作为pwm0  没截图显示。<br />
2.board.dts配置</p>
<pre><code>&amp;pio{
            .....
            	spi0_pins_a: spi0@0 {
            
            		allwinner,pins = "PC0", "PC2";
            
            		allwinner,pname = "spi0_sclk", "spi0_mosi";
            
            		allwinner,function = "spi0";
            
            		allwinner,muxsel = &lt;4&gt;;
            
            		allwinner,drive = &lt;1&gt;;
            
            		allwinner,pull = &lt;0&gt;;
            
            	};

            	spi0_pins_b: spi0@1 {
            
            		allwinner,pins = "PC1";
            
            		allwinner,pname = "spi0_cs0";
            
            		allwinner,function = "spi0";
            
            		allwinner,muxsel = &lt;4&gt;;
            
            		allwinner,drive = &lt;1&gt;;
            
            		allwinner,pull = &lt;1&gt;;   // only CS should be pulled up
            
            	};

            	spi0_pins_c: spi0@2 {
            
            		allwinner,pins = "PC0", "PC1", "PC2";
            
            		allwinner,function = "io_disabled";
            
            		allwinner,muxsel = &lt;0xf&gt;;
            
            		allwinner,drive = &lt;1&gt;;
            
            		allwinner,pull = &lt;0&gt;;
            
            	};

................
}；

</code></pre>
<p dir="auto">以上为引脚配置，</p>
<pre><code>&amp;spi0 {
	clock-frequency = &lt;100000000&gt;;
	pinctrl-0 = &lt;&amp;spi0_pins_a &amp;spi0_pins_b&gt;;
	pinctrl-1 = &lt;&amp;spi0_pins_c&gt;;
	pinctrl-names = "default", "sleep";
	spi0_cs_number = &lt;1&gt;;
	spi1_cs_bitmap = &lt;1&gt;;
	spi_slave_mode = &lt;0&gt;;
	spi_dbi_enable = &lt;0&gt;;
	status = "okay";

	st7789v@0 {
	    	status = "okay";
	    	compatible = "sitronix,st7735r";
		reg = &lt;0&gt;;
		spi-max-frequency = &lt;32000000&gt;;
		rotate = &lt;90&gt;;
		bgr;
		fps = &lt;60&gt;;
		buswidth = &lt;8&gt;;
		reset-gpios = &lt;&amp;pio PD 2 1 1 2 1&gt;;
		dc-gpios = &lt;&amp;pio PD 4 1 1 2 0&gt;;
		led-gpios = &lt;&amp;pio PH 0 1 1 2 1&gt;;
		debug = &lt;1&gt;;
	    };
};
</code></pre>
<p dir="auto">这里是spi0配置。</p>
<p dir="auto">2.内核配置（可以选择关闭disp2，以及 设备树 删除disp lcd0 部分）<br />
切记。一定要关闭uboot disp2 。<br />
<img src="/assets/uploads/files/1703072329255-neihe1.png" alt="neihe1.png" class=" img-responsive img-markdown" width="780" height="517" /></p>
<p dir="auto"><img src="/assets/uploads/files/1703072333672-neihe2.png" alt="neihe2.png" class=" img-responsive img-markdown" width="786" height="501" /></p>
<p dir="auto">3.修改驱动代码<br />
.../linux-4.9/drivers/staging/fbtft/fbtft-core.c 文件中<br />
static int fbtft_request_one_gpio(struct fbtft_par *par, const char *name, int index, int *gpiop) 函数，修改后代码如下：</p>
<pre><code>static int fbtft_request_one_gpio(struct fbtft_par *par,
				  const char *name, int index, int *gpiop)
{
	struct device *dev = par-&gt;info-&gt;device;
	struct device_node *node = dev-&gt;of_node;
	int gpio, flags, ret = 0;
	struct gpio_config gpio_of_flags;

	if (of_find_property(node, name, NULL)) {
		gpio = of_get_named_gpio_flags(node, name, index, (enum of_gpio_flags *)&amp;gpio_of_flags);
		if (gpio == -ENOENT)
			return 0;
		if (gpio == -EPROBE_DEFER)
			return gpio;
		if (gpio &lt; 0) {
			dev_err(dev,
				"failed to get '%s' from DT\n", name);
			return gpio;
		}

		/* active low translates to initially low */
		flags = (gpio_of_flags.data &amp; OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW :
							GPIOF_OUT_INIT_HIGH;
		ret = devm_gpio_request_one(dev, gpio, flags,
						dev-&gt;driver-&gt;name);
		if (ret) {
			dev_err(dev,
				"gpio_request_one('%s'=%d) failed with %d\n",
				name, gpio, ret);
			return ret;
		}
		if (gpiop)
			*gpiop = gpio;
		fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%d\n",
							__func__, name, gpio);
	}
	return ret;
}

</code></pre>
<p dir="auto">修改 .../linux-4.9/drivers/staging/fbtft/fb_st7735r.c 文件</p>
<p dir="auto">主要修改一下驱动初始化代码列表：</p>
<pre><code>static int default_init_sequence[] = {
	-1, MIPI_DCS_SOFT_RESET,
	-2, 150,                               /* delay */

	-1, MIPI_DCS_EXIT_SLEEP_MODE,
	-2, 500,                               /* delay */

	/* FRMCTR1 - frame rate control: normal mode
	 * frame rate = fosc / (1 x 2 + 40) * (LINE + 2C + 2D)
	 */
	-1, 0xB1, 0x05, 0x3C, 0x3C,

	/* FRMCTR2 - frame rate control: idle mode
	 * frame rate = fosc / (1 x 2 + 40) * (LINE + 2C + 2D)
	 */
	-1, 0xB2, 0x05, 0x3C, 0x3C,

	/* FRMCTR3 - frame rate control - partial mode
	 * dot inversion mode, line inversion mode
	 */
	-1, 0xB3, 0x05, 0x3C, 0x3C, 0x05, 0x3C, 0x3C,

	/* INVCTR - display inversion control
	 * no inversion
	 */
	-1, 0xB4, 0x03,

	/* PWCTR1 - Power Control
	 * -4.6V, AUTO mode
	 */
	-1, 0xC0, 0xAB, 0x0B, 0x04,

	/* PWCTR2 - Power Control
	 * VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
	 */
	-1, 0xC1, 0xC5,

	/* PWCTR3 - Power Control
	 * Opamp current small, Boost frequency
	 */
	-1, 0xC2, 0x0D, 0x00,

	/* PWCTR4 - Power Control
	 * BCLK/2, Opamp current small &amp; Medium low
	 */
	-1, 0xC3, 0x8D, 0x6A,

	/* PWCTR5 - Power Control */
	-1, 0xC4, 0x8D, 0xEE,

	/* VMCTR1 - Power Control */
	-1, 0xC5, 0x0F,

	-1, 0x21, 

	-1, 0x3A, 0x05,

	-1, MIPI_DCS_SET_DISPLAY_ON,
	-2, 100,                               /* delay */

	-1, MIPI_DCS_ENTER_NORMAL_MODE,
	-2, 10,                               /* delay */

	/* end marker */
	-3
};
</code></pre>
<p dir="auto">！！修改屏偏移</p>
<pre><code>static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
{
	xs = xs + 1 ; xe = xe + 1 ;
	ys = ys + 26 ; ye = ye + 26;

	write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
		  xs &gt;&gt; 8, xs &amp; 0xFF, xe &gt;&gt; 8, xe &amp; 0xFF);

	write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
		  ys &gt;&gt; 8, ys &amp; 0xFF, ye &gt;&gt; 8, ye &amp; 0xFF);

	write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
}
</code></pre>
<p dir="auto">修改屏参数：</p>
<pre><code>static struct fbtft_display display = {
	.regwidth = 8,
	.width = 80,
	.height = 160,
	.init_sequence = default_init_sequence,
	.gamma_num = 2,
	.gamma_len = 16,
	.gamma = DEFAULT_GAMMA,
	.fbtftops = {
		.set_addr_win = set_addr_win,
		.set_var = set_var,
		.set_gamma = set_gamma,
	},
};
</code></pre>
<p dir="auto">至此编译即可在小机端看到有fb0生成，屏幕点亮。<br />
最后一图：<br />
<img src="/assets/uploads/files/1703072970536-t888-resized.jpg" alt="t888.jpg" class=" img-responsive img-markdown" /></p>
<p dir="auto">如有疑问，请跟贴。</p>
]]></description><link>https://bbs.aw-ol.com/topic/4829/全志v851s使用fbtft驱动0-96寸st7735屏分享</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 12:45:18 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/4829.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Dec 2023 11:50:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 全志v851s使用fbtft驱动0.96寸st7735屏分享 on Thu, 05 Jun 2025 02:48:53 GMT]]></title><description><![CDATA[<p dir="auto">可以直接操作/dev/spi0节点，不是用fb进行液晶刷新</p>
]]></description><link>https://bbs.aw-ol.com/post/26388</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/26388</guid><dc:creator><![CDATA[likaienjoy]]></dc:creator><pubDate>Thu, 05 Jun 2025 02:48:53 GMT</pubDate></item><item><title><![CDATA[Reply to 全志v851s使用fbtft驱动0.96寸st7735屏分享 on Wed, 04 Jun 2025 05:55:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/3260">@whycanservice2</a> 在 <a href="/post/20500">全志v851s使用fbtft驱动0.96寸st7735屏分享</a> 中说：</p>
<blockquote>
<p dir="auto">可以选择关闭disp2，以及 设备树 删除disp lcd0 部分）<br />
切记。一定要关闭uboot disp2 。</p>
</blockquote>
<p dir="auto">可以选择关闭disp2，一定要关闭uboot disp2 。 具体该怎么操作 ，没理解。</p>
]]></description><link>https://bbs.aw-ol.com/post/26377</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/26377</guid><dc:creator><![CDATA[number007cool]]></dc:creator><pubDate>Wed, 04 Jun 2025 05:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to 全志v851s使用fbtft驱动0.96寸st7735屏分享 on Mon, 11 Mar 2024 15:21:59 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/4685">@frank</a> 这改完 lcd0 不能用了啊</p>
]]></description><link>https://bbs.aw-ol.com/post/21756</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/21756</guid><dc:creator><![CDATA[frank]]></dc:creator><pubDate>Mon, 11 Mar 2024 15:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to 全志v851s使用fbtft驱动0.96寸st7735屏分享 on Thu, 07 Mar 2024 07:48:13 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/3260">@whycanservice2</a><br />
老哥 问两个问题<br />
1.你的PH0做pwm调好了吗<br />
2.屏幕会显示启动log嘛</p>
]]></description><link>https://bbs.aw-ol.com/post/21659</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/21659</guid><dc:creator><![CDATA[mysteryli]]></dc:creator><pubDate>Thu, 07 Mar 2024 07:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to 全志v851s使用fbtft驱动0.96寸st7735屏分享 on Thu, 07 Mar 2024 06:52:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/3260">@whycanservice2</a> 可以支持多个 tft 吗</p>
]]></description><link>https://bbs.aw-ol.com/post/21655</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/21655</guid><dc:creator><![CDATA[frank]]></dc:creator><pubDate>Thu, 07 Mar 2024 06:52:38 GMT</pubDate></item></channel></rss>