@weifeng88
BlueZ 使用 HCI 接口。可以进行HCI数据交换 通过 UART 或通过 USB。在大多数现代单板或 移动系统使用 UART。没有工作限制 将要。
UART 速度通常设置为每秒 1500000...3000000 位。理论上,即使对于 A2DP 配置文件(高质量音频)来说,这也足够了。
该串口适用于 BLE 操作,没有任何限制。
Alb702 发布的帖子
-
回复: V853支持蓝牙BLE:请问如何让V853连接一个nRF52840芯片?
-
回复: 为啥R329的linux调试那么复杂?
1.向命令行输出信息需要较少的硬件资源和驱动程序,比图形用户界面。例如,如果您的视频适配器驱动程序有故障,您将无法收到任何调试信息
-
Linux 中的许多命令只有控制台输出。如果调试过程中出现错误 您将无法在 GUI 中看到故障发生的位置。
-
如果您在遇到问题时到论坛寻求建议,控制台输出将包含比图像更有用的信息,并且描述问题的文件会小得多。
-
-
V853 SDK: VIN/ISP问题
我的项目安装了 v853s。使用的传感器是OV4689。SDK 中不支持该传感器。
我补充道:
OV4689 的内核驱动程序改编自 Allwinner V3s 上的工作项目 (sunxi-vfe)
我对用户空间库(AwISPApi)进行了更改:
我复制了文件.../isp520/libisp/isp_cfg/SENSOR_H/ov5658.h -> ov4689.h
在文件 ov4689.h 中,我将结构名称 ov5658... 替换为 ov4689...
表中 ISP 的系数值稍后将更改为正确的值。
在文件 ../isp520/libisp/isp_cfg/isp_ini_parse.c 中我添加了
#include“SENSOR_H/ov4689.h”,在 cfg_arr[] 中我添加了:
....
{"ov4689", "ov4689_isp_cfg", 2688, 1520, 30, 0, 0, &ov4689_isp_cfg},运行测试程序“camera”时出现以下错误:
[ 144.200651] [ov4689]sensor_detect read value is 0x46 camera: init successfully camera: image 1920x1080 30 fps init successfully [ 144.234573] [ov4689]sensor_s_stream on = 1, 1920*1080 fps: 2 code: 3007 [ 144.313297] [VIN_ERR]isp0 frame lost! [ 144.337600] [ov4689]s_fmt set width = 1920, height = 1080 [ 144.346640] [VIN_ERR]isp0 frame lost! [ISP]video device name is vin_video0 cutils:D/AWIspApi: F:awIspGetIspId, L:48, video0 --> isp0 >>>>>>>>>>>>>>>>>>>> ISP VERSION INFO <<<<<<<<<<<<<<<<<<< [ISP]version:V1.00 [ISP]tag : isp-500-520-v2.00 [ISP]branch: a50_merge [ISP]commit: 924456a4a4b18b614a8273f282b25ad4ee59f417 [ISP]date : Tue Feb 12 17:03:31 2019 +0800 [ISP]author: zhengjiangw[ 144.379995] [VIN_ERR]isp0 frame lost! ei -------------------------------------------------------- [ISP]register sensor entity is ov4689 [ISP]open isp device[0] success! [ISP_WARN]open /mnt/isp0_ctx_saved.bin success!!! [ISP]cannot find ov4689_1920_1080_2_0 isp config!!! [ISP]use ov4689 isp config. [ISP_ERR] func: ae_copy_tbl_from_ini, line: 1570,AE table capture is invalid! [ 144.413352] [VIN_ERR]isp0 frame lost! [ISP]create isp0 server thread! [ 144.446712] [VIN_ERR]isp0 frame lost! [ 144.480064] [VIN_ERR]isp0 frame lost! [ 144.513425] [VIN_ERR]isp0 frame lost! [ 144.546791] [VIN_ERR]isp0 frame lost! [ 144.580141] [VIN_ERR]isp0 frame lost! [ 144.613503] [VIN_ERR]isp0 frame lost! [ 144.646858] [VIN_ERR]isp0 frame lost! [ 144.680218] [VIN_ERR]isp0 frame lost! [ 144.713581] [VIN_ERR]isp0 frame lost! [ 144.746939] [VIN_ERR]isp0 frame lost!
1.为什么会出现错误
[ISP_ERR] func: ae_copy_tbl_from_ini, line: 1570,AE table capture is invalid!
??如果“AE_table”来自文件 ov4689.h,则该表的格式对应于 SDK 中的其他文件。 ae_copy_tbl_from_ini 函数位于 libisp_ae.so 库中。
SDK 中没有该库的源文件。是否可以找到源文件 libisp_ae.so 找出错误原因?2、 ISP 的内核驱动出现错误:sunxi_isp.c
[ 144.613503] [VIN_ERR]isp0 frame lost!
执行 isp_isr(...) 中断处理程序时出错
因为 ISP 中断寄存器中设置了 FRAME_LOST_PD 位。
出于什么原因可能会设置 FRAME_LOST_PD 位?
在哪里可以获取有关 V853s 的 ISP 寄存器的文档?日志显示,中断发生的周期为 33ms,即 30fps,与传感器设置相对应。由此可见,CSI 接口工作正常,故障发生在 ISP。
-
回复: V853SDK:奇怪的帧缓冲区操作
@awwwwa 在 V853SDK:奇怪的帧缓冲区操作 中说:
cat /sys/class/disp/disp/attr/sys
cat /sys/class/disp/disp/attr/sys screen 0: de_rate 300000000 hz, ref_fps:60 mgr0: 1920x1080 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[3] force_sync[0] unblank direct_show[false] iommu[1] dmabuf: cache[0] cache max[0] umap skip[0] umap skip max[52] lcd output backlight(150) fps:59.5 1920x1080 err:0 skip:154 irq:8267 vsync:0 vsync_skip:0 BUF enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[ 0] fb[1920,1080;1920,1080;1920,1080] crop[ 0, 0,1920,1080] frame[ 0, 0,1920,1080] addr[48400000, 0, 0] flags[0x 0] trd[0,0] depth[ 0]
"add layer" - i do not understanded.
-
回复: F1C200S TX Empty trigger 设置成1/2触发要怎么做?
@smbzd
驱动程序算法的解释。驱动程序开发很久以前就开始了,在 Allwinner A20 的 legacy kernel 版本 3.xx 时期。 为了不使驱动程序适应Linux内核的不同API,采用直接写入GPIO和UART寄存器的方式。
在我们的项目中,内核驱动程序和用户应用程序之间的数据交换是通过缓冲区进行的。 mmap 用于从用户空间访问缓冲区。 缓冲区包含用于接收和发送的数据以及控制结构。 为了开始传输,应用程序在缓冲区中设置一个特殊位。 驱动程序在 bum_poll() 函数的定时器中断中扫描该位(它位于不同的源代码中)。
您很可能会使用其他方法:read()/write()、ioctl()...,并且您不需要计时器。/* * suniv xbus driver * (timer+uart) * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * You should have received a copy of the GNU General Public License * along with this programOC; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <linux/module.h> #include <linux/kernel.h> #include <linux/moduleparam.h> #include <asm/uaccess.h> #include <asm/pgtable.h> #include <linux/fs.h> #include <linux/gfp.h> #include <linux/cdev.h> #include <linux/sched.h> #include <linux/interrupt.h> #include <linux/of.h> #include <linux/of_irq.h> #include <linux/of_platform.h> #include <linux/platform_device.h> #include <linux/delay.h> #include <linux/ioport.h> #include <linux/slab.h> #include <linux/io.h> #include <linux/clk.h> #include <linux/reset.h> #include <linux/mm.h> #include <linux/miscdevice.h> #include <linux/wait.h> #include <linux/poll.h> static int hw_init; static int bum_init(void); static void bum_poll(void); static void gpio_set(int port, int pin); static void gpio_clr(int port, int pin); static enum hrtimer_restart xbus_periodic(struct hrtimer *); static struct hrtimer htimer; static int k_period; static uint32_t norecv_timer; static int htimer_init(void) { k_period = ktime_set(0, 1000000); //1 ms hrtimer_init(&htimer, CLOCK_REALTIME, HRTIMER_MODE_REL); htimer.function = xbus_periodic; hrtimer_start(&htimer, k_period, HRTIMER_MODE_REL); return 0; } static void htimer_exit(void) { hrtimer_cancel(&htimer); } static void stop_send(void); static uint8_t * xbus_iobuf = 0; #define xbus_mmap_mem() (xbus_iobuf) /* -----------------------------Hardware registers mini description --------------------*/ /*GPIO--------------------------------------*/ typedef struct { uint32_t CFG[4]; uint32_t DAT; uint32_t DRV[2]; uint32_t PULL[2]; } port_struct_t; enum {PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, PORTG, PORTH,PORTI}; #define PORT_IO_BASE 0x01C20800 #define UART_IO_BASE 0x01C25000 static volatile __u8 * port_io_base; static volatile __u8 * uart_io_base; #define __gpio ((volatile port_struct_t *)(port_io_base)) /*UART---------------------------------------*/ #define UART_BASE (uart_io_base) #define UART_BASE_OS (0x400) #define UARTx_BASE(x) (UART_BASE + (x) * UART_BASE_OS) #define RESSIZE(res) (((res)->end - (res)->start)+1) //#define UART_HALT 0x29 /* Halt TX register */ #define UART_FORCE_CFG (1 << 1) #define UART_FORCE_UPDATE (1 << 2) #define __uart_reg(num, off) (*(volatile __u32 *)((UARTx_BASE(num)) + (off))) #define UART_RBR(n) __uart_reg(n, 0x00) // DLAB=0 #define UART_THR(n) __uart_reg(n, 0x00) // DLAB=0 #define UART_DLL(n) __uart_reg(n, 0x00) // DLAB=1 #define UART_DLH(n) __uart_reg(n, 0x04) // DLAB=1 #define UART_IER(n) __uart_reg(n, 0x04) #define UART_IIR(n) __uart_reg(n, 0x08) #define UART_FCR(n) __uart_reg(n, 0x08) #define UART_LCR(n) __uart_reg(n, 0x0c) #define UART_MCR(n) __uart_reg(n, 0x10) #define UART_LSR(n) __uart_reg(n, 0x14) #define UART_MSR(n) __uart_reg(n, 0x18) #define UART_SCH(n) __uart_reg(n, 0x1c) #define UART_USR(n) __uart_reg(n, 0x7c) #define UART_TFL(n) __uart_reg(n, 0x80) #define UART_RFL(n) __uart_reg(n, 0x84) #define UART_HALT(n) __uart_reg(n, 0xa4) /*APB1---------------------------------------------*/ #define __ccu_reg(off) (*(volatile __u32 *)((ccu_io_base) + (off))) #define APB1_GATING_REG __ccu_reg(0x6c) /*--------------------------------------------------------------------------*/ #define DTR_PORT PORTE #define DTR_PIN 6 //#define TIMERn 2 //#define IRQn_TIM 19//52 #define UARTn 2 #define UART_BAUDRATE 19200 #define IRQn_UART 33 #define CDEV_MAJOR 230 #define CDEV_NAME "b*m" //========================== GPIO functions====================== #define FMUX_IN 0 #define FMUX_OUT 1 #define FMUX_UART 3 static void gpio_init_pin(int port, int pin, int mux) { uint32_t tmp; int n = 0; while( pin > 7) { pin -= 8; n++; } tmp = __gpio[port].CFG[n] & ~(0xf << (pin << 2)); __gpio[port].CFG[n] = tmp | (mux << (pin << 2)); } static spinlock_t gpio_lock; static void gpio_set(int port, int pin) { spin_lock(&gpio_lock); __gpio[port].DAT |= (1 << pin); spin_unlock(&gpio_lock); } static void gpio_clr(int port, int pin) { spin_lock(&gpio_lock); __gpio[port].DAT &= ~(1 << pin); spin_unlock(&gpio_lock); } // ========================= UART functions ======================= inline static void start_send(void) { gpio_set(DTR_PORT, DTR_PIN); UART_IER(UARTn) |= (1 << 1); // set ETBEI (transmit holding register interrupt) } inline static void stop_send(void) { UART_IER(UARTn) &= ~(1 << 1); // clr ETBEI gpio_clr(DTR_PORT, DTR_PIN); } static enum hrtimer_restart xbus_periodic(struct hrtimer * unused) { if(hw_init) { norecv_timer++; if (norecv_timer > 2000) // 4s { gpio_clr(DTR_PORT, DTR_PIN); norecv_timer = 0; } bum_poll(); } hrtimer_forward_now(&htimer, k_period); return HRTIMER_RESTART; } //================================================================= #include "b*m-core.c" static char tdata[128]; static int idx; static irqreturn_t irq_serial_handle(int irq, void *dev_id) { /*UART interrupt handler*/ /* See "A20 User Manual 2013-03-22.pdf" , pp. 109 ... 122 */ int data; uint32_t tmp = UART_IIR(UARTn) & 0xf; if (tmp == 2) // THR empty { data = bum_uart_isr(-1); if (data == -1) stop_send(); else UART_THR(UARTn) = data; } else if (tmp == 4) // receiver data available { norecv_timer = 0; bum_uart_isr(UART_RBR(UARTn)); } return IRQ_HANDLED; } static int divisor; static int serial_hardware_init(void) { gpio_init_pin(DTR_PORT, DTR_PIN, FMUX_OUT); /* configure UART registers*/ /* See "A20 User Manual 2013-03-22.pdf" , pp. 645 ... 665 */ UART_HALT(UARTn) |= 1; UART_LCR(UARTn) |= (1 << 7); // set DLAB (LCR.7) UART_DLH(UARTn) = (divisor >> 8); UART_DLL(UARTn) = (divisor & 0xff); UART_FCR(UARTn) = 0;// disable FIFO UART_MCR(UARTn) = 0;// disable modem control UART_LCR(UARTn) = (3 << 0) // DLS, 8 bits word width | (0 << 2) // STOP , 1 stop bit | (0 << 3) // PEN, parity = disabled | (0 << 4) // EPS parity select, | (0 << 6) // BC, no break control | (0 << 7) // clear DLAB ; UART_IER(UARTn) = (1 << 0);// set ERBFI / Enable Receiver Data available interrupt UART_HALT(UARTn) = 0; //clear HALT return 0; } inline static void serial_hardware_stop(int irq, void * id) { free_irq(irq, id); } /* ==================== mmap implementation ======================*/ struct mmap_info { char * data; int reference; }; static void mmap_open(struct vm_area_struct *vma) { // struct mmap_info * info = (struct mmap_info *)vma->vm_private_data; // info->reference++; } static void mmap_close(struct vm_area_struct *vma) { // struct mmap_info * info = (struct mmap_info *)vma->vm_private_data; // info->reference--; } static unsigned int mmap_fault(struct vm_fault * vmf) { struct page * page; struct vm_area_struct *vma = vmf->vma; unsigned long size = (unsigned long)(vma->vm_end-vma->vm_start); // struct mmap_info * info = (struct mmap_info *)vma->vm_private_data; size = (unsigned long)(vma->vm_end-vma->vm_start); if (size > PAGE_SIZE) return -EINVAL; page = virt_to_page(xbus_iobuf); get_page(page); vmf->page = page; return 0; } static const struct vm_operations_struct vm_ops = { .open = mmap_open, .close = mmap_close, .fault = mmap_fault }; /*=========================== -- mmap =================================*/ static int xbus_mmap_init(void) { xbus_iobuf = (uint8_t*)get_zeroed_page(GFP_KERNEL); if (!xbus_iobuf) { printk(KERN_ERR "mmap init failed\n"); return 0; } return 0; } static void xbus_mmap_cleanup(void) { if (xbus_iobuf) free_page((unsigned long)xbus_iobuf); xbus_iobuf = 0; } #ifndef VM_RESERVED #define VM_RESERVED (VM_DONTEXPAND | VM_DONTDUMP) #endif static int mmap_xbus(struct file *filp, struct vm_area_struct *vma) { vma->vm_ops = &vm_ops; vma->vm_flags |= VM_RESERVED; vma->vm_private_data = filp->private_data; return 0; } ////////////////////////////////////////////////////////////////////////////// static DECLARE_WAIT_QUEUE_HEAD(wait); static int check_data_ready(void); static void indicate_data_ready(void) { wake_up_interruptible(&wait); } static unsigned int poll_xbus(struct file *f, struct poll_table_struct *p) { unsigned int mask = 0; poll_wait(f, &wait, p); if(check_data_ready()) mask |= POLLIN | POLLRDNORM; return mask; } // VFS methods: static struct file_operations xbus_fops = { .owner = THIS_MODULE, .mmap = mmap_xbus, .poll = poll_xbus, }; static struct miscdevice miscdev = { MISC_DYNAMIC_MINOR, "xbus", &xbus_fops }; static const struct of_device_id xbus_of_match[] = { { .compatible = "xbus-uart" }, { /* Sentinel */ } }; MODULE_DEVICE_TABLE(of, xbus_of_match); struct xbus_serial_data { int irq; struct clk *clk; struct clk *pclk; struct reset_control *rst; }; static struct xbus_serial_data xbus_serial; static void serial_remove( struct platform_device * pdev) { struct xbus_serial_data *data = platform_get_drvdata(pdev); reset_control_assert(data->rst); if (!IS_ERR(data->pclk)) clk_disable_unprepare(data->pclk); if (!IS_ERR(data->clk)) clk_disable_unprepare(data->clk); } static int serial_setup( struct platform_device * pdev) { struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); int irq = platform_get_irq(pdev, 0); struct device *dev = &pdev->dev; struct xbus_serial_data *data; int err = -1; int uart_clk; if (!regs) { dev_err(dev, "no registers defined\n"); return -EINVAL; } if (irq < 0) { if (irq != -EPROBE_DEFER) dev_err(dev, "cannot get irq\n"); return irq; } data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; data->clk = devm_clk_get(dev, "baudclk"); if (IS_ERR(data->clk) && PTR_ERR(data->clk) != -EPROBE_DEFER) data->clk = devm_clk_get(dev, NULL); if (IS_ERR(data->clk) && PTR_ERR(data->clk) == -EPROBE_DEFER) return -EPROBE_DEFER; if (!IS_ERR_OR_NULL(data->clk)) { err = clk_prepare_enable(data->clk); if (err) dev_warn(dev, "could not enable optional baudclk: %d\n", err); } /* If no clock rate is defined, fail. */ if (err) { dev_err(dev, "clock rate not defined\n"); return -EINVAL; } data->pclk = devm_clk_get(dev, "apb_pclk"); if (IS_ERR(data->pclk) && PTR_ERR(data->pclk) == -EPROBE_DEFER) { err = -EPROBE_DEFER; goto err_clk; } if (!IS_ERR(data->pclk)) { err = clk_prepare_enable(data->pclk); if (err) { dev_err(dev, "could not enable apb_pclk\n"); goto err_clk; } } uart_clk = clk_get_rate(data->clk); divisor = DIV_ROUND_CLOSEST(uart_clk, 16 * UART_BAUDRATE); data->rst = devm_reset_control_get_optional(dev, NULL); if (IS_ERR(data->rst)) { err = PTR_ERR(data->rst); goto err_pclk; } reset_control_deassert(data->rst); platform_set_drvdata(pdev, data); return irq; //err_reset: reset_control_assert(data->rst); err_pclk: if (!IS_ERR(data->pclk)) clk_disable_unprepare(data->pclk); err_clk: if (!IS_ERR(data->clk)) clk_disable_unprepare(data->clk); return err; } static int xbus_probe(struct platform_device *pdev) { int irq; printk(KERN_ERR "xbus loading..\n"); hw_init = 0; int err = misc_register(&miscdev); if(err != 0) { printk("misc_register() error :%d\n", err); return -EPROBE_DEFER; } irq = serial_setup(pdev); if (irq < 0) { return -EPROBE_DEFER; } xbus_serial.irq = irq; if (request_irq(irq, irq_serial_handle, IRQF_SHARED, "xbus-suniv", &xbus_serial)) { printk (KERN_ERR "request irq %d error.\n", irq); return -EPROBE_DEFER; } port_io_base = (__u8 * )ioremap(PORT_IO_BASE, 0x400); uart_io_base = (__u8 * )ioremap(UART_IO_BASE, 0x400); if (uart_io_base == 0 || port_io_base == 0 ) { printk(KERN_ERR "resource ioremap failed\n"); return -EPROBE_DEFER; } if (htimer_init() < 0) { iounmap(port_io_base); iounmap(uart_io_base); return -EPROBE_DEFER; } serial_hardware_init(); xbus_mmap_init(); bum_init(); hw_init = 1; return 0; } static int xbus_remove(struct platform_device *pdev) { printk(KERN_ERR "xbus unloading..\n"); hw_init = 0; htimer_exit(); serial_hardware_stop(xbus_serial.irq, &xbus_serial); serial_remove(pdev); iounmap(port_io_base); iounmap(uart_io_base); xbus_mmap_cleanup(); misc_deregister(&miscdev); return 0; } static struct platform_driver xbus_platform_driver = { .driver = { .name = "xbus-suniv", .owner = THIS_MODULE, .of_match_table = xbus_of_match, }, .probe = xbus_probe, .remove = xbus_remove, }; module_platform_driver(xbus_platform_driver); MODULE_LICENSE("GPL"); MODULE_AUTHOR("albert@sokrat.ru"); MODULE_AUTHOR("jean@sokrat.ru");
bum_uart_isr() 它用于接收和传输。基本算法是:
static uint8_t tx_buf[MAX_TX]; static uint8_t rx_buf[MAX_RX]; static int rx_count; static int tx_count; static int snd_size; int bum_uart_isr(int value) { if (value < 0) // TX IRQ { if (tx_count < snd_size && tx_count < MAX_TX) value = (int)tx_buf[tx_count++]; } else // RX IRQ { if (rx_count < MAX_RX) rx_buf[rx_count++] = (uint8_t)value; } return value; }
-
回复: V853SDK:奇怪的帧缓冲区操作
Ok.
On my system in board.dtb set display parameter "fb format" = 0 : RGBA. This format is 32 bits per pixel. Three low bytes are component R/G/B . High byte is alpha-channel. Alpha-channel must work :
value = 0xff : pixel fully transparent (invisible) .
value = 0 : pixel fully non-transparent.
intermediate values : transparency level.I wrote simple test program, which draw image by pixels with alpha-channel value 0 (fully non-transparent), but i got a black screen. To experiment, i set pixels alpha channel to non-zero value. The image became visible, but alpha-channel value is not affect to transparency level.
This is very strange. Work of alpha-channel fully non-correct.
In kernel display driver source i found optional function "color bar", which draw color bands. In this function programmed pixels with alpha-channel value = 0xff. It mean, in this function wrong work of driver is "workarounded".
I think, this also taken into account in LVGL library in SDK : "lv_examples" application draw right images.
But other programs, built separately from SDK, draw distorted colors, or black screen.Also i found in kernel display driver source init of parameter
config.info.alpha_mode = 0;
for RT-Mixer (part of Display Engine) layer in framebuffer initialization. This parameter value means "alpha-channel for each pixel", and i may to expect "standard" work of alpha-channel. In fact, this is not the case.
What is this? Hardware bug of RT-Mixer? or it may be corrected through RT-Mixer register values?
I may to try to correct problem myself, but i do not have documentation for V853 Display Engine.
Where i may download it?
I have description of Display Engine for old AllWinner MPUs : H3, H8, A83. What of this is match to V853 Display Engine?I may to easy set alpha-channel of pixel to value, which work, for my programs to this device, but i need standard work of framebuffer.
-
V853SDK:奇怪的帧缓冲区操作
在我的系统上,在显示设置的 board.dtb 中,像素格式指定为 RGBA。 每个像素都用 32 位数字进行编码。 三个最低有效字节是 R/G/B 分量。 最高有效字节是 Alpha 通道。 Alpha 通道应该像这样工作:
值 0xff - 像素完全透明(不可见)。
值 0 - 像素完全不透明
其他值是中等透明度。我编写了一个测试程序,以像素为单位输出 alpha 值为 0 的图像。但是,我得到了黑屏。 在进一步的实验中我 我发现如果 Alpha 通道值不是零,则图像是可见的。
但 Alpha 通道值不会影响透明度级别。这很奇怪。
我查看了linux内核中视频控制器驱动程序的源代码。 发现 在可选的 colorbar 函数中,在形成时绘制颜色条 图像的 Alpha 通道值设置为 0xff 。 也就是说,这种行为 从驾驶员的角度来看,这是“正常”的。 但从标准的角度来看——不。
lvgl 库很可能也考虑到了这一点,因为 lv_examples 可以正确显示图像。 但其他程序要么输出扭曲的图像 花或黑屏。
经过进一步调查内核驱动程序,我发现在图像层设置中 对于显示引擎参数中的 RT-Mixer 块:
配置.info.alpha_mode = 0;
初始化帧缓冲区时。
该值对应于“标准”Alpha 通道操作。 然而它不起作用。
这是什么? RT-Mixer 硬件错误? 或者可以通过参数值来修正吗?
我可以尝试自己解决这个问题,但是我没有V853的Display_Engine的描述,也找不到它。 我在哪里可以得到它?
有来自较旧处理器的 Diplay_Engine 的描述:H3、H5、H8、A83.
也许其中一些与V853一致 (RT-Mixer0 偏移地址) ?在我的设备程序中,我可以轻松设置像素的 Alpha 通道,以便 我有一个图像,但我想让它按照标准工作。
-
回复: T113-S3 tina mipi-dsi 无输出
@guyuandongfang
我也遇到过类似的情况。 看题目 «V853 SDK:Linux内核中的MIPI DSI « -
回复: 有没有大佬懂axp202的呀?
@jr_online
你有示波器吗? 当MPU驱动AXP202时,您可以使用示波器监视IRQ信号。
要确定合规性,您可以将调试 printk 插入到控制函数中的 AXP202 驱动程序中。 -
回复: F1C200S TX Empty trigger 设置成1/2触发要怎么做?
@smbzd
监控FIFO的状态是控制485切换的错误方法。FIFO是一个中间存储器,这不知道发射器在做什么。 当最后一个字节的最后一个停止位离开发送器移位寄存器时,必须切换 485。
最正确的方法是控制器是否有 TX_COMPLETE 中断。 485 的控制必须在发送最后一个字节时在中断中完成。
但有些系统没有TX_COMPLETE中断,而只有TX_EMPTY中断。 在这种情况下,需要多传输1个字节,并在TX_EMPTY中断中切换控制485。这不是很正确,但它有效。在我们的项目中,我们使用专门的串口驱动程序,它也控制 485。
该驱动程序可用于多种系统,包括 F1C200s。 如果你有兴趣,我可以贴出原文的片段 驱动程序文本在这里。 -
回复: 有没有大佬懂axp202的呀?
@jr_online
设置 IRQ 信号的原因在寄存器位 REG48、REG49、REG4A 中指示。 从文档中可以清楚地看出 IRQ 信号将保持活动状态,直到 MPU 通过写入“1”来清除所有相应位 -
回复: 多网卡网络如何管理?
@wanglang
如何理解Wifi优先级?
我没有使用wifi_deman SDK,也不知道它是如何工作的。 使用常规脚本时,解决方案非常简单...
udhcpc -i usb0 &
udhcpc -i wlan0 & -
回复: 有没有大佬懂axp202的呀?
@jr_online
设置 IRQ 信号的原因在寄存器位 REG48、REG49、REG4A 中指示。 从文档中可以清楚地看出 IRQ 信号将保持活动状态,直到 MPU 通过写入“1”来清除所有相应位 -
回复: 有没有大佬懂axp202的呀?
@jr_online
REG31[3] 的这种行为在文档中有描述 AXP202,这是正常的。 真的吗,
睡眠后,只能醒来一次。 要再次醒来,您需要再次入睡芯片的哪一个输出为 DRAM 供电取决于设备的设计。 我可以看一下你们设备的电气图吗?
-
回复: V853 SDK:Linux内核中的MIPI DSI
@awwwwa
我使用不同的 MIPI DSI 显示器,具有不同的名称、不同的分辨率和不同的面板初始化代码。 首先,我制作了自己的驱动程序,是icn6202驱动程序的修改版。 它也不适用于该驱动程序 - 接口上没有信号。
所以这并不是说内核没有重新初始化显示。为了进行测试,我在 Linux 内核中包含了与 uboot 中完全相同的面板驱动程序,并具有完全相同的设置,以消除我的错误。 同时,在Linux内核中加载驱动程序后,我期望界面上的信号与uboot运行时完全相同。 但这并没有发生。 没有信号。
基于此,我可以得出以下结论之一:
1、需要在linux内核配置中设置一些其他参数。
-
内核驱动程序在初始化 MIPI DSI 接口时包含可纠正的错误(或特殊更改)。
(我的设备不需要uboot标志的平滑度。 我需要一个图形控制台。) -
内核驱动程序包含无法修复的严重错误,面板必须在uboot 中初始化。
哪个结论是正确的?
-
-
回复: V853 SDK:Linux内核中的MIPI DSI
这是_log。 我的 PCB 上还没有焊接 32K XTAL。 能影响吗?
[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 4.9.191 (root@ubuntu) (gcc version 6.4.1 (OpenWrt/Linaro GCC 6.4-2017.11 2017-11) ) #287 PREEMPT Wed Feb 21 13:56:38 UTC 2024 [ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d [ 0.000000] CPU: div instructions available: patching division code [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] OF: fdt:Machine model: sun8iw21 [ 0.000000] disp reserve base 0x45f86000 ,size 0x3e8000 [ 0.000000] efi: Getting EFI parameters from FDT: [ 0.000000] efi: UEFI not found. [ 0.000000] Reserved memory: created DMA memory pool at 0x47bc0000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node vdev0buffer@0x47BC0000, compatible id shared-dma-pool [ 0.000000] Memory policy: Data cache writeback [ 0.000000] On node 0 totalpages: 31676 [ 0.000000] free_area_init_node: node 0, pgdat c0939548, node_mem_map c7abc000 [ 0.000000] Normal zone: 248 pages used for memmap [ 0.000000] Normal zone: 0 pages reserved [ 0.000000] Normal zone: 31676 pages, LIFO batch:7 [ 0.000000] psci: probing for conduit method from DT. [ 0.000000] psci: PSCIv1.0 detected in firmware. [ 0.000000] psci: Using standard PSCI v0.2 function IDs [ 0.000000] psci: MIGRATE_INFO_TYPE not supported. [ 0.000000] psci: SMC Calling Convention v1.0 [ 0.000000] CPU: All CPU(s) started in SVC mode. [ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 31428 [ 0.000000] Kernel command line: console=ttyS1,115200 debug panic=5 rootwait root=/dev/mmcblk0p4 earlyprintk rw loglevel=7 printk.syncronous=1 androidboot.hardware=sun8iw21p1 boot_type=1 androidboot.boot_type=1 gpt=1 uboot_message=2018.05-g2a0a11f-dirty-config-dirty(12/17/2023-02:50:40) disp_reserve=4096000,0x45f86000 bootreason=usb androidboot.dramsize=128 [ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes) [ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) [ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) [ 0.000000] Memory: 112400K/126704K available (5120K kernel code, 233K rwdata, 1164K rodata, 1024K init, 209K bss, 14304K reserved, 0K cma-reserved, 0K highmem) [ 0.000000] Virtual kernel memory layout: [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB) [ 0.000000] vmalloc : 0xc8000000 - 0xff800000 ( 888 MB) [ 0.000000] lowmem : 0xc0000000 - 0xc7bbc000 ( 123 MB) [ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB) [ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB) [ 0.000000] .text : 0xc0008000 - 0xc0600000 (6112 kB) [ 0.000000] .init : 0xc0800000 - 0xc0900000 (1024 kB) [ 0.000000] .data : 0xc0900000 - 0xc093a5e0 ( 234 kB) [ 0.000000] .bss : 0xc093a5e0 - 0xc096edc4 ( 210 kB) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] Preemptible hierarchical RCU implementation. [ 0.000000] Build-time adjustment of leaf fanout to 32. [ 0.000000] NR_IRQS:16 nr_irqs:16 16 [ 0.000000] sunxi_parse_sdm_info failed: -1 [ 0.000000] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns [ 0.000000] arm_arch_timer: Architected cp15 timer(s) running at 24.00MHz (phys). [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns [ 0.000006] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns [ 0.000020] Switching to timer-based delay loop, resolution 41ns [ 0.000201] Console: colour dummy device 80x30 [ 0.000229] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000) [ 0.000244] pid_max: default: 32768 minimum: 301 [ 0.000340] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 0.000352] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 0.000854] CPU: Testing write buffer coherency: ok [ 0.001348] Setting up static identity map for 0x40100000 - 0x40100058 [ 0.002213] EFI services will not be available. [ 0.002932] devtmpfs: initialized [ 0.038029] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5 [ 0.038526] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.038549] futex hash table entries: 256 (order: -1, 3072 bytes) [ 0.038671] atomic64_test: passed [ 0.038683] pinctrl core: initialized pinctrl subsystem [ 0.039779] NET: Registered protocol family 16 [ 0.040290] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.041537] dump_class_init,857, success [ 0.069457] cpuidle: using governor menu [ 0.070931] platform 2010000.iommu: iova_base: 0x48400000 [ 0.071400] sunxi iommu: irq = 22 [ 0.091103] sun8iw21p1-pinctrl pio: initialized sunXi PIO driver [ 0.092832] sunxi hwspinlock vbase:0xc805c000 [ 0.094660] iommu: Adding device npu to group 0 [ 0.096287] iommu: Adding device 1c0e000.ve to group 0 [ 0.107972] iommu: Adding device 5410000.g2d to group 0 [ 0.108776] iommu: Adding device 5000000.disp to group 0 [ 0.117716] iommu: Adding device 5908000.tdm to group 0 [ 0.118483] iommu: Adding device 5900000.isp to group 0 [ 0.119263] iommu: Adding device 58ffffc.isp to group 0 [ 0.120429] iommu: Adding device 58ffff8.isp to group 0 [ 0.121187] iommu: Adding device 58ffff4.isp to group 0 [ 0.121719] iommu: Adding device 5800800.vind:isp@4 to group 0 [ 0.122448] iommu: Adding device 5910000.scaler to group 0 [ 0.122989] iommu: Adding device 590fffc.scaler to group 0 [ 0.123397] iommu: Adding device 590fff8.scaler to group 0 [ 0.123901] iommu: Adding device 590fff4.scaler to group 0 [ 0.124636] iommu: Adding device 5910400.scaler to group 0 [ 0.125213] iommu: Adding device 59103fc.scaler to group 0 [ 0.125703] iommu: Adding device 59103f8.scaler to group 0 [ 0.126127] iommu: Adding device 59103f4.scaler to group 0 [ 0.126885] iommu: Adding device 5910800.scaler to group 0 [ 0.127432] iommu: Adding device 59107fc.scaler to group 0 [ 0.127997] iommu: Adding device 59107f8.scaler to group 0 [ 0.128408] iommu: Adding device 59107f4.scaler to group 0 [ 0.129165] iommu: Adding device 5910c00.scaler to group 0 [ 0.130002] iommu: Adding device 5910bfc.scaler to group 0 [ 0.130601] iommu: Adding device 5910bf8.scaler to group 0 [ 0.131133] iommu: Adding device 5910bf4.scaler to group 0 [ 0.132481] iommu: Adding device vinc0 to group 0 [ 0.133028] iommu: Adding device vinc1 to group 0 [ 0.133824] iommu: Adding device vinc4 to group 0 [ 0.134464] iommu: Adding device vinc5 to group 0 [ 0.135129] iommu: Adding device vinc8 to group 0 [ 0.135664] iommu: Adding device vinc9 to group 0 [ 0.136328] iommu: Adding device vinc12 to group 0 [ 0.136905] iommu: Adding device vinc13 to group 0 [ 0.175251] sunxi-pm debug v3.10 [ 0.176380] SCSI subsystem initialized [ 0.176522] media: Linux media interface: v0.10 [ 0.176585] Linux video capture interface: v2.00 [ 0.180691] ion_parse_dt_heap_common: id 0 type 0 name sys_user align 1000 [ 0.181045] ion_parse_dt_heap_common: id 4 type 4 name cma align 1000 [ 0.181841] Advanced Linux Sound Architecture Driver Initialized. [ 0.184781] G2D: rcq version initialized.major:250 [ 0.185935] clocksource: Switched to clocksource arch_sys_counter [ 0.213926] thermal thermal_zone1: power_allocator: sustainable_power will be estimated [ 0.214673] thermal thermal_zone2: power_allocator: sustainable_power will be estimated [ 0.214798] NET: Registered protocol family 2 [ 0.215573] TCP established hash table entries: 16 (order: -6, 64 bytes) [ 0.215593] TCP bind hash table entries: 16 (order: -6, 64 bytes) [ 0.215603] TCP: Hash tables configured (established 16 bind 16) [ 0.215663] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 0.215682] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 0.215843] NET: Registered protocol family 1 [ 0.220070] sunxi_sid_driver_init+0x0/0x10 complete comp. [ 0.220419] workingset: timestamp_bits=29 max_order=15 bucket_order=0 [ 0.239954] io scheduler noop registered [ 0.239972] io scheduler deadline registered [ 0.240218] io scheduler cfq registered (default) [ 0.241776] [DISP]disp_module_init [ 0.243305] [DISP] disp_init,line:2340: [ 0.243321] smooth display screen:0 type:1 mode:4 [ 0.281439] lcd 0, driver_name icn6202, panel_name default_lcd [ 0.281458] lcd 0, driver_name icn6202, panel_name icn6202 [ 0.281477] lcd 0, driver_name icn6202, panel_name super_lcd_driver [ 0.281611] display_fb_request,fb_id:0 [ 0.292218] [DISP] de_fcm_set_para,line:491: [ 0.292232] fcm lut 0 not find, auto retry after init [ 0.292929] [DISP] de_fcm_set_para,line:491: [ 0.292929] fcm lut 0 not find, auto retry after init [ 0.292947] [DISP] de_fcm_set_para,line:491: [ 0.292948] fcm lut 0 not find, auto retry after init [ 0.293210] [DISP] lcd_clk_config,line:699: [ 0.293211] disp 0, clk: pll(426000000),clk(426000000),dclk(71000000) dsi_rate(71000000) [ 0.293211] clk real:pll(420000000),clk(420000000),dclk(105000000) dsi_rate(150000000) [ 0.293570] [ICN6202 TO LVDS] LINE:0142-->lcd_open_flow: [ 0.293576] [ICN6202 TO LVDS] LINE:0163-->lcd_power_on: [ 0.335956] [ICN6202 TO LVDS] LINE:0572-->lcd_panel_init: [ 0.545942] initialization:icn6202 init reg from mipi [ 0.695943] [ICN6202 TO LVDS] LINE:0199-->lcd_bl_open: [ 0.695952] [DISP] disp_lcd_pwm_enable,line:1169: [ 0.695953] pwm device hdl is NULL [ 0.804909] Console: switching to colour frame buffer device 160x50 [ 0.874071] [DISP]disp_module_init finish [ 0.877863] uart uart1: get regulator by dt way failed! [ 0.878014] uart1: ttyS1 at MMIO 0x2500400 (irq = 289, base_baud = 1500000) is a SUNXI [ 0.878043] sw_console_setup()2050 - console setup baud 115200 parity n bits 8, flow n [ 1.878595] console [ttyS1] enabled [ 1.883376] uart uart2: get regulator by dt way failed! [ 1.889568] uart2: ttyS2 at MMIO 0x2500800 (irq = 290, base_baud = 1500000) is a SUNXI [ 1.899781] misc dump reg init [ 1.904049] npu[1][1] vipcore, platform driver device=0xc75fc410 [ 1.911077] npu[1][1] vipcore irq number is 291. [ 1.916340] gckvip_drv_adjust_param 232 SUCCESS [ 1.921488] Want set pclk rate(492000000) support(492000000) real(492000000) [ 1.929575] Want set mclk rate(492000000) support(492000000) real(492000000) [ 1.937539] npu[1][1] This device support 64bits DMA [ 1.943584] npu[1][1] core_0, request irqline=291, name=vipcore_0 [ 1.950695] npu[1][1] =======vipcore parameter===== [ 1.956225] npu[1][1] registerMemBase 0x03050000, [ 1.961992] npu[1][1] registerMemSize 0x00020000, [ 1.967795] npu[1][1] irqLine 0x00000123, [ 1.973561] npu[1][1] contiguousSize 0x00100000 [ 1.979209] npu[1][1] contiguousBase 0x30000000 [ 1.984777] npu[1][1] vipContiguousBase 0x0 [ 1.989721] npu[1][1] drvType 0x00000000 [ 1.995291] npu[1][1] AXISramSize 0x00000000 [ 2.000893] npu[1][1] AXISramBaseAddress 0x00000000 [ 2.006477] npu[1][1] VIPSramSize 0x00020000 [ 2.012047] npu[1][1] VIPSramBaseAddress 0x00400000 [ 2.017633] npu[1][1] sysHeapSize 0x00200000 [ 2.023200] npu[1][1] =============================== [ 2.028941] npu[1][1] VIPLite driver version 1.8.1.0-AW-2022-07-26 [ 2.057179] brd: module loaded [ 2.061638] sun8iw21p1-pinctrl pio: expect_func as:fanout2, but muxsel(3) is func:i2s0 [ 2.071004] sunxi-wlan soc@03000000:wlan@0: wlan_busnum (1) [ 2.077421] sunxi-wlan soc@03000000:wlan@0: wlan power voltage (3300000) [ 2.084946] sunxi-wlan soc@03000000:wlan@0: wlan io voltage (3300000) [ 2.092229] sunxi-wlan soc@03000000:wlan@0: wlan_power_num (1) [ 2.098814] sunxi-wlan soc@03000000:wlan@0: wlan_power_name (axp2101-dcdc1) [ 2.106644] sunxi-wlan soc@03000000:wlan@0: io_regulator_name (axp2101-dcdc1) [ 2.114693] sunxi-wlan soc@03000000:wlan@0: wlan_regon gpio=142 mul-sel=1 pull=1 drv_level=2 data=0 [ 2.125278] sunxi-wlan soc@03000000:wlan@0: get gpio chip_en failed [ 2.132344] sunxi-wlan soc@03000000:wlan@0: wlan_hostwake gpio=143 mul-sel=14 pull=1 drv_level=2 data=0 [ 2.143390] sunxi-wlan soc@03000000:wlan@0: clk_name () [ 2.151705] mousedev: PS/2 mouse device common for all mice [ 2.159990] sunxi-rtc rtc: rtc core: registered sunxi-rtc as rtc0 [ 2.167105] sunxi-rtc rtc: RTC enabled [ 2.171374] fix to hot reboot, save boot reason [ 2.176891] sunxi cedar version 0.1 [ 2.181082] VE: install start!!! [ 2.181082] [ 2.181151] VE: cedar-ve the get irq is 292 [ 2.186242] VE: regs_csi = c81f0000 [ 2.190741] VE: ve_proc_mgr: flag = 1 [ 2.190741] [ 2.190747] VE: install end!!! [ 2.190747] [ 2.192788] cpuidle: enable-method property 'psci' found operations [ 2.202491] sunxi-mmc sdc0: SD/MMC/SDIO Host Controller Driver(v3.59 2022-4-21 13:40) [ 2.211951] sunxi-mmc sdc0: ***ctl-spec-caps*** 408 [ 2.217612] sunxi-mmc sdc0: Can't get vmmc regulator string [ 2.223870] sunxi-mmc sdc0: Can't get vqmmc regulator string [ 2.230324] sunxi-mmc sdc0: Can't get vdmmc regulator string [ 2.236721] sunxi-mmc sdc0: Can't get vdmmc33sw regulator string [ 2.243462] sunxi-mmc sdc0: Can't get vdmmc18sw regulator string [ 2.250240] sunxi-mmc sdc0: Can't get vqmmc33sw regulator string [ 2.256997] sunxi-mmc sdc0: Can't get vqmmc18sw regulator string [ 2.263731] get() with no identifier [ 2.267753] get() with no identifier [ 2.271758] get() with no identifier [ 2.275768] get() with no identifier [ 2.279788] get() with no identifier [ 2.283792] get() with no identifier [ 2.287811] get() with no identifier [ 2.291821] sunxi-mmc sdc0: No vmmc regulator found [ 2.297310] sunxi-mmc sdc0: No vqmmc regulator found [ 2.302878] sunxi-mmc sdc0: No vdmmc regulator found [ 2.308463] sunxi-mmc sdc0: No vd33sw regulator found [ 2.314128] sunxi-mmc sdc0: No vd18sw regulator found [ 2.319811] sunxi-mmc sdc0: No vq33sw regulator found [ 2.325477] sunxi-mmc sdc0: No vq18sw regulator found [ 2.331593] sunxi-mmc sdc0: set host busy [ 2.336206] sunxi-mmc sdc0: Got CD GPIO [ 2.340960] sunxi-mmc sdc0: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.351413] sunxi-mmc sdc0: no vqmmc,Check if there is regulator [ 2.385965] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.426131] sunxi-mmc sdc0: detmode:gpio irq [ 2.426160] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.433094] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.456077] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.467074] sunxi-mmc sdc1: SD/MMC/SDIO Host Controller Driver(v3.59 2022-4-21 13:40) [ 2.467221] sunxi-mmc sdc1: ***ctl-spec-caps*** 8 [ 2.467238] sunxi-mmc sdc1: Can't get vmmc regulator string [ 2.467244] sunxi-mmc sdc1: Can't get vqmmc regulator string [ 2.467250] sunxi-mmc sdc1: Can't get vdmmc regulator string [ 2.467256] sunxi-mmc sdc1: Can't get vdmmc33sw regulator string [ 2.467261] sunxi-mmc sdc1: Can't get vdmmc18sw regulator string [ 2.467267] sunxi-mmc sdc1: Can't get vqmmc33sw regulator string [ 2.467272] sunxi-mmc sdc1: Can't get vqmmc18sw regulator string [ 2.467275] get() with no identifier [ 2.467277] get() with no identifier [ 2.467278] get() with no identifier [ 2.467280] get() with no identifier [ 2.467281] get() with no identifier [ 2.467283] get() with no identifier [ 2.467284] get() with no identifier [ 2.467289] sunxi-mmc sdc1: No vmmc regulator found [ 2.467294] sunxi-mmc sdc1: No vqmmc regulator found [ 2.467298] sunxi-mmc sdc1: No vdmmc regulator found [ 2.467303] sunxi-mmc sdc1: No vd33sw regulator found [ 2.467307] sunxi-mmc sdc1: No vd18sw regulator found [ 2.467312] sunxi-mmc sdc1: No vq33sw regulator found [ 2.467316] sunxi-mmc sdc1: No vq18sw regulator found [ 2.467729] sunxi-mmc sdc1: set host busy [ 2.467794] mmc:failed to get gpios [ 2.468119] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.501414] sunxi-mmc sdc1: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.528580] sunxi-mmc sdc1: detmode:manually by software [ 2.532796] [sound 1158][DAUDIO snd_sunxi_regulator_init] regulator missing or invalid [ 2.534257] sunxi-snd-mach soc@03000000:codec_mach: sunxi-snd-codec <-> soc@03000000:codec_plat mapping ok [ 2.541394] sunxi-snd-mach soc@03000000:daudio0_mach: snd-soc-dummy-dai <-> 2032000.daudio0_plat mapping ok [ 2.547400] Netfilter messages via NETLINK v0.30. [ 2.547668] nf_conntrack version 0.5.0 (2048 buckets, 8192 max) [ 2.547817] ctnetlink v0.93: registering with nfnetlink. [ 2.548184] ip_tables: (C) 2000-2006 Netfilter Core Team [ 2.548964] NET: Registered protocol family 10 [ 2.550658] NET: Registered protocol family 17 [ 2.550708] 8021q: 802.1Q VLAN Support v1.8 [ 2.551361] Registering SWP/SWPB emulation handler [ 2.729522] sunxi-rtc rtc: setting system clock to 1970-01-01 00:16:03 UTC (963) [ 2.737864] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 2.738896] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.746063] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 2.746098] sunxi-mmc sdc1: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.758985] sunxi-mmc sdc1: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.766049] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.776836] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.787618] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.793520] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.793543] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 2.794621] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.822693] sunxi-mmc sdc1: sdc set ios:clk 300000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.844769] usb-vbus: disabling [ 2.848413] ALSA device list: [ 2.851772] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 2.851787] mmc0: host does not support reading read-only switch, assuming write-enable [ 2.857817] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 2.857843] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing SD-HS(SDR25) dt B [ 2.857951] sunxi-mmc sdc0: sdc set ios:clk 50000000Hz bm PP pm ON vdd 21 width 1 timing SD-HS(SDR25) dt B [ 2.858087] sunxi-mmc sdc1: sdc set ios:clk 300000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.859200] sunxi-mmc sdc0: sdc set ios:clk 50000000Hz bm PP pm ON vdd 21 width 4 timing SD-HS(SDR25) dt B [ 2.859263] mmc0: new high speed SDHC card at address 59b4 [ 2.860844] sunxi-mmc sdc1: sdc set ios:clk 300000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.871016] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.871333] mmcblk0: mmc0:59b4 SMI 7.50 GiB [ 2.872137] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.878340] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.889266] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 2.889334] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 2.890421] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.890518] [DISP] fb_free_reserve_mem,line:2487: [ 2.890519] [DISP] fb_free_reserve_mem wait for sync timeout [ 2.891254] Freeing logo buffer memory: 4000K [ 2.891346] mmcblk0: p1 p2 p3 p4 p5 [ 2.926440] sunxi-mmc sdc1: sdc set ios:clk 200000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.966283] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 2.972185] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 2.972204] sunxi-mmc sdc1: sdc set ios:clk 200000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.984621] sunxi-mmc sdc1: sdc set ios:clk 200000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.995999] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.001306] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.007693] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.012604] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.012623] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 3.013710] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 3.040521] sunxi-mmc sdc1: sdc set ios:clk 100000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 3.073917] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 3.079822] sunxi-mmc sdc1: smc 1 p1 err, cmd 52, RTO !! [ 3.079843] sunxi-mmc sdc1: sdc set ios:clk 100000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 3.087888] sunxi-mmc sdc1: sdc set ios:clk 100000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 3.099307] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.109603] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.120386] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.126380] sunxi-mmc sdc1: smc 1 p1 err, cmd 5, RTO !! [ 3.126401] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 3.188671] #0: audiocodec [ 3.191899] #1: snddaudio0 [ 3.196534] EXT4-fs (mmcblk0p4): couldn't mount as ext3 due to feature incompatibilities [ 3.206439] EXT4-fs (mmcblk0p4): couldn't mount as ext2 due to feature incompatibilities [ 3.219482] EXT4-fs (mmcblk0p4): warning: mounting unchecked fs, running e2fsck is recommended [ 3.231463] EXT4-fs (mmcblk0p4): mounted filesystem without journal. Opts: (null) [ 3.240003] VFS: Mounted root (ext4 filesystem) on device 179:4. [ 3.250592] devtmpfs: mounted [ 3.256020] Freeing unused kernel memory: 1024K [ 3.418180] EXT4-fs (mmcblk0p4): re-mounted. Opts: (null) [ 3.511384] i2c /dev entries driver [ 3.525550] sunxi_i2c_adap_init()2748 - init [ 3.531068] sunxi_i2c_probe()2443 - [i2c0] twi_drv_used = 0 [ 3.537471] sunxi_i2c_probe()2450 - [i2c0] twi_pkt_interval = 0 [ 3.544194] twi_regulator_request()647 - [i2c0] regulator not found(isn't configured in dts)! [ 3.553834] twi_request_gpio()463 - [i2c0] init name: (null) [ 3.561400] sunxi_i2c_probe()2443 - [i2c4] twi_drv_used = 0 [ 3.567872] sunxi_i2c_probe()2450 - [i2c4] twi_pkt_interval = 0 [ 3.574608] twi_regulator_request()647 - [i2c4] regulator not found(isn't configured in dts)! [ 3.584251] twi_request_gpio()463 - [i2c4] init name: (null) [ 3.639004] FAT-fs (mmcblk0p3): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
code_text
-
回复: 有没有大佬懂axp202的呀?
我明白,它可以工作,但不稳定。 也许您的 AXP202 在睡眠模式下完全关闭? 当下次AXP202没有从 _wakeup 信号中恢复时,查看DRAM供电电压。
-
回复: 有没有大佬懂axp202的呀?
什么信号生成 _wakeup 事件? 必须在 REG42H/bit1 (PEK)、REG44/bit0 (GPIO0) REG44/bit1 (GPIO1) REG44/bit2 (GPIO2) REG44/bit3 (GPIO3) 中启用。
-
V853 SDK:Linux内核中的MIPI DSI
加载 linux 内核后,MIPI DSI 显示不工作。 我暂时禁用了显示器,并使用示波器监视 MIPI DSI D0+ 和 D0- 信号。 board.dts 中的设置与引导加载程序中的设置完全相同。 文档推荐的SDK安装在内核配置中 选项:
Graphic Support --->
Frame buffer devices ---->
[] Support for frame buffer devices
Video support for sunxi ---->
[]DISP driver support (sunxi-disp2)
[]Debugfs support for disp driver(sunxi-disp2)
LCD panel select --->
[]LCD support icn6202 panel
…
[] Support smart backlight
[] Support Video Enhanse Process波形图显示,在uboot中,MIPI DSI接口正在工作 - 有数据信号,但在视频驱动程序加载过程中,从dmesg输出判断,在面板驱动程序中,lcd_open_flow(...)、lcd_panel_init(...)没有被调用,因此,初始化代码没有加载到面板中。
由于我需要图形控制台,所以我在kernel_menuconfig中设置参数
...
[*]Framebuffer console support (sunxi)和
...
Console display driver support --->
[*]Framebuffer console support使用这些参数,将调用 lcd_open_flow(...)、lcd_panel_init(...) 函数,但 MIPI DSI 信号 D0+ 和 D0- 只是进入 LP 状态 - 电压为 1.2 伏的恒定电平。 没有命令或数据输出到接口。 但是,没有错误消息。
MIPI DSI 在 Linux 内核中的工作还依赖于什么?
-
V853 SDK:GLIBC版本
我的项目使用 GLIBC,而不是 MUSL。 但GLIBC版本太旧:2.23。
如何构建 root 以便有更新版本的 GLIBC? 在子目录//dl 中有一个版本为 GLIBC 2.29 的存档。 -
回复: V853 SDK:Linux内核下载。
@alb702 在 V853 SDK:Linux内核下载。 中说:
uboot
从 SD 卡启动的“快速而肮脏”的方式。 也许这对某人有用。V853 SDK不完全支持从SD卡启动。 我没有足够的信息来修复 SDK 的所有缺点,因此我使用了下面描述的方法。
我的设备使用 sdc0 控制器 (PF00...PF05) 和相应的 mmc0 接口进行启动。 下面的描述中将用到该接口。Linux内核将通过脚本加载到uboot中。 我们准备一个文本格式的脚本,内容如下:
setenv bootargs console=ttyS0,115200 debug panic=5 rootwait root=/dev/mmcblk0p4 earlyprintk rw loglevel=7
fatload mmc 0:3 0x42000000 uImage
fatload mmc 0:3 0x43000000 board.dtb
bootm 0x42000000 - 0x43000000并将其以 boot.cmd 的名称保存在临时目录中。
2、对于SDK中对应的【chip】和【board】:
在文件 //device/config/chips/[chip]/configs/[board]/sys_config.fex 中
需要更换:;storage_type = 2
storage_type = 13.在SDK menuconfig(make menuconfig)中安装:
在linux内核配置(make kernel_menuconfig)中设置:
4.进入目录//lichee/brandy-2.0/u-boot-2018。 你需要做:
make menuconfig对于 Boot Images 我们设置:
对于 Boot Media 我们安装:
如果你以这种形式组装系统并使用phoenixcard将其写入SD卡,那么u-boot很可能会启动。 但将无法访问mmc接口。 要使其出现,您需要运行命令:
mmcinfo出现对界面的访问,但无法访问 mmc 部分。 你需要做:
part list mmc 0现在您可以上传文件了 (fatload...)。
- 很明显,在u-boot控制台中输入这些命令是没有意义的,因此您需要在文件中写下引导的整个命令序列
//device/config/chips/[chip]/configs/[board]/linux/env-4.9.cfg :
....
#bootcmd=run setargs_nand boot_normal <-- 这需要禁用并替换为
bootcmd=mmcinfo; part list mmc 0; fatload mmc 0:3 0x42000000 boot.scr; source
....
6.如果使用mmc0,那么在文件中
//lichee/brandy-2.0/u-boot-2018/drivers/mmc/mmc.c在 mmc_exit(void) 函数中,您需要更改:
...
//int sdc_no = 2;
int sdc_no = 0;
...您可以组装系统(make)
- 镜像必须在“StartUp”模式下使用phoenixcard安装到SD卡上(不是“Product”!!!) 在这种情况下,应该出现对引导部分中的目录的访问,uImage 文件应位于其中。
您需要将boot.scr文件和board.dtb文件复制到该目录。 board.dtb 位于
//lichee/brandy-2.0/linux-4.9/arch/arm/boot/dts/
SDK 本身应该在构建时复制此文件,但由于某种原因它没有复制。
- 卸载SD 卡。 过程结束了!
- 很明显,在u-boot控制台中输入这些命令是没有意义的,因此您需要在文件中写下引导的整个命令序列
-
回复: f1c100s USB问题请教
@smbzd 在 f1c100s USB问题请教 中说:
musb-sunxi
你有DMA。 一切安好。 这可能不是这里的问题。
Linux 文档说您可以在 SCSI 协议中启用数据完整性检查。
https://docs.kernel.org/block/data-integrity.html : Block Layer Integrity API
您可以尝试这个方法来澄清问题。
-
回复: f1c100s可以改成rgb565,是不是只需要修改设备树就可以了?
@gaowei15537316965 在 f1c100s可以改成rgb565,是不是只需要修改设备树就可以了? 中说:
rgb888
由于我通过 VGA DAC 将设备连接到 VGA 显示器,因此我使用 dumb_vga_dac 驱动程序。
该驱动程序允许您选择多种模式。 这就是为什么我“即时”切换模式。您正在使用驱动程序 "panel-simple"。 该驱动程序仅允许一种模式。
对于 16 位,最有可能需要指定格式:
.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
但不是
.bus_format = MEDIA_BUS_FMT_RGB565_1X16,无论如何,在 sun4i_tcon.c 驱动程序中,sun4i_get_pixel_depth 函数提到了格式
MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
需要尝试一下。
-
V853 SDK:sys_partition.fex设置
是否有一些设置(在 sys_partition.fex 中?)来阻止 boot0 检查分区校验和?
我需要禁用 uboot 校验和验证。 -
回复: f1c100s USB问题请教
@smbzd 在 f1c100s USB问题请教 中说:
linux5.7
关于DTS,唯一的问题是 :
// compatible = "allwinner,suniv-musb";
compatible = "allwinner,sun4i-a10-musb";您使用什么驱动程序?
MUSB 设置是什么:DMA 还是 PIO?
-
回复: f1c100s可以改成rgb565,是不是只需要修改设备树就可以了?
@gaowei15537316965 在 f1c100s可以改成rgb565,是不是只需要修改设备树就可以了? 中说:
?
你用的是什么Linux? 我使用内核 5.4.66 构建了 buildroot 2022.02.4。 DRM(Direct render manager)图形支持。
我没有对驱动程序进行任何更改。 Linux 中有一组用于 DRM 子系统的实用程序,特别是 modetest。团队
./modetest -M sun4i-drm -s 49:800x600@RG16
运行没有错误。 “RG16”是16位模式。 还是我误解了你的情况?
-
回复: RTL8188FU驱动加载后ifconfig -a不显是wlan问题
@gadyellow 在 RTL8188FU驱动加载后ifconfig -a不显是wlan问题 中说:
FirmwareDownload fail
您在下载时遇到错误 firmware。 确保您正在下载的文件是 firmware 从您的适配器。
-
回复: AXP2101 IRQ唤醒功能为啥不能用
@sunblackshine 在 AXP2101 IRQ唤醒功能为啥不能用 中说:
wakeup
根据 AXP2101 文档,IRQ 引脚可以是输入或输出。 设置睡眠模式时,您可以 当 IRQ 电路设置为低电平一段时间时,对引脚进行编程以从睡眠模式唤醒。
控制器可以将电平设置为低。 控制器的 NMI 输出电路包含一个集电极开路晶体管开关 为了这些目的。 该密钥通过寄存器以编程方式控制。 -
V853 SDK:Linux内核下载。
你好。
我的设备从 SD 卡启动
1.为了简化驱动程序-linux内核模块的开发,我在SDK的menuconfig中进行了设置:
[] Include kernel in root filesystem
[] Include DTB in root filesystem组装好系统并将其安装到SD卡上后,我看到了linux内核文件,但找不到.dtb文件。
还需要配置什么才能使 dtb 文件位于文件系统上?- uboot 中从 SD 卡加载 Linux 内核的命令顺序是什么? 核心图像:uImage。
-
回复: V851S tina linux ov5647 驱动程序没有 dmesg
@kanken6174 在 V851S tina linux ov5647 驱动程序没有 dmesg 中说:
VIN_ERR
错误
[ 106.661031] [VIN_ERR]vin is not support this pixelformat
表示 VIN 驱动程序不支持为此传感器模式设置的像素格式
确保具有此名称的格式已在 VIN 驱动程序源中列出
-
回复: V853 SDK : PMU TWI
@awwwwa 在 V853 SDK : PMU TWI 中说:
V853s
我在 lunch 中选择了v853s-sc1718v选项。 使用 sys_config.fex 中的必要参数重建系统。 现在 boot0 阶段运行没有错误。
谢谢你! -
回复: V853 SDK : PMU TWI
@awwwwa 在 V853 SDK : PMU TWI 中说:
sys_config.fex
这就是 TWI 开始工作的方式。 但仍然存在与 PMU 相关的某种故障:
[244]HELLO! BOOT0 is starting!
[247]BOOT0 commit : 4b419f21ba
[251]PMU: AXP21
[254]set pll start
[256]periph0 has been enabled
[258]set pll end
[260]board init ok
[262]DRAM use external ZQ!!
[265]bootinfo error 3
[267]ic cant match axp, please check...
[270]init dram fail哪里需要修复以及什么需要修复?
V853-vision 使用 V853 控制器。 在我的设备 V853 中。 我需要更改配置文件中的任何内容吗?
我发现 V853 和 V853s 的 sys_config.fex 的 DRAM 控制器设置存在差异。但 DRAM 还无法初始化,因为 PMU 中尚未设置正确的内存供电电压。
-
回复: V851S I2C/TWI 损坏(xfer 错误)
@kanken6174 在 V851S I2C/TWI 损坏(xfer 错误) 中说:
。
您的波形图上不清楚信号的接地电平在哪里。 无论如何,最后一颗黄色“牙齿”的“低”电平高于其余的电平 冲动。 也就是说,控制器输出“下拉”的强度不够。全志GPIO有一个设置最大输出电流的寄存器:Px_DRVn。 我不知道当选择TWI功能时这个设置是否有效。 尝试在用户空间中通过 mmap 将寄存器地址简单地映射到内存进行试验。
关于上拉电阻。 我在 Omnivision 传感器的文档中没有找到它,但对于 AR0330 传感器,建议值为 1.5 Kom。
我的 A20 和 V3S MCU 上具有此上拉电阻的所有设备都可以与使用的所有传感器配合使用,在 TWI 上没有出现故障。 3.3V 和 1.8V。 -
回复: V853 SDK : PMU TWI
@awwwwa 在 V853 SDK : PMU TWI 中说:
sys_config.fex
谢谢。 我在 SDK 中找到了 2 个 sys_config.fex 文件:在 ..//aw_pack_src/other/ 和 ../out/..//image/ 中 。
我替换了两个文件中的值并重建了系统。 但新的 boot0_sdcard_sun8iw21p1.bin 文件与旧的一字节字节匹配。
什么也没有变。 也许在构建之前需要删除一些中间文件? -
V853 SDK : PMU TWI
你好
我的设备在 TWI0:PI3/PI4 接口上有一个 AXP2101 芯片。 如何分配这些参数 对于 BOOT0 (spl-pub) ?
我在配置文件、源文件和头文件中都没有找到这些值。 -
回复: V851S tina linux ov5647 驱动程序没有 dmesg
@kanken6174 在 V851S tina linux ov5647 驱动程序没有 dmesg 中说:
我正在从头开始重写它。
你好
当我在 linux 中开发传感器驱动程序时,我使用特殊代码将 ioctl 添加到 V4l2 驱动程序、VIN 驱动程序和传感器驱动程序中。
此 ioctl 用于直接从用户空间写入和读取传感器寄存器。 这种方法大大加快了开发速度, 因为从用户程序测试传感器寄存器编程的各种选项比从驱动程序测试要容易得多。 -
回复: v3s串口连接传感器,读取传感器数据时候出错
你好。
在控制台中运行命令:
echo 12345 >/dev/ttyS2如果答案是这样的:
write error: Input/output error这意味着问题不在于您的程序,而在于驱动程序。
需要在控制台查看 dmesg 命令的输出