0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【i.MX6ULL】驱动开发11——LCD驱动实践

码农爱学习 来源:码农爱学习 作者:码农爱学习 2022-05-30 09:31 次阅读

之前在Linux系统移植时提到过LCD驱动,本篇来看下Linux设备树如何配置LCD驱动。

1 知识点

首先需要了解一个新的概念:Framebuffer

1.1 Framebuffer

Framebuffer直译即帧缓冲,简称 fb,它是Linux将系统中所有跟显示有关的硬件以及软件集合起来,将底层的LCD虚拟抽象出一 个/dev/fbX设备,应用程序可以通过操作/dev/fbX来实现对屏幕的显示控制。

NXP官方Linux内核已默认开启了LCD驱动,在dev/目录下可以看到fb0这样一个设备

pYYBAGKQ6duARppzAAAJ7SLnI7I166.png

Framebuffer在内核中的表现就是fb_info结构体:

poYBAGKQ6eGAQSaHAAJWxNFTspQ039.png

完整的结构体定义如下:

struct fb_info {
	atomic_t count;
	int node;
	int flags;
	struct mutex lock;		/* Lock for open/release/ioctl funcs */
	struct mutex mm_lock;		/* Lock for fb_mmap and smem_* fields */
	struct fb_var_screeninfo var;	/* 当前的可变参数 */
	struct fb_fix_screeninfo fix;	/* 当前的固定参数 */
	struct fb_monspecs monspecs;	/* Current Monitor specs */
	struct work_struct queue;	/* Framebuffer event queue */
	struct fb_pixmap pixmap;	/* Image hardware mapper */
	struct fb_pixmap sprite;	/* Cursor hardware mapper */
	struct fb_cmap cmap;		/* Current cmap */
	struct list_head modelist;      /* mode list */
	struct fb_videomode *mode;	/* current mode */

#ifdef CONFIG_FB_BACKLIGHT
	/* assigned backlight device */
	/* set before framebuffer registration, 
	   remove after unregister */
	struct backlight_device *bl_dev;

	/* Backlight level curve */
	struct mutex bl_curve_mutex;	
	u8 bl_curve[FB_BACKLIGHT_LEVELS];
#endif
#ifdef CONFIG_FB_DEFERRED_IO
	struct delayed_work deferred_work;
	struct fb_deferred_io *fbdefio;
#endif

	struct fb_ops *fbops;       /* 帧缓冲操作函数集 */
	struct device *device;		/* This is the parent */
	struct device *dev;		    /* This is this fb device */
	int class_flag;             /* private sysfs flags */
#ifdef CONFIG_FB_TILEBLITTING
	struct fb_tile_ops *tileops;    /* Tile Blitting */
#endif
	char __iomem *screen_base;	    /* 虚拟内存基地址(屏幕显存) */
	unsigned long screen_size;	    /* 虚拟内存大小(屏幕显存大小) */ 
	void *pseudo_palette;		    /* 伪16位调色板 */ 
#define FBINFO_STATE_RUNNING	0
#define FBINFO_STATE_SUSPENDED	1
	u32 state;			            /* Hardware state i.e suspend */
	void *fbcon_par;                /* fbcon use-only private area */
	/* From here on everything is device dependent */
	void *par;
	/* we need the PCI or similar aperture base/size not
	   smem_start/size as smem_start may just be an object
	   allocated inside the aperture so may not actually overlap */
	struct apertures_struct {
		unsigned int count;
		struct aperture {
			resource_size_t base;
			resource_size_t size;
		} ranges[0];
	} *apertures;

	bool skip_vt_switch; /* no VT switch on suspend/resume required */
};

注意结构体中的fb_fops这一项,/dev/fb0 是个字符设备,fb_fops就是它的文件操作结构体,它的file_operations操作集在drivers/video/fbdev/core/fbmem.c 文件中:

pYYBAGKQ6emAcHWbAAEuF4Ealiw504.png
static const struct file_operations fb_fops = {
	.owner =	THIS_MODULE,
	.read =		fb_read,
	.write =	fb_write,
	.unlocked_ioctl = fb_ioctl,
#ifdef CONFIG_COMPAT
	.compat_ioctl = fb_compat_ioctl,
#endif
	.mmap =		fb_mmap,
	.open =		fb_open,
	.release =	fb_release,
#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
	.get_unmapped_area = get_fb_unmapped_area,
#endif
#ifdef CONFIG_FB_DEFERRED_IO
	.fsync =	fb_deferred_io_fsync,
#endif
	.llseek =	default_llseek,
};

可以看到有熟悉的open、release等函数接口。

因此,LCD驱动的重点就是初始化fb_info里面的各个成员

fb_info结构体的成员变量很多,需要重点关注的是这几个:

var:当前的可变参数

fix:当前的固定参数

fbops:帧缓冲操作函数集

screen_base:虚拟内存基地址(屏幕显存)

screen_size:虚拟内存大小(屏幕显存大小)

pseudo_palette:伪16位调色板

初始化完成fb_info后,通过register_framebuffer函数向内核注册刚刚初始化的fb_info。

1.2 LCD驱动文件mxsfb介绍

LCD的驱动文件为mxsfb.c,这是一种platform驱动框架,驱动和设备匹配之后,mxsfb_probe函数就会执行。

LCD的初始化通过mxsfb_probe函数来实现,该函数的主要功能有:

申请fb_info

初始化fb_info结构体中的各个成员变量

初始化eLCDIF控制器

使用register_framebuffer函数向Linux内核注册初始化好的fb_info

该函数位于:/drivers/video/fbdev/mxsfb.c中

pYYBAGKQ6feAWiotAAGEt1f1rI8451.png

该函数的实现如下:

static int mxsfb_probe(struct platform_device *pdev)
{
	const struct of_device_id *of_id =
			of_match_device(mxsfb_dt_ids, &pdev->dev);
	struct resource *res;
	struct mxsfb_info *host; //<-----NXP的fb_info
	struct fb_info *fb_info; //<-----Linux的fb_info
	struct pinctrl *pinctrl;
	int irq = platform_get_irq(pdev, 0);
	int gpio, ret;

	if (of_id)
		pdev->id_entry = of_id->data;

	gpio = of_get_named_gpio(pdev->dev.of_node, "enable-gpio", 0);
	if (gpio == -EPROBE_DEFER)
		return -EPROBE_DEFER;
	//省略...

	fb_info = framebuffer_alloc(sizeof(struct fb_info), &pdev->dev);//<--------申请fb_info
	if (!fb_info) {
		dev_err(&pdev->dev, "Failed to allocate fbdev\n");
		devm_kfree(&pdev->dev, host);
		return -ENOMEM;
	}
    host->fb_info = fb_info; //<---将mxsfb_info与fb_info联系起来
    fb_info->par = host;
	//省略...

	ret = mxsfb_init_fbinfo(host);
	if (ret != 0)
		goto fb_pm_runtime_disable;

	mxsfb_dispdrv_init(pdev, fb_info);
	//省略...
    
	ret = register_framebuffer(fb_info); //<------------注册
	if (ret != 0) {
		dev_err(&pdev->dev, "Failed to register framebuffer\n");
		goto fb_destroy;
	}

	console_lock();
	ret = fb_blank(fb_info, FB_BLANK_UNBLANK);
	console_unlock();
	if (ret < 0) {
		dev_err(&pdev->dev, "Failed to unblank framebuffer\n");
		goto fb_unregister;
	}

	dev_info(&pdev->dev, "initialized\n");
	
}

其中,register_framebuffer函数的原型如下:

poYBAGKQ6f2ATFifAACdgpuvrzM695.png

函数参数和返回值含义:

fb_info:需上报的fb_info

返回值:0-成功,负值-失败

1.3 LCD 驱动程序编写

6ULL的eLCDIF接口驱动程序 NXP 已经编 写好了,因此 LCD 驱动部分我们不需要去修改。我们需要做的就是按照所使用的 LCD 来修改设备树。

1.3.1 查看设备树

1.3 先来看一下NXP官方编写的Linux下的 LCD 驱动。打开 imx6ull.dtsi,然后找到 lcdif节点内容:

poYBAGKQ6geAI05xAAEPqzv9Foc558.png
lcdif: lcdif@021c8000 {
    compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif";
    reg = <0x021c8000 0x4000>;
    interrupts = ;
    clocks = <&clks IMX6UL_CLK_LCDIF_PIX>,
    <&clks IMX6UL_CLK_LCDIF_APB>,
    <&clks IMX6UL_CLK_DUMMY>;
    clock-names = "pix", "axi", "disp_axi";
    status = "disabled";
};

其中021c8000 这个地址,可以从参考手册中找到对应的介绍:

pYYBAGKQ6gyAEg2EAAGbSy0uBo8326.png

1.3.2 屏幕IO配置

打开 imx6ull-myboard.dts 文件,在 iomuxc 节点中找到如下内容:

poYBAGKQ6hOAPKPJAAEUZ0GO2ow553.png

具体为:

pinctrl_lcdif_dat: lcdifdatgrp {
			fsl,pins = <
				MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
				MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
				MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
				MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
				MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
				MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
				MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
				MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
				MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
				MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
				MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
				MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
				MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
				MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
				MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
				MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
				MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
				MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
				MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
				MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
				MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
				MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
				MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
				MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
			>;
		};

		pinctrl_lcdif_ctrl: lcdifctrlgrp {
			fsl,pins = <
				MX6UL_PAD_LCD_CLK__LCDIF_CLK	    0x79
				MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
				MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
				MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
			>;
		};

		pinctrl_pwm1: pwm1grp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
			>;
		};

这里有3个节点:

子节点pinctrl_lcdif_dat ,为 RGB LCD 的 24根数据线配置项

子节点 pinctrl_lcdif_ctrl ,为RGB LCD 的 4根控制线配置项,包括 CLK、ENABLE、VSYNC 和 HSYNC

子节点 pinctrl_pwm1 ,为RGB LCD 的背光亮度配置项

1.3.3 屏幕参数配置

在imx6ull-myboard.dts 文件中找到lcdif 节点,根据自己使用的LCD,修改为对应的参数。

下面是NXP官方板子的参数:

pYYBAGKQ6h6AVFuQAAEUaIK35xY705.png

我用的野火7寸屏(GT911,800x480),其参数为:

参数
width 800
height 480
HBP 46
HFP 22
VBP 23
VFP 22
HSPW 1
VSPW 1

修改后的lcdif 节点如下:

&lcdif {
	pinctrl-names = "default";             /* 使用到的 IO */ 
	pinctrl-0 = <&pinctrl_lcdif_dat
		     &pinctrl_lcdif_ctrl
		     &pinctrl_lcdif_reset>;
	display = <&display0>;
	status = "okay";

	display0: display {                  /* LCD 属性信息 */ 
		bits-per-pixel = <16>;           /* 一个像素占用几个bit */ 
		bus-width      = <24>;           /* 总线宽度 */ 

		display-timings {
			native-mode = <&timing0>;    /* 时序信息 */ 
			timing0: timing0 {
			clock-frequency = <9200000>; /* LCD像素时钟,单位Hz */ 
			hactive      = <800>;        /* LCD X轴像素个数 */ 
			vactive      = <480>;        /* LCD Y轴像素个数 */ 
			hfront-porch = <22>;         /* LCD hfp 参数 */ 
			hback-porch  = <46>;         /* LCD hbp 参数 */
			hsync-len    = <23>;         /* LCD hspw 参数 */ 
			vback-porch  = <22>;         /* LCD vbp 参数 */
			vfront-porch = <4>;          /* LCD vfp 参数 */ 
			vsync-len    = <1>;          /* LCD vspw 参数 */ 

			hsync-active    = <0>;       /* hsync 数据线极性 */ 
			vsync-active    = <0>;       /* vsync 数据线极性 */ 
			de-active       = <1>;       /* de 数据线极性 */ 
			pixelclk-active = <0>;       /* clk 数据线极性 */ 
			};
		};
	};
};

1.3.4 屏幕背光配置

通过PWM信号来控制LCD屏幕背光的亮度

pinctrl_pwm1: pwm1grp {
    fsl,pins = <
        MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0
        >;
};

LCD 背光要用到PWM1,因此也要设置 PWM1 节点,在imx6ull.dtsi 文件中找到如下内容:

poYBAGKQ6iaAVC86AADAsjJbxCU170.png

这个节点信息不用修改,使用默认的配置即可。如果要修改的话,也不要修改这里,可以通过imx6ull-myboard.dts文件中进行修改。

imx6ull-myboard.dts中的pwm1节点:

&pwm1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm1>;
	status = "okay";
};

imx6ull-myboard.dts中的backlight节点:

backlight {
    compatible = "pwm-backlight";
    pwms = <&pwm1 0 5000000>;
    brightness-levels = <0 4 8 16 32 64 128 255>;
    default-brightness-level = <6>;
    status = "okay";
};

2 实验测试

2.1使能Linux logo显示

uboot启动的时候,LCD左上角上会显示NXP的图标,而Linux内核启动的时候,LCD左上角上会显示一个小企鹅。因此,可以通过小企鹅logo的显示来验证LCD 驱动是否正常。

默认情况下是已经开启logo显示的,可以再确认一下。

在Linux内核源码目录,输入以下指令打开内核的图形化配置:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

Linux内核配置界面:

pYYBAGKQ6i-Ad5A1AADcC5xhFG8030.png

然后按下路径找到对应的配置项:

-> Device Drivers 
      -> Graphics support    
      -> Bootup logo (LOGO [=y])

最终到达这个界面:

poYBAGKQ6jiAcojvAAC7ckOdHh8415.png

这三个选项分别对应黑白、16 位、24 位色彩格式的 logo。

2.2 编译设备树

修改设备树中的lcdif节点后(主要是修改屏幕的参数),在Linux内核源码目录执行下面的命令,重新编译设备树并拷贝到网络启动位置。

make imx6ull-myboard.dtb
cp arch/arm/boot/dts/imx6ull-myboard.dtb ~/myTest/tftpboot/nxp/

然后重启开发板,就可以在Linux内核驱动的时候看到屏幕上的企鹅图标了:

pYYBAGKQ6j-AeAT6AACfhn-7Jb8456.png

2.3 设置LCD作为终端控制台

之前一直使用串口来显示板子的启动和调试信息,实际上可以设置 LCD 作为终端进行同步显示:

2.3.1 设置uboot的bootargs

重启开发板,在倒计时时按回充进入ubout,可以先看下之前的bootargs配置:

pYYBAGKQ6k-AdED9AACuvMeyOQE101.png

只需要在原来的基础上再添加console=tty1即可:

setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.5.104:/home/xxpcb/myTest/nfs/rootfs,proto=tcp,nfsvers=4 rw ip=192.168.5.102:192.168.5.104:192.168.5.1:255.255.255.0::eth1:off'
saveenv

然后重启开发板,在Linux内核驱动的时候就可以在屏幕上看到输出信息了:

pYYBAGKQ6mGAcR9rAAG6hmn4024059.png

对比一下串口输出的信息,可以看出屏幕输出到Freeing unused kernel memory: 400K (8090e000 - 80972000)这句后就没有了,没有出现按下回车键继续的提示,也没有显示开启自启动的hello word测试程序的打印,这是因为某些设置还未完成。

poYBAGKQ6meARQ1eAACkBVaBJjI565.png

2.3.2 修改/etc/inittab文件

该修改用于设置屏幕作为终端进行交互。

打开根文件系统中的/etc/inittab 文件,加入下面这一行:

tty1::askfirst:-/bin/sh 
pYYBAGKQ6nKAClaJAABHGtbOVNs968.png

保存后重启板子,并在板子的USB接口插上键盘,就可以通过键盘和板子交互了:

poYBAGKQ6neAVEBsAAEVE_63mY8980.png

现在通过板子插入键盘,也可以在屏幕上操作板子了。

注意,之前设置的开机启动的hello word程序的打印没有出现在屏幕上,是因为printf的输入没有设置的LCD中,我们可以通过将输出指向 /dev/tty1 来实现LCD屏幕的打印,比如测试屏幕输出hello linux:

echo hello linux > /dev/tty1 
pYYBAGKQ6oCAS-wyAALgJl3A3co509.png

2.4 其它问题

2.4.1 自动熄屏的问题

当没有操作LCD屏幕一段时间后,屏幕会自动黑屏,这时可以通过接入键盘按下回车键进行唤醒(也可以通过板子的ON/OFF按键进行唤醒,因为该按键也被赋予了回车键的功能)。

这个时间是在Linux源码的 drivers/tty/vt/vt.c中设置的,默认是10分钟(10*60秒)。

poYBAGKQ6oiAPNkRAADiJLxxJPQ190.png

如果想让屏幕一直亮着,可以将改值设为0,并重新编辑Linux内核得到zImage,然后用新的zImage启动开发板。

如果不想修改zImage,另外一种方式可以创建一个开机启动的应用程序来控制屏幕不熄灭, lcd_always_on.c的内容为:

#include  
#include  
#include  

int main(int argc, char *argv[]) 
{ 
    int fd; 
    fd = open("/dev/tty1", O_RDWR); 
    write(fd, "\033[9;0]", 8); 
    close(fd); 
    return 0; 
} 

在ubuntu中编译该程序,然后将可执行程序拷贝到板子的根文件系统中:

arm-linux-gnueabihf-gcc lcd_always_on.c -o lcd_always_on 
cp lcd_always_on ~/myTest/nfs/rootfs/usr/bin/
pYYBAGKQ6o-ADWgWAAJWE74TCes253.png

然后,/etc/init.d/rcS中设置该程序开机自启动即可。

poYBAGKQ6piAKQakAABr4Doq-Mc366.png

保存后,重启开发板,屏幕就不会自动熄屏了。

2.4.2 屏幕亮度调节

屏幕的亮度也是可以调节的,设备树中背光节点设置了8 个等级,可以在 0~7范围内进行亮度调节,进入下面的目录,可以查看当前屏幕的亮度:

/sys/devices/platform/backlight/backlight/backlight 

通过下面的指令可以实时修改屏幕的亮度,比如修改亮度为1:

echo 1 > brightness
pYYBAGKQ6uSAffK-AAFfbxEnsjU547.png

总结

本篇介绍了LCD屏幕驱动相关知识并进行了实验,因为NXP官方的板子和我这个板子的LCD引脚一样,因此主要的修改就是将设备树中的lcdif 节点的屏幕参数进行修改即可。

通过实验,可以将企鹅logo显示出来,并将板子的输出信息定向到了LCD屏幕显示,通过接入键盘可实现与Linux板子的交互。最后,还测试了屏幕熄屏和亮度调节功能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5059

    文章

    18972

    浏览量

    301922
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4403

    浏览量

    166903
  • Linux
    +关注

    关注

    87

    文章

    11204

    浏览量

    208702
  • LCD驱动
    +关注

    关注

    4

    文章

    88

    浏览量

    26608
  • i.MX6
    +关注

    关注

    1

    文章

    37

    浏览量

    16272
收藏 人收藏

    评论

    相关推荐

    i.MX6ULL 驱动开发7—按键输入捕获与GPIO输入配置与高低电平读取

    本篇主要介绍了i.MX6ULL的按键检测的使用,主要的知识点是设备树的修改,以及GPIO的输入配置与高低电平的读取。
    的头像 发表于 05-24 09:11 6088次阅读
    <b class='flag-5'>i.MX6ULL</b> <b class='flag-5'>驱动</b><b class='flag-5'>开发</b>7—按键输入捕获与GPIO输入配置与高低电平读取

    i.MX6ULL嵌入式Linux开发1-uboot移植初探

    本系列教程以i.MX6ULL处理器的ARM开发板为实验基础,学习记录嵌入式Linux开发的各种知识与经验,主要内容包括嵌入式Linux移植,嵌入式Linux驱动
    的头像 发表于 03-07 08:57 3831次阅读
    <b class='flag-5'>i.MX6ULL</b>嵌入式Linux<b class='flag-5'>开发</b>1-uboot移植初探

    使用i.MX6ULL开发板进行Linux根文件系统的完善

    上一篇推文讲了怎么移植根文件系统,并在i.MX6ULL开发板中运行起来,但是会出现一些提示,现在来进行根文件的完善。
    发表于 10-17 11:13 755次阅读

    移植NXP官方linux 5.4内核到i.MX6ULL开发

    本文描述移植NXP官方 linux 5.4 内核到i.MX6ULL开发板。
    发表于 12-19 11:10 1994次阅读

    i.MX6UL/i.MX6ULL开发常见问题】单独编译内核,uboot生成很多文件,具体用哪一个?

    i.MX6UL/i.MX6ULL开发常见问题》基于米尔电子 i.MX6UL/i.MX6ULL产品(V.10)2.3单独编译内核,uboot
    发表于 07-01 17:50

    迅为I.MX6ULL终结者开发板支持JTAG调试

    的硬件环境1、迅为-i.MX6ULL终结者开发板一块2、JLNK V9下载器一个3、JLINK V9转换板一个(2.54mm转2.0mm)1.2 搭建开发环境1.2.1 安装JLINK V9
    发表于 05-06 14:09

    I.MX6ULL终结者开发板裸机仿真jlink调试

    I.MX6ULL‘终结者’开发板预留了JTAG仿真接口,并给出了开发文档,可以实现在JLINK仿真器条件下的单步跟踪、断点调试等功能,使得开发研究i
    发表于 07-07 10:56

    i.MX6ULL开发板硬件资源

    迅为i.MX6ULL 终结者开发板硬件资源非常丰富,几乎将 i.MX6ULL 芯片的所有资源都扩展引出到底板上了,底板提供了丰富的外设接口,开发板的尺寸是 190mm*125mm,充分
    发表于 12-29 06:18

    初识 i.MX6ULL 寄存器

    裸机开发_L1_汇编LED实验0. 本节目标1. 硬件层电路2. 初识 i.MX6ULL 寄存器2.1 i.MX6ULL 时钟控制寄存器2.2 i.MX6ULL IO复用寄存器2.3
    发表于 12-20 07:13

    I.MX6ULL无法枚举USB2514是为什么?

    你好目前,I.MX6ULL开发存在一些问题。其中之一是OTG USB2无法正常挂载USB2514,无法正确枚举下游设备,只显示设备id。usb设计要注意什么。
    发表于 04-03 06:55

    飞凌i.MX6ULL开发板的评测,再次进阶拥有更高的性价比

    处理器MCIMX6Y2开发设计,采用先进的ARMCortex-A7内核,运行速度高达800MHz。i.MX6ULL应用处理器包括一个集成的电源管理模块,降低了外接电源的复杂性,并简化了上电时序。
    发表于 10-27 11:55 1446次阅读
    飞凌<b class='flag-5'>i.MX6ULL</b><b class='flag-5'>开发</b>板的评测,再次进阶拥有更高的性价比

    基于NXP i.MX6ULL处理器的FETMX6ULL-C核心板

    合作伙伴,飞凌不负美誉,基于i.MX6ULL匠心打造的FETMX6ULL-S核心板一经问世便好评不断,且已有数百家来自工业、医疗、电力、物联网等行业的用户采用此款核心板快速完成了整机产品的开发上市。
    发表于 04-11 15:05 1128次阅读
    基于NXP <b class='flag-5'>i.MX6ULL</b>处理器的FETMX<b class='flag-5'>6ULL</b>-C核心板

    i.MX6ULL驱动开发4——点亮LED(寄存器版)

    本篇主要介绍了如何通过操作寄存器来点亮i.MX6ULL开发板上的led,通过编写LED对应的驱动程序和应用程序,实现程序设计的分层。
    的头像 发表于 05-21 21:26 2916次阅读
    【<b class='flag-5'>i.MX6ULL</b>】<b class='flag-5'>驱动</b><b class='flag-5'>开发</b>4——点亮LED(寄存器版)

    【北京迅为】i.MX6ULL开发板移植 Debian 文件系统

    【北京迅为】i.MX6ULL开发板移植 Debian 文件系统
    的头像 发表于 02-10 15:34 1094次阅读
    【北京迅为】<b class='flag-5'>i.MX6ULL</b><b class='flag-5'>开发</b>板移植 Debian 文件系统

    基于i.MX6ULL的掉电检测设计与软件测试

    基于i.MX6ULL的掉电检测设计与软件测试基于i.MX6ULL平台设计实现掉电检测功能,首先选择一路IO,利用IO电平变化触发中断,在编写驱动时捕获该路GPIO的中断,然后在中断响应函数中发
    的头像 发表于 11-09 10:40 795次阅读
    基于<b class='flag-5'>i.MX6ULL</b>的掉电检测设计与软件测试