1.板子是两层板,可以之间打样。
2.板子上全部io引出,间距可以插到洞洞板或者面包板上
3.dvp摄像头和RGB屏幕同时引出,支持摄像头采图实时显示
4.音频和视频都引出,方便各种填坑测试
5.四角带M3螺丝孔
6.支持堆叠扩展
7.新的PCB带按键,方便烧录和调试
板子叫做菠萝派,其实菠萝派在5年前就想好了的,logo都做好了,一直没有产出。现在借着F1芯片先出一个菠萝派F1先
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
PCB工程By AltiumDesigner09
PineapplePi-F1_PCB.rar
以下是楼主 2019-09-01 25楼更新V2版本:
---------------------------------------------------------------------------
感谢楼主的无私分享, 这是第二版PCB文件:
DXP PCB: PineapplePi-F1_PCB_V2.rar
BOM表(用于JLC SMT): BoloPi-F1_V2.xls
离线
一楼感谢晕哥提供的坑网平台
离线
摄像头采集实时显示调通了?
离线
摄像头采集实时显示调通了?
嗯,之前就调好了
离线
微凉VeiLiang 说:一楼感谢晕哥提供的坑网平台
得感谢包括楼主在内的各位热心网友才行!
啥时候开卖 ^_^ 坐等
这个暂时还没有打算:lol
离线
犀鸠利
checkout 说:摄像头采集实时显示调通了?
嗯,之前就调好了
离线
感谢楼主分享~~~
非常感谢。能分享下源码吗?谢谢啦。
离线
感谢分享。
过孔直径是不是有点小?10mil直径。嘉立创双面板过孔直径最小是0.3mm。
还有个疑问,RGB接口是为了方便画线按顺序连到了LCD接口上,那么应该在哪里设置RGB的对应关系呢?因为之前看到的荔枝派nano还有一些唱戏机的接口,都是LCD_D18~D23对应R2~R7,LCD_D10~D15对应G2~G7,LCD_D2~D7对应B2~B7。
最近编辑记录 Gentlepig (2019-08-21 09:55:19)
在线
感谢楼主分享~~~
非常感谢。能分享下源码吗?谢谢啦。
有源pcb工程文件,f1c的开源代码的话暂时没有,先用网友分享的代码跑
离线
感谢分享。
过孔直径是不是有点小?10mil直径。嘉立创双面板过孔直径最小是0.3mm。
还有个疑问,RGB接口是为了方便画线按顺序连到了LCD接口上,那么应该在哪里设置RGB的对应关系呢?因为之前看到的荔枝派nano还有一些唱戏机的接口,都是LCD_D18~D23对应R2~R7,LCD_D10~D15对应G2~G7,LCD_D2~D7对应B2~B7。
嗯,嘉立创我一直是安装0.2,0.45的标准画的,两层板一样是可以做的。lcd是按照荔枝派的接的
离线
感谢大神,我等伸手党的福音 *_*
离线
楼主用的哪款摄像头呢?
离线
楼主 我有两个问题 :
1.Dvp接口 10脚DGND 没有接地
2.Dvp接口 15脚是VCC2.8V,我看了下0V2640的原理图应该是1.2V吧
离线
不错,没啥时间玩了
离线
666,PCB的3D很漂亮
离线
谢谢,学习了。用F1C100s画了好几块板了,每次供电部分都布得很纠结。下次学你的做法,在底部焊盘周围走线。
发现我把底部焊盘画的过大了,所以没什么空间走线。
离线
楼主 我有两个问题 :
1.Dvp接口 10脚DGND 没有接地
2.Dvp接口 15脚是VCC2.8V,我看了下0V2640的原理图应该是1.2V吧
嗯,没说没发现呢,地是要接,我用的sensor内部已经接了,不过这个可以出来打个过孔。
电压可以通过改ldo来改。不过要用两路电压供电的sensor可能就不适合了
离线
楼主,菠萝派啥时候开卖啊
离线
非常感谢晕哥吃螃蟹,期待中
离线
更新了一下。
增加了摄像头DVDD 和 AVDD分开LDO供电,如果DVDD和AVDD一样则可以通过背面的跳线进行端接即可,可不贴DVDD的LDO
修复了14楼的摄像头10脚接地问题
增加了TVIN0脚的输入滤波电路。方便调试TVD
增加了Markpoint,方便贴片
最后附上GitHub项目连接,欢迎star,和 提出修改意见
https://github.com/VeiLiang/BoloPi_PCB
离线
感谢楼主的无私分享
离线
淘宝上卖裸机代码的是您吗?期待你搞定裸机usb
离线
checkout 说:摄像头采集实时显示调通了?
嗯,之前就调好了
这个可以分享,学习学习
离线
微凉VeiLiang 说:checkout 说:摄像头采集实时显示调通了?
嗯,之前就调好了
这个可以分享,学习学习
板子什么可以买到你的样品
离线
楼主的时间很值钱,不愿意做买卖,你看下25楼的更新版文件: https://whycan.cn/t_2788.html#p23140
可以自己手工DIY
本来想diy的,pcb都提交给嘉利创了,无奈贴片太贵了,5块板子下来要200多了,就这还不加插件的钱呢?就放弃了
离线
楼主的时间很值钱,不愿意做买卖,你看下25楼的更新版文件: https://whycan.cn/t_2788.html#p23140
可以自己手工DIY
我朋友在帮忙做这个了,自己手工贴,下周可能会出来十片样品
离线
https://whycan.cn/files/members/3/QQ20190921151654.jpg
@kekemuyu 这是我收到的,还没时间动手,要补焊好些零件,如果有兴趣可以加我QQ赠送两片, 估计坑不少。
想省事还是买荔枝派nano方便,35元一片包邮 ^_^
嘉立创的贴片很是尴尬
离线
https://whycan.cn/files/members/3/QQ20190921151654.jpg
@kekemuyu 这是我收到的,还没时间动手,要补焊好些零件,如果有兴趣可以加我QQ赠送两片, 估计坑不少。
想省事还是买荔枝派nano方便,35元一片包邮 ^_^
感谢老大,我有nano,留给需要的同学吧
最近编辑记录 kekemuyu (2019-09-21 15:42:19)
离线
@微凉VeiLiang
还可以预定不?
可以的
离线
zan!
大力顶楼主,中国好青年。
离线
还可以预定吗?
可以的话,请留一个给我,手机wx 139-1020-0543 谢谢
晕哥 说:@微凉VeiLiang
还可以预定不?
可以的
离线
还可以预定吗?
可以的话,请留一个给我,手机wx 139-1020-0543 谢谢微凉VeiLiang 说:晕哥 说:@微凉VeiLiang
还可以预定不?
可以的
可以,出来后我联系你
离线
厉害了,顶一个,有没有购买链接
离线
非常感谢,下载看看
离线
顶一个,感谢楼主!
离线
@晕哥,最后修改的pcb有问题没有?也准备在上面改一版。适应自己的扩展板
离线
板子很漂亮。有没有大神挣个辛苦费帮我也画个小板
离线
感谢楼主的无私分享,板子画的真漂亮。
离线
好板子,看着很漂亮,感谢分享学习
离线
记录:
OV2640
core:1.2V ±5%
analog:2.5-3.0V
IO:1.7V to 3.3V
总结:使用3.3V需要3个电压
OV5640
core:1.5V ±5%(内置1.5V稳压器)
analog:2.6-3.0V(2.8V typical)
IO:1.8V/2.8V
总结:使用2.8V需要1个电压
GC0308
DVDD28=2.8V/3.3V,其余电压内置稳压器
总结:使用2.8V需要1个电压
最近编辑记录 迪卡 (2020-01-05 14:53:06)
离线
感谢楼主分享~~~
非常感谢。能分享下源码吗?谢谢啦。
离线
这个板子先有卖吗?
离线
想省事还是买荔枝派nano方便,35元一片包邮 ^_^
现在还有包邮的吗,打算整。。。。
离线
电阻触摸接口有验证吗,好像不对呀。屏接线与荔枝派是反的,一个是RGB,一个是BGR.
离线
电阻触摸接口有验证吗,好像不对呀。屏接线与荔枝派是反的,一个是RGB,一个是BGR.
有寄存器可以切换, 全志soc设计的时候就考虑这种情况了, 方便布线吧.
离线
有寄存器可以切换, 全志soc设计的时候就考虑这种情况了, 方便布线吧.
RGB这个我知道,我只是表明它的板与荔枝派是反的
离线
电阻触摸接口有验证吗,好像不对呀。屏接线与荔枝派是反的,一个是RGB,一个是BGR.
这里有RGB/BGR的切换补丁:
https://gitee.com/jiang_xing/f1c100s_buildroot/blob/master/board/f1c100s/patch/linux_kernel.patch
--- a/arch/arm/boot/dts/suniv-f1c100s.dtsi 2019-08-29 14:30:28.000000000 +0800
+++ b/arch/arm/boot/dts/suniv-f1c100s.dtsi 2020-01-21 19:26:46.466638364 +0800
@@ -4,6 +4,10 @@
* Copyright 2018 Mesih Kilinc <mesihkilinc@gmail.com>
*/
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/suniv-ccu-f1c100s.h>
+#include <dt-bindings/reset/suniv-ccu-f1c100s.h>
+
/ {
#address-cells = <1>;
#size-cells = <1>;
@@ -31,6 +35,12 @@
device_type = "cpu";
};
};
+
+ de: display-engine {
+ compatible = "allwinner,suniv-f1c100s-display-engine";
+ allwinner,pipelines = <&fe0>;
+ status = "disabled";
+ };
soc {
compatible = "simple-bus";
@@ -62,6 +72,68 @@
};
};
+ spi0: spi@1c05000 {
+ compatible = "allwinner,suniv-spi",
+ "allwinner,sun8i-h3-spi";
+ reg = <0x01c05000 0x1000>;
+ interrupts = <10>;
+ clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_BUS_SPI0>;
+ clock-names = "ahb", "mod";
+ resets = <&ccu RST_BUS_SPI0>;
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ spi1: spi@1c06000 {
+ compatible = "allwinner,suniv-spi",
+ "allwinner,sun8i-h3-spi";
+ reg = <0x01c06000 0x1000>;
+ interrupts = <11>;
+ clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_BUS_SPI1>;
+ clock-names = "ahb", "mod";
+ resets = <&ccu RST_BUS_SPI1>;
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ tcon0: lcd-controller@1c0c000 {
+ compatible = "allwinner,suniv-f1c100s-tcon";
+ reg = <0x01c0c000 0x1000>;
+ interrupts = <29>;
+ clocks = <&ccu CLK_BUS_LCD>,
+ <&ccu CLK_TCON>;
+ clock-names = "ahb",
+ "tcon-ch0";
+ clock-output-names = "tcon-pixel-clock";
+ resets = <&ccu RST_BUS_LCD>;
+ reset-names = "lcd";
+ status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ tcon0_in: port@0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0>;
+
+ tcon0_in_be0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&be0_out_tcon0>;
+ };
+ };
+
+ tcon0_out: port@1 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <1>;
+ };
+ };
+ };
+
ccu: clock@1c20000 {
compatible = "allwinner,suniv-f1c100s-ccu";
reg = <0x01c20000 0x400>;
@@ -71,6 +143,19 @@
#reset-cells = <1>;
};
+ i2c0: i2c@1C27000 {
+ compatible = "allwinner,sun6i-a31-i2c";
+ reg = <0x01C27000 0x400>;
+ interrupts = <7>;
+ clocks = <&ccu CLK_BUS_I2C0>;
+ resets = <&ccu RST_BUS_I2C0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c0_pins>;
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
intc: interrupt-controller@1c20400 {
compatible = "allwinner,suniv-f1c100s-ic";
reg = <0x01c20400 0x400>;
@@ -82,17 +167,41 @@
compatible = "allwinner,suniv-f1c100s-pinctrl";
reg = <0x01c20800 0x400>;
interrupts = <38>, <39>, <40>;
- clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
+ clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
clock-names = "apb", "hosc", "losc";
gpio-controller;
interrupt-controller;
#interrupt-cells = <3>;
#gpio-cells = <3>;
+ i2c0_pins: i2c0 {
+ pins = "PE11", "PE12";
+ function = "i2c0";
+ };
+
uart0_pe_pins: uart0-pe-pins {
pins = "PE0", "PE1";
function = "uart0";
};
+
+ lcd_rgb666_pins: lcd-rgb666-pins {
+ pins = "PD0", "PD1", "PD2", "PD3", "PD4",
+ "PD5", "PD6", "PD7", "PD8", "PD9",
+ "PD10", "PD11", "PD12", "PD13", "PD14",
+ "PD15", "PD16", "PD17", "PD18", "PD19",
+ "PD20", "PD21";
+ function = "lcd";
+ };
+
+ mmc0_pins: mmc0-pins {
+ pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
+ function = "mmc0";
+ };
+
+ spi0_pins_a: spi0-pins-pc {
+ pins = "PC0", "PC1", "PC2", "PC3";
+ function = "spi0";
+ };
};
timer@1c20c00 {
@@ -102,20 +211,49 @@
clocks = <&osc24M>;
};
+ mmc0: mmc@1c0f000 {
+ compatible = "allwinner,suniv-f1c100s-mmc",
+ "allwinner,sun7i-a20-mmc";
+ reg = <0x01c0f000 0x1000>;
+ clocks = <&ccu CLK_BUS_MMC0>,
+ <&ccu CLK_MMC0>,
+ <&ccu CLK_MMC0_OUTPUT>,
+ <&ccu CLK_MMC0_SAMPLE>;
+ clock-names = "ahb",
+ "mmc",
+ "output",
+ "sample";
+ resets = <&ccu RST_BUS_MMC0>;
+ reset-names = "ahb";
+ interrupts = <23>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc0_pins>;
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
wdt: watchdog@1c20ca0 {
compatible = "allwinner,suniv-f1c100s-wdt",
"allwinner,sun4i-a10-wdt";
reg = <0x01c20ca0 0x20>;
};
+ lradc: lradc@1C23400 {
+ compatible = "allwinner,sun4i-a10-lradc-keys";
+ reg = <0x01C23400 0x400>;
+ interrupts = <22>;
+ status = "disabled";
+ };
+
uart0: serial@1c25000 {
compatible = "snps,dw-apb-uart";
reg = <0x01c25000 0x400>;
interrupts = <1>;
reg-shift = <2>;
reg-io-width = <4>;
- clocks = <&ccu 38>;
- resets = <&ccu 24>;
+ clocks = <&ccu CLK_BUS_UART0>;
+ resets = <&ccu RST_BUS_UART0>;
status = "disabled";
};
@@ -125,8 +263,8 @@
interrupts = <2>;
reg-shift = <2>;
reg-io-width = <4>;
- clocks = <&ccu 39>;
- resets = <&ccu 25>;
+ clocks = <&ccu CLK_BUS_UART1>;
+ resets = <&ccu RST_BUS_UART1>;
status = "disabled";
};
@@ -136,9 +274,107 @@
interrupts = <3>;
reg-shift = <2>;
reg-io-width = <4>;
- clocks = <&ccu 40>;
- resets = <&ccu 26>;
+ clocks = <&ccu CLK_BUS_UART2>;
+ resets = <&ccu RST_BUS_UART2>;
+ status = "disabled";
+ };
+
+ usb_otg: usb@1c13000 {
+ compatible = "allwinner,suniv-musb";
+ reg = <0x01c13000 0x0400>;
+ clocks = <&ccu CLK_BUS_OTG>;
+ resets = <&ccu RST_BUS_OTG>;
+ interrupts = <26>;
+ interrupt-names = "mc";
+ phys = <&usbphy 0>;
+ phy-names = "usb";
+ extcon = <&usbphy 0>;
+ allwinner,sram = <&otg_sram 1>;
+ status = "disabled";
+ };
+
+ usbphy: phy@1c13400 {
+ compatible = "allwinner,suniv-usb-phy";
+ reg = <0x01c13400 0x10>;
+ reg-names = "phy_ctrl";
+ clocks = <&ccu CLK_USB_PHY0>;
+ clock-names = "usb0_phy";
+ resets = <&ccu RST_USB_PHY0>;
+ reset-names = "usb0_reset";
+ #phy-cells = <1>;
+ status = "disabled";
+ };
+
+ fe0: display-frontend@1e00000 {
+ compatible = "allwinner,suniv-f1c100s-display-frontend";
+ reg = <0x01e00000 0x20000>;
+ interrupts = <30>;
+ clocks = <&ccu CLK_BUS_DE_FE>, <&ccu CLK_DE_FE>,
+ <&ccu CLK_DRAM_DE_FE>;
+ clock-names = "ahb", "mod",
+ "ram";
+ resets = <&ccu RST_BUS_DE_FE>;
status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ fe0_out: port@1 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <1>;
+
+ fe0_out_be0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&be0_in_fe0>;
+ };
+ };
+ };
+ };
+
+ be0: display-backend@1e60000 {
+ compatible = "allwinner,suniv-f1c100s-display-backend";
+ reg = <0x01e60000 0x10000>;
+ reg-names = "be";
+ interrupts = <31>;
+ clocks = <&ccu CLK_BUS_DE_BE>, <&ccu CLK_DE_BE>,
+ <&ccu CLK_DRAM_DE_BE>;
+ clock-names = "ahb", "mod",
+ "ram";
+ resets = <&ccu RST_BUS_DE_BE>;
+ reset-names = "be";
+ assigned-clocks = <&ccu CLK_DE_BE>;
+ assigned-clock-rates = <300000000>;
+ rgb-channel-swap = <0>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ be0_in: port@0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0>;
+
+ be0_in_fe0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&fe0_out_be0>;
+ };
+ };
+
+ be0_out: port@1 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <1>;
+
+ be0_out_tcon0: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&tcon0_in_be0>;
+ };
+ };
+ };
};
};
};
+
--- a/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts 2019-08-29 14:30:28.000000000 +0800
+++ b/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts 2020-01-21 19:26:46.470638361 +0800
@@ -1,10 +1,14 @@
-// SPDX-License-Identifier: (GPL-2.0+ OR X11)
/*
* Copyright 2018 Icenowy Zheng <icenowy@aosc.io>
*/
/dts-v1/;
+
#include "suniv-f1c100s.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include "sunxi-common-regulators.dtsi"
/ {
model = "Lichee Pi Nano";
@@ -12,11 +16,142 @@
aliases {
serial0 = &uart0;
+ spi0 = &spi0;
};
chosen {
stdout-path = "serial0:115200n8";
};
+
+ reg_vcc3v3: vcc3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+
+ panel: panel {
+ compatible = "ampire,am-480272h3tmqw-t01h";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ enable-gpios = <&pio 4 6 GPIO_ACTIVE_HIGH>;
+ power-supply = <®_vcc3v3>;
+
+ port@0 {
+ reg = <0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ panel_input: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&tcon0_out_lcd>;
+ };
+ };
+ };
+};
+
+&otg_sram {
+ status = "okay";
+};
+
+&usb_otg {
+ dr_mode = "otg";
+ status = "okay";
+};
+
+&usbphy {
+ usb0_id_det-gpio = <&pio 4 2 GPIO_ACTIVE_HIGH>; /* PE2 */
+ status = "okay";
+};
+
+&pio {
+ vcc-pc-supply = <®_vcc3v3>;
+ vcc-pd-supply = <®_vcc3v3>;
+ vcc-pe-supply = <®_vcc3v3>;
+ vcc-pf-supply = <®_vcc3v3>;
+};
+
+&be0 {
+ status = "okay";
+};
+
+&de {
+ status = "okay";
+};
+
+&tcon0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_rgb666_pins>;
+ status = "okay";
+};
+
+&tcon0_out {
+ tcon0_out_lcd: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&panel_input>;
+ };
+};
+
+&i2c0 {
+ pinctrl-0 = <&i2c0_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&mmc0 {
+ vmmc-supply = <®_vcc3v3>;
+ bus-width = <4>;
+ broken-cd;
+ status = "okay";
+};
+
+&pio {
+ ts_reset_pin: ts_reset_pin@0 {
+ pins = "PE9";
+ function = "gpio_out";
+ };
+};
+
+&spi0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_pins_a>;
+ status = "okay";
+
+ flash: w25q128@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "winbond,w25q128", "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <50000000>;
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "u-boot";
+ reg = <0x000000 0x100000>;
+ read-only;
+ };
+
+ partition@100000 {
+ label = "dtb";
+ reg = <0x100000 0x10000>;
+ read-only;
+ };
+
+ partition@110000 {
+ label = "kernel";
+ reg = <0x110000 0x400000>;
+ read-only;
+ };
+
+ partition@520000 {
+ label = "rootfs";
+ reg = <0x510000 0xAF0000>;
+ };
+ };
+ };
};
&uart0 {
--- a/drivers/mtd/spi-nor/spi-nor.c 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/mtd/spi-nor/spi-nor.c 2020-01-21 19:26:46.470638361 +0800
@@ -2118,7 +2118,7 @@
},
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
- { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
+ { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, 0) },
{ "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c 2020-01-21 19:26:46.470638361 +0800
@@ -1419,6 +1419,15 @@
return 0;
}
+static const struct sun4i_tcon_quirks suniv_f1c100s_quirks = {
+ /*
+ * The F1C100s SoC has a second channel in TCON, but the clock input of
+ * it is not documented.
+ */
+ .has_channel_0 = true,
+ /* .has_channel_1 = true, */
+};
+
static const struct sun4i_tcon_quirks sun4i_a10_quirks = {
.has_channel_0 = true,
.has_channel_1 = true,
@@ -1487,6 +1496,7 @@
/* sun4i_drv uses this list to check if a device node is a TCON */
const struct of_device_id sun4i_tcon_of_table[] = {
+ { .compatible = "allwinner,suniv-f1c100s-tcon", .data = &suniv_f1c100s_quirks },
{ .compatible = "allwinner,sun4i-a10-tcon", .data = &sun4i_a10_quirks },
{ .compatible = "allwinner,sun5i-a13-tcon", .data = &sun5i_a13_quirks },
{ .compatible = "allwinner,sun6i-a31-tcon", .data = &sun6i_a31_quirks },
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c 2020-01-21 19:26:46.470638361 +0800
@@ -164,7 +164,8 @@
static bool sun4i_drv_node_is_frontend(struct device_node *node)
{
- return of_device_is_compatible(node, "allwinner,sun4i-a10-display-frontend") ||
+ return of_device_is_compatible(node, "allwinner,suniv-f1c100s-display-frontend") ||
+ of_device_is_compatible(node, "allwinner,sun4i-a10-display-frontend") ||
of_device_is_compatible(node, "allwinner,sun5i-a13-display-frontend") ||
of_device_is_compatible(node, "allwinner,sun6i-a31-display-frontend") ||
of_device_is_compatible(node, "allwinner,sun7i-a20-display-frontend") ||
@@ -404,6 +405,7 @@
}
static const struct of_device_id sun4i_drv_of_table[] = {
+ { .compatible = "allwinner,suniv-f1c100s-display-engine" },
{ .compatible = "allwinner,sun4i-a10-display-engine" },
{ .compatible = "allwinner,sun5i-a10s-display-engine" },
{ .compatible = "allwinner,sun5i-a13-display-engine" },
--- a/drivers/gpu/drm/sun4i/sunxi_engine.h 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sunxi_engine.h 2020-01-21 19:26:46.470638361 +0800
@@ -124,6 +124,7 @@
struct regmap *regs;
int id;
+ int rgb_swap;
/* Engine list management */
struct list_head list;
--- a/drivers/gpu/drm/sun4i/sun4i_backend.h 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_backend.h 2020-01-21 19:30:43.086543111 +0800
@@ -92,6 +92,7 @@
#define SUN4I_BACKEND_LAY_FBFMT_RGB888 (11 << 8)
#define SUN4I_BACKEND_LAY_FBFMT_ARGB4444 (12 << 8)
#define SUN4I_BACKEND_LAY_FBFMT_RGBA4444 (13 << 8)
+#define SUN4I_BACKEND_LAY_RGB_SWAP (1 << 2)
#define SUN4I_BACKEND_DLCDPCTL_REG 0x8b0
#define SUN4I_BACKEND_DLCDPFRMBUF_ADDRCTL_REG 0x8b4
--- a/drivers/gpu/drm/sun4i/sun4i_backend.c 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/gpu/drm/sun4i/sun4i_backend.c 2020-01-21 19:26:46.542638322 +0800
@@ -293,9 +293,16 @@
return ret;
}
- regmap_update_bits(backend->engine.regs,
- SUN4I_BACKEND_ATTCTL_REG1(layer),
- SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+ if (backend->engine.rgb_swap) {
+ regmap_update_bits(backend->engine.regs,
+ SUN4I_BACKEND_ATTCTL_REG1(layer),
+ SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT | SUN4I_BACKEND_LAY_RGB_SWAP,
+ val | SUN4I_BACKEND_LAY_RGB_SWAP);
+ } else {
+ regmap_update_bits(backend->engine.regs,
+ SUN4I_BACKEND_ATTCTL_REG1(layer),
+ SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+ }
return 0;
}
@@ -316,10 +323,17 @@
SUN4I_BACKEND_ATTCTL_REG0(layer),
SUN4I_BACKEND_ATTCTL_REG0_LAY_VDOEN,
SUN4I_BACKEND_ATTCTL_REG0_LAY_VDOEN);
-
- regmap_update_bits(backend->engine.regs,
- SUN4I_BACKEND_ATTCTL_REG1(layer),
- SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+
+ if (backend->engine.rgb_swap) {
+ regmap_update_bits(backend->engine.regs,
+ SUN4I_BACKEND_ATTCTL_REG1(layer),
+ SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT | SUN4I_BACKEND_LAY_RGB_SWAP,
+ val | SUN4I_BACKEND_LAY_RGB_SWAP);
+ } else {
+ regmap_update_bits(backend->engine.regs,
+ SUN4I_BACKEND_ATTCTL_REG1(layer),
+ SUN4I_BACKEND_ATTCTL_REG1_LAY_FBFMT, val);
+ }
return 0;
}
@@ -818,6 +832,12 @@
backend->engine.id = sun4i_backend_of_get_id(dev->of_node);
if (backend->engine.id < 0)
return backend->engine.id;
+
+ backend->engine.rgb_swap = 0;
+ if (of_find_property(dev->of_node, "rgb-channel-swap", NULL)) {
+ of_property_read_u32(dev->of_node, "rgb-channel-swap", &backend->engine.rgb_swap);
+ dev_warn(dev, "backend rgb channel swap(%d)\n", backend->engine.rgb_swap);
+ }
backend->frontend = sun4i_backend_find_frontend(drv, dev->of_node);
if (IS_ERR(backend->frontend))
@@ -972,6 +992,9 @@
return 0;
}
+static const struct sun4i_backend_quirks suniv_backend_quirks = {
+};
+
static const struct sun4i_backend_quirks sun4i_backend_quirks = {
.needs_output_muxing = true,
};
@@ -996,6 +1019,10 @@
static const struct of_device_id sun4i_backend_of_table[] = {
{
+ .compatible = "allwinner,suniv-f1c100s-display-backend",
+ .data = &suniv_backend_quirks,
+ },
+ {
.compatible = "allwinner,sun4i-a10-display-backend",
.data = &sun4i_backend_quirks,
},
--- a/drivers/phy/allwinner/phy-sun4i-usb.c 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c 2020-01-21 19:26:46.542638322 +0800
@@ -98,6 +98,7 @@
#define POLL_TIME msecs_to_jiffies(250)
enum sun4i_usb_phy_type {
+ suniv_phy,
sun4i_a10_phy,
sun6i_a31_phy,
sun8i_a33_phy,
@@ -859,6 +860,14 @@
return 0;
}
+static const struct sun4i_usb_phy_cfg suniv_cfg = {
+ .num_phys = 1,
+ .type = suniv_phy,
+ .disc_thresh = 3,
+ .phyctl_offset = REG_PHYCTL_A10,
+ .dedicated_clocks = true,
+};
+
static const struct sun4i_usb_phy_cfg sun4i_a10_cfg = {
.num_phys = 3,
.type = sun4i_a10_phy,
@@ -973,6 +982,7 @@
};
static const struct of_device_id sun4i_usb_phy_of_match[] = {
+ { .compatible = "allwinner,suniv-usb-phy", .data = &suniv_cfg },
{ .compatible = "allwinner,sun4i-a10-usb-phy", .data = &sun4i_a10_cfg },
{ .compatible = "allwinner,sun5i-a13-usb-phy", .data = &sun5i_a13_cfg },
{ .compatible = "allwinner,sun6i-a31-usb-phy", .data = &sun6i_a31_cfg },
--- a/drivers/usb/musb/sunxi.c 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/usb/musb/sunxi.c 2020-01-21 19:26:46.542638322 +0800
@@ -714,14 +714,16 @@
INIT_WORK(&glue->work, sunxi_musb_work);
glue->host_nb.notifier_call = sunxi_musb_host_notifier;
- if (of_device_is_compatible(np, "allwinner,sun4i-a10-musb"))
+ if (of_device_is_compatible(np, "allwinner,sun4i-a10-musb") ||
+ of_device_is_compatible(np, "allwinner,suniv-musb"))
set_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags);
if (of_device_is_compatible(np, "allwinner,sun6i-a31-musb"))
set_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags);
if (of_device_is_compatible(np, "allwinner,sun8i-a33-musb") ||
- of_device_is_compatible(np, "allwinner,sun8i-h3-musb")) {
+ of_device_is_compatible(np, "allwinner,sun8i-h3-musb") ||
+ of_device_is_compatible(np, "allwinner,suniv-musb")) {
set_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags);
set_bit(SUNXI_MUSB_FL_NO_CONFIGDATA, &glue->flags);
}
@@ -812,6 +814,7 @@
}
static const struct of_device_id sunxi_musb_match[] = {
+ { .compatible = "allwinner,suniv-musb", },
{ .compatible = "allwinner,sun4i-a10-musb", },
{ .compatible = "allwinner,sun6i-a31-musb", },
{ .compatible = "allwinner,sun8i-a33-musb", },
--- a/drivers/video/fbdev/core/fbcon.c 2019-08-29 14:30:28.000000000 +0800
+++ b/drivers/video/fbdev/core/fbcon.c 2020-01-21 19:26:46.542638322 +0800
@@ -368,6 +368,7 @@
static void fb_flashcursor(struct work_struct *work)
{
+#if 0
struct fb_info *info = container_of(work, struct fb_info, queue);
struct fbcon_ops *ops = info->fbcon_par;
struct vc_data *vc = NULL;
@@ -398,6 +399,7 @@
ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
get_color(vc, info, c, 0));
console_unlock();
+#endif
}
static void cursor_timer_handler(struct timer_list *t)
离线
大神, 请教下, 您的原理图中JP3是什么?
CSI接口 需要两个ME6206? 我看两个VCC2.8都用到
离线
MARK一下,有计划跟随大佬脚步做一下...
离线
大神, 请教下, 您的原理图中JP3是什么?
CSI接口 需要两个ME6206? 我看两个VCC2.8都用到
JP3是切换摄像头DVDD的供电,不同摄像头要求的不同。有的用2.8V,就去掉U7,接上JP3。有的不是2.8V的摄像头,则自己换成合适的LDO到U7,打开JP3。
离线
菠萝派?
离线
下载了不少有用的东西,现在不知道怎么回复,求助
离线
楼主,这个原理图有公版的吗?
离线
我該如何運行?
离线
焊了两次电源都没搞好,难道买了假3036
离线
有音频口么?没看到音频口呢?
是扩展板外接么?
离线
什么时候开卖?坐等入手进坑!;)
离线
你好,请问f1c200s可以兼容吗?我焊的板子电源芯片出来3路电正常,但ddr的svref电压为0v,usb没有反应。
离线
兼容,只是DRAM容量不同.
我的板子现在VCC-DRAM是2.52v,VCC-CORE是1.09v(电源改了个电阻,按说明书上的),AVCC是3.34v。晶振有起振,24M。插上USB,SPI0的CS有被拉高,手动接地也没反应。USB数据线没有数据,没有反应,使用ubuntu,windows两个系统试了都没反应。焊接过几块板子都一样。还有什么需要注意的吗?
最近编辑记录 grantho (2020-05-07 22:15:10)
离线
正在找相关的资源
离线
楼主能出个原理图吗
离线
微凉VeiLiang 大神,你画的板子我焊好了,测试三路供电都正常,测试f1c100s的供电条件都达到了,可是为何插入电脑,usb不识别,我对比了下荔枝派nano的usb接法,和你的有点不一样,usb id你是悬空未接,nano却是接了一个47k的上拉电阻,应该怎么让电脑识别呢?
离线
这是我查到的关于usb的资料
USB上的DM,DP拉电阻分析
USB数据端子:
1、DM+:Data Minus,数据负信号;
2、DP -:USB Data Positive,数据正信号;
USB电源端子:
1、VCC(Voltage to Current Converter)正极
2、GND负极(Ground即地线)
usb有主从设备之分,主设备有:pc, 现在市面上的那些插u-disk即可播放mp3的“mp3”之类的,
usb 信号是差分信号,信号线为D+, D-,。 在usb host 端, D+,D- 各接一个15kohm 的下拉电阻, 而在usb device端,这时就有高速低速设备的区别了。usb1.0, 1.1,2.0协议中都有定义高低速设备以满足不同情况的需求,这些在硬件上的区别就是:高速设备:d+ 接一个1.5kohm的上拉电阻,d-不接;低速设备则相反。
这样当usb device 插入到host中时,如果是高速设备,则d+被拉高,d-不变;低速设备则与之相反。这个上拉过程需要大概2.5us的时间,host这这个时间内便检测到了该信号,即可判断有device plug in,和该device的类型,然后开始通讯,枚举。。。等。
USB OTG(on the go)就是既可以做host又可以做client
我们一般是作为client接受pc传输数据,作为host时可以接打印机直接把手机中的照片打印出来
判别是host还是client是靠USB_ID这根pin
当作为client时,USB_ID基本是悬空的(内部有上拉)
如果侦测到USB_ID被拉低,就被认为是作为host,向外输出
所以需要外部client设备把USB_ID拉低
离线
微凉VeiLiang 大神,你画的板子我焊好了,测试三路供电都正常,测试f1c100s的供电条件都达到了https://whycan.cn/files/members/2228/f1c100s工作条件.jpg,可是为何插入电脑,usb不识别,我对比了下荔枝派nano的usb接法,和你的有点不一样,usb id你是悬空未接,nano却是接了一个47k的上拉电阻,应该怎么让电脑识别呢?
那个usb_id可以不接的,我也参照这个画了一板,能正常使用。
离线
像我这样的问题 可能会出在什么地方?
离线
感谢楼主分享,最近准备学习画一个f1c100s的板子,疯狂搜索参考中。话说晕哥这个有效回复可太让人为难了,是不是考虑开个灌水区,每次回复都小心翼翼的....
离线
像我这样的问题 可能会出在什么地方?
确认芯片焊接没有问题,我是用风枪+锡膏,没有用锡膏可能会没有焊好哦
离线
确认芯片焊接没有问题,我是用风枪+锡膏,没有用锡膏可能会没有焊好哦
我也是用风枪+锡膏焊接的,我还万用表测试了,接触肯定是好的,我焊接了三块板子都是这样,应该不是焊接问题
离线
我也是用风枪+锡膏焊接的,我还万用表测试了,接触肯定是好的,我焊接了三块板子都是这样,应该不是焊接问题
确认下flash短接5脚和6脚上电看看。还有就是Rx不要接着线,因为怕io反供电导致上电不成功
离线
这是我查到的关于usb的资料
USB上的DM,DP拉电阻分析
USB数据端子:
1、DM+:Data Minus,数据负信号;
2、DP -:USB Data Positive,数据正信号;
USB电源端子:
1、VCC(Voltage to Current Converter)正极
2、GND负极(Ground即地线)usb有主从设备之分,主设备有:pc, 现在市面上的那些插u-disk即可播放mp3的“mp3”之类的,
usb 信号是差分信号,信号线为D+, D-,。 在usb host 端, D+,D- 各接一个15kohm 的下拉电阻, 而在usb device端,这时就有高速低速设备的区别了。usb1.0, 1.1,2.0协议中都有定义高低速设备以满足不同情况的需求,这些在硬件上的区别就是:高速设备:d+ 接一个1.5kohm的上拉电阻,d-不接;低速设备则相反。
这样当usb device 插入到host中时,如果是高速设备,则d+被拉高,d-不变;低速设备则与之相反。这个上拉过程需要大概2.5us的时间,host这这个时间内便检测到了该信号,即可判断有device plug in,和该device的类型,然后开始通讯,枚举。。。等。
USB OTG(on the go)就是既可以做host又可以做client
我们一般是作为client接受pc传输数据,作为host时可以接打印机直接把手机中的照片打印出来
判别是host还是client是靠USB_ID这根pin
当作为client时,USB_ID基本是悬空的(内部有上拉)
如果侦测到USB_ID被拉低,就被认为是作为host,向外输出
所以需要外部client设备把USB_ID拉低
和ID脚没有关系,usb 外设的id是内置支持软件上下拉的。没有引出来到引脚的
离线
确认下flash短接5脚和6脚上电看看。还有就是Rx不要接着线,因为怕io反供电导致上电不成功
短接了5脚和6脚上电还是一样的没反应,Rx没接线。
离线
短接了5脚和6脚上电还是一样的没反应,Rx没接线。
那会不会是晶振问题。看看晶振频率,有没有起振
离线
那会不会是晶振问题。看看晶振频率,有没有起振
大神,可否方便加个qq,我的76614842
离线
用示波器测量了波形,有起振,频率是24mhz左右
离线
我的板子现在VCC-DRAM是2.52v,VCC-CORE是1.09v(电源改了个电阻,按说明书上的),AVCC是3.34v。晶振有起振,24M。插上USB,SPI0的CS有被拉高,手动接地也没反应。USB数据线没有数据,没有反应,使用ubuntu,windows两个系统试了都没反应。焊接过几块板子都一样。还有什么需要注意的吗?
请问你现在问题解决了没有?USB ID是怎么处理的呢?
离线
请问你现在问题解决了没有?USB ID是怎么处理的呢?
没解决啊,我买了块tiny200先测试一下软件方案。USB ID应该是可以不接的,PC是HOST,USB口就四根线,ID接了也没用。USB ID是用来给主机做识别,区分工作模式的,现在板子肯定是从机。过几天再调调
离线
楼主的硬件运行稳定吗?我想来一块试试
离线
MARK,感谢楼主!
离线
MARK,真心感谢楼主。赞赞赞
离线
usb接上电脑没反应的问题,我重新开了一贴,微凉VeiLiang 大神能否帮看下
离线
前些天调试了下OWA接口,就是输出S/PDIF信号的那个接口,现在可以和音频同步输出了。^-^ =)
离线
最近也在研究f1c100s,参考一下设计文件
离线
这个菠萝的logo很好看啊,就是白色油墨什么鬼啊,看不见了哈哈哈
离线
烧录时要短接flash的1、4脚,在这里加一个按键不是更方便些?
离线
烧录时要短接flash的1、4脚,在这里加一个按键不是更方便些?
有留了一个按键。按着按键上电就是进入 fel(按键是短接flash的clk脚到地)
离线
有摄像头驱动吗
离线
感谢楼主的分享
离线
感谢大神,跟着一起学习了,
离线
感谢分享学习,正好用上。
离线
多谢楼主无私,下载学习了
离线
多谢楼主无私,下载学习
离线
感谢大神,跟着一起学习了,多谢楼主无私!
离线
看着还不错,重点是能用起来把,看到做出实物了。
离线
这板子看着真不错 我有个 nano的板子 没有IO引出 回头打个样 挪过来 玩玩
离线
IkY
离线
楼主的EA3036哪儿买的,我淘宝买的3036没输出。
离线
请问F1C100还会有其它系列的吗?
离线
是。下一个系列是“ Allwinner V3S”,在很多方面看起来一样,但更大的dram
离线
学习下,现在刚开始整f1c100s,想自己话图。
离线
感谢楼主的无私分享。。。
离线
楼主,摄像头代码能否分享一份
离线
用示波器测量了波形,有起振,频率是24mhz左右
这个我也遇到了,VRA2,VRA1的电容电阻换成 1uF 和200K就行
离线
刚好需要,一个DEMO来参考设计一个板子,楼主及时雨呀。
离线
这板子看着真不错 我有个 nano的板子 没有IO引出 回头打个样 挪过来 玩玩
离线
顶一个!持续关注!
离线
好东西,支持,,,
离线
这个好 支持
离线
强,正需要学习
离线
好东西!!!!!!!!!!!!!!!!!!!!!!
离线
顶起来学习,感谢大神分享
离线
老哥,我想参考下 感谢
离线
顶起来,好东西,谢谢!!!
离线
不知道如何下载
离线
谢谢分享github连接
离线
感谢老铁的开源分享 没事开始研究
离线
支持一下,感谢分享
离线
赶紧mark一下,下载PCB文件自己diy一下
离线
用示波器测量了波形,有起振,频率是24mhz左右
你好,我的问题可能也是晶振不起振的问题,能加你qq交流下吗
离线
电源树长在了外面,可可爱爱
离线
谢谢,学习了。用F1C100s画了好几块板了,每次供电部分都布得很纠结。下次学你的做法,在底部焊盘周围走线。
发现我把底部焊盘画的过大了,所以没什么空间走线。
HAHAHAHA,我也是这么走的,走线外面太难走了,穿不出去
离线
好东西啊,感谢楼主,最近想搞块板子结果芯片全部涨价了
离线
离线
问下,用的这个工程打样的板子回来了,贴的32MB的QSPI FLASH,很大概率的时候经常擦除flash失败导致新固件有很多时候写不进去,请问是怎么回事?
技术狂,追求技术更高层,哈哈哈
离线
偶尔烧录启动后卡在starting kernel。。。,但是多按几次重启按钮重启又能起来,有没有大佬知道是啥问题
离线
我也刚画了一块。
引出RGBLCD接口
通过sl2.1A拓展2个USBA口
离线
老哥,这个屏幕参数怎么设置,我调了好久换了好几种不同的参数,都灭有正常点亮,用荔枝派官方固件是可以正常显示的。
这是我的屏幕参数:
这是我现在点的样子
离线
我的lsusb都找不到芯片,晶振示波器起振的
离线
嘉立创下单直接开搞
离线