开机信息里相关信息如下:
[ 2.323168] sunxi-i2c sunxi-i2c1: sunxi-i2c1 supply twi not found, using dummy regulator
[ 2.333103] sunxi-i2c sunxi-i2c1: probe success
[ 2.338516] sun8iw20-pinctrl 2000000.pinctrl: pin PE13 already requested by 2000000.pinctrl:141; cannot claim for 2502800
[ 2.351237] sun8iw20-pinctrl 2000000.pinctrl: pin-141 (2502800.twi) status -22
[ 2.359364] sun8iw20-pinctrl 2000000.pinctrl: could not request pin 141 (PE13) from group PE13 on device 2000000.pinctrl
[ 2.371678] sunxi-i2c 2502800.twi: Error applying setting, reverse things back
[ 2.379819] sunxi-i2c: probe of 2502800.twi failed with error -22
[ 2.388118] sun8iw20-pinctrl 2000000.pinctrl: 2000000.pinctrl supply vcc-pb not found, using dummy regulator
[ 2.400490] get ehci0-controller wakeup-source is fail.
内核设备树相关如下:
&pio {
twi2_pins_a: twi2@0 {
pins = "PE12", "PE13";
function = "twi2";
muxsel = <2>;
drive-strength = <10>;
};
twi2_pins_b: twi2@1 {
pins = "PE12", "PE13";
function = "gpio_in";
};
};
&twi2 {
clock-frequency = <400000>;
pinctrl-0 = <&twi2_pins_a>;
/* pinctrl-1 = <&twi2_pins_b>; */
pinctrl-names = "default", "sleep";
/* dmas = <&dma 45>, <&dma 45>; */
/* dma-names = "tx", "rx"; */
status = "okay";
adxl345: gpio@53 {
compatible = "allwinner, adxl345_i2c";
reg = <0x53>;
status = "okay";
};
};
将twi2_pins引脚改为PG14,PG15,能显示出i2c2设备。
请教,这是哪里设置错了?
附件是设备树文件。
board.txt
sun8iw20p1.txt
最近编辑记录 Gentlepig (2024-11-29 17:29:54)
离线
还有个问题:
按这个教程,我在/etc/init.d/目录下加了个S99qtapp,给予了执行权限,添加了如下内容。
#!/bin/sh
#
# Start Qt app
#
start() {
printf "Start qt app ..."
/home/app 1
}
stop() {
printf "Stopping qt app ..."
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
写了个简单应用,qDebug打印了个"hello"。可启动后,调试串口没看到有打印,手动执行倒是能看到。
离线
bt: bt@0 {
compatible = "allwinner,sunxi-bt";
clock-names = "32k-fanout1";
clocks = <&ccu CLK_FANOUT1_OUT>;
/*bt_power_num = <0x01>;*/
/*bt_power = "axp803-dldo1";*/
/*bt_io_regulator = "axp803-dldo1";*/
/*bt_io_vol = <3300000>;*/
/*bt_power_vol = <330000>;*/
bt_rst_n = <&pio PE 13 GPIO_ACTIVE_LOW>;
status = "disabled";
};
是不是这里占用了
离线
@bestikun
还真是,感谢。
把这个bt的引脚注释掉后,i2c2出现了。
之前只搜了PE13,没想到中间加个空格也不影响,对设备树语法还是不熟悉。
---------------------------------------------------
/* bt_rst_n = <&pio PE 13 GPIO_ACTIVE_LOW>; */
仔细想了想,这不是设备树的pio写法。PE 13本来就是两个参数。
注释了这句或者改为其他IO后,i2c2可以成功创建了,但是adb功能有没了。
发现设备树里usb0有这句:
/* usb_id_gpio = <&pio PE 12 GPIO_ACTIVE_HIGH>; */
和i2c2管脚也冲突了。
注释掉后正常了。
那么,usb id可以不用?
最近编辑记录 Gentlepig (2024-12-02 10:27:13)
离线
想接个中景园的1.14寸lcd屏幕,使用的是st7789v芯片,内核驱动里有个st7789v驱动,是用的软件模拟spi控制屏幕的,默认是240*240的。
直接用,在设备树里修改了分辨率和用到的gpio,结果背光亮,屏幕无显示。
中景园例程给的是单片机工程,比对了下初始化时发送的命令,修改st7789v.c里的初始化部分,改成发一样的命令,结果屏幕还是黑的。
单片机工程里用到了dc引脚,spi发送数据是8bit.st7789v.c里没用到dc管脚,发送9bit数据,第一bit表示命令或数据。按单片机工程修改为使用dc引脚,发送8bit数据,屏幕终于出现雪花点了,但是仍不正常。
看网上教程,执行 cat /dev/fb0 > screensnap,然后将screensnap传到Pc上以二进制方式查看:
$ ls -al
-rw-r--r-- 1 any any 129600 12月 2 16:33 screensnap
$ hexdump screensnap
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
001fa40
看软件模拟Spi发送数据时,每bit之间没有延迟,手动加了个延时,结果还是雪花点。
---------------------------------------------------------------------------------------
去掉延时。按找单片机例程,在st7789.c屏幕初始化的末尾,加了段区域填充的语句,结果屏幕初始化后,可以看到填充的句型,虽然分成了两条...
这么说,屏幕初始化其实是成功了。但是为何colorbar运行无反映?qt程序运行也无反映?
------------------------------------------------------------------------------------------
我是按单片机例程里填充区域写了几句:
初始化后,填充一小块矩形;
LCD_Address_Set(0, 0, 29, 29);
1 for (i = 0; i < 30; i++)
2 {
3 for (j = 0; j < 30; j++)
4 {
5 st7789v_spi_write_data(0xFF);
6 st7789v_spi_write_data(0xFF);
7 }
8 }
设置填充区域:
static void LCD_Address_Set(u16 x1, u16 y1, u16 x2, u16 y2)
1 {
2 st7789v_spi_write_cmd(0x2a);
3 st7789v_spi_write_data(0x00);
4 st7789v_spi_write_data(x1+52);
5 st7789v_spi_write_data(0x00);
6 st7789v_spi_write_data(x2+52);
7 st7789v_spi_write_cmd(0x2b);
8 st7789v_spi_write_data(0x00);
9 st7789v_spi_write_data(y1+40);
10 st7789v_spi_write_data(0x00);
11 st7789v_spi_write_data(y2+40);
12 st7789v_spi_write_cmd(0x2c);
13 }
这样,初始化后,屏幕确实可以刷出个白色矩形区域来。
但有个疑问:
struct __lcd_panel st7789v_panel = {
1 /* panel driver name, must mach the name of lcd_drv_name in sys_config.fex
2 */
3 .name = "st7789v",
4 .func = {
5 .cfg_panel_info = LCD_cfg_panel_info,
6 .cfg_open_flow = LCD_open_flow,
7 .cfg_close_flow = LCD_close_flow,
8 .lcd_user_defined_func = LCD_user_defined_func,
9 },
10 };
该驱动函数为上层函数其实只提供了这4个函数,user这个函数直接返回0。open函数里执行了屏幕初始化操作。
按单片机例程,无论画线还是画块,都是要先设置起始坐标的,也即是要发送0x2a, 0x2b, 0x2c这三组命令,但是我没看到有这些操作。
最近编辑记录 Gentlepig (2024-12-03 15:25:12)
离线
想照着tina spi lcd文档建个驱动,结果硬件spi没输出。此过程修改了设备树和内核配置。
又想着改回去吧,仍选择fb pannel里的st7789v驱动,设备树也改回选这个,结果编译烧录后,屏上连雪花点都没了。示波器测量软件spi的管脚,sclk, sda, dc, cs,都有信号。
执行cat /dev/fb0,结果输出一堆信息然后就不走了。我记得之前是没信息的。
root@TinaLinux:/# cat /dev/fb0
[ 24.384531] disp_al_manager_apply ouput_type:1
[ 24.389632] genirq: Flags mismatch irq 51. 00000004 (dispaly) vs. 00000004 (dispaly)
[ 24.398393] [DISP] lcd_clk_config,line:774:
[ 24.398404] disp 0, clk: pll(114000000),clk(114000000),dclk(19000000) dsi_rate(114000000)
[ 24.398404] clk real:pll(288000000),clk(288000000),dclk(24000000) dsi_rate(0)
[ 24.420776] [DISP] disp_sys_pwm_config,line:509:
[ 24.420778] disp_sys_pwm_Config, handle is NULL!
[ 24.431137] [DISP] disp_sys_pwm_set_polarity,line:528:
[ 24.431140] disp_sys_pwm_Set_Polarity, handle is NULL!
[ 32.532512] usb1-vbus: disabling
我看信息里又disp_sys_pwm_request,然后就把设备树里lcd_pwm_used = <1>这句给注释了,结果没效果,改为<0>后,才消失一行信息。
---------------------------------------------
索性把内核驱动里的pwm关掉,变成这样了:
oot@TinaLinux:/# cat /dev/fb0
[ 15.285819] disp_al_manager_apply ouput_type:1
[ 15.291006] genirq: Flags mismatch irq 51. 00000004 (dispaly) vs. 00000004 (dispaly)
[ 15.299774] [DISP] lcd_clk_config,line:774:
[ 15.299785] disp 0, clk: pll(114000000),clk(114000000),dclk(19000000) dsi_rate(114000000)
[ 15.299785] clk real:pll(288000000),clk(288000000),dclk(24000000) dsi_rate(0)
Flags mismatch irq 51. 00000004 (dispaly) vs. 00000004 (dispaly)
这咋还有中断了呢?
最近编辑记录 Gentlepig (2024-12-04 12:52:49)
离线