Yuhang Zheng
LS10XX的RCW参数修改方法

在使用LS10xx系列核心板开发项目的过程中,有时候需要根据自己的需求修改一些引脚功能或者一些引脚设置,难免有需要修改RCW(Reset ConfigurationWord)的时候。本文就是根据平时开发的经验谈一下LS10xx系列开发板修改RCW参数修改的方法。

针对三个平台的修改的RCW文件位置分别为:

LS1012平台:

flexbuild/packages/firmware/rcw/ls1012ardb/R_SPNH_3508/rcw_1000_default.rcw

LS1043平台:

flexbuild/packages/firmware/rcw/ls1043ardb/RR_FQPP_1455/rcw_1600_qspiboot.rcw

LS1046平台:

SerDes为1040_5559的rcw配置文件:
packages/firmware/rcw/ls1046ardb/FORLINX/rcw_1800_qspiboot_1040_5559.rcw
SerDes为1133_5559的rcw配置文件:
packages/firmware/rcw/ls1046ardb/FORLINX/rcw_1800_qspiboot_1133_5559.rcw
Linux内核编程广泛使用的前向声明(转载)

前向声明

编程定律

先强调一点:在一切可能的场景,尽可能地使用前向声明(Forward Declaration)。这符合信息隐蔽的原则。

一个例子

regmap

那么前向声明究竟是个什么鬼?在内核写代码和看代码的童鞋,经常发现Linux内核里面充斥着这样的代码,比如

include/vim linux/regulator/driver.h

LS1046网口RCW及网口配置修改示例

LS1046网口RCW及网口配置修改示例   本文要解决的问题: 由于LS104x系列开发板引入了【复位控制字】Reset configuration word (RCW)的配置方法,通过这种配置方法客户可以方便的进行引脚的功能定义,也就是实现引脚的PinMUX功能。 LS104x平台所特有的SerDes Module也是要通过RCW来进行配置,从而将不同的SerDes通道选择为不同的功能。以LS1046A为例,可配置的两路SerDes有: 1046_Serdes1 1046_Serdes2 但是这个被称为RCW的配置方法还有很多客户还不是很了解,所以本文以一个LS1046A的实际需求为例,来详细说明一下修改的过程以供客户后续定制参考。

基于i.MX6X的音频驱动分析(一)ALSA and ASOC基本概念

ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,它提供了linux操作系统的音频与MIDI功能 。

在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

alsa的软件体系结构

图1.1 alsa的软件体系结构

基于i.MX6X的音频驱动分析(二)音频驱动的流程,平台数据,内核配置与测试

音频驱动的打开流程

ALSA音频驱动执行以下设备打开流程:

  • 分配一个空闲的操作子流
  • 打开低层硬件设备
  • 提供硬件能力给ALSA runtime信息(包括硬件,DMA,软件支持能力)
  • 配置读写DMA通道
  • 配置CPU DAI和Codec DAI接口
  • 配置Codec硬件
  • 触发传输。

音频传输触发后,接下来的DMA读写操作则由DMA的中断 Callback函数操作。

基于i.MX6X的音频驱动分析(三)音频驱动ASoC的机器层

前面一节的内容我们提到,ASoC被分为Machine、Platform和Codec三大部分。

其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:

Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。

ASoC的一切都从Machine驱动开始,包括声卡的注册,绑定Platform和Codec驱动等等,下面就让我们从Machine驱动开始讨论吧

注册Platform Device

ASoC把声卡注册为Platform Device,以WM8960为例 ,涉及文件:sound/soc/imx/imx-wm8960.c

其模块初始化函数为:module_init(imx_asoc_init);

千兆网之RGMII解析

一般来说,底板的千兆网大多选用RGMII和SGMII两种接口,也有可以拓展出更多网口的QSGMII接口。

这一篇文章就是简单解析一下RGMII这种接口的内容。

RGMII均采用4位数据接口,工作时钟125MHz,并且在上升沿和下降沿同时传输数据,因此传输速率可达1000Mbps。

锂电池充放电电压注意事项

我目前手边上有一个7.4v的锂电池,因为不常用,又怕总是搁置着会慢慢给放坏,所以网上查了一下7.4v锂电池的充电注意事项,特此记录一下。

7.4V一般是2串锂电的电池组,这也可以从电池的充电接口看到,一般是一个3p的接口,如果用万用表去测量的话,分别为0v,一串电池的电压,两串电池的电压。

单串电池的充放电范围是4.2V-2.7V,也就是说,如果电池电压一致性比较好的话,充电的满电电压是8.4V,放电的最低电压是5.4V。

如果没有保护板的话在5.4V以下也许用电器还能工作,但电池已经不能再用了,会损失寿命,需要充电再用。

另外锂电池对电压上下限很敏感,经常超高或超低会极大地损失循环寿命。

也就是对于7.4v的锂电池来说

满电 标称 停止 终止
8.4v 7.4v 7.0v 6.0v

在内核驱动文件./drivers/power/supply/da9052-battery.c中,有以下内容

    {
    {4102, 100}, {4065, 98},
    {4048, 96}, {4034, 95},
    {4021, 93}, {4011, 92},
    {4001, 90}, {3986, 88},
    {3968, 87}, {3952, 85},
    {3938, 84}, {3926, 82},
    {3916, 81}, {3908, 79},
    {3900, 77}, {3892, 76},
    {3883, 74}, {3874, 73},
    {3864, 71}, {3855, 70},
    {3846, 68}, {3836, 67},
    {3827, 65}, {3819, 64},
    {3810, 62}, {3801, 61},
    {3793, 59}, {3786, 58},
    {3778, 56}, {3772, 55},
    {3765, 53}, {3759, 52},
    {3754, 50}, {3748, 49},
    {3743, 47}, {3738, 46},
    {3733, 44}, {3728, 43},
    {3724, 41}, {3720, 40},
    {3716, 38}, {3712, 37},
    {3709, 35}, {3706, 34},
    {3703, 33}, {3701, 31},
    {3698, 30}, {3696, 28},
    {3693, 27}, {3690, 25},
    {3687, 24}, {3683, 22},
    {3680, 21}, {3675, 19},
    {3671, 18}, {3666, 17},
    {3660, 15}, {3654, 14},
    {3647, 12}, {3639, 11},
    {3630, 9}, {3621, 8},
    {3613, 6}, {3606, 5},
    {3597, 4}, {3582, 2},
    {3546, 1}, {2747, 0}
    },

由上可以看到,当单串电池电压到3.5v时,电池电量已经接近于0了,所以平时在放电的时候,要注意电池组电压不要低于7v

wm8960芯片驱动打印寄存器方法

目前在调试wm8960芯片的时候遇到一个问题,需要能够打印wm8960芯片上的寄存器的值。

但是通过wm8960的手册我们知道,它的寄存器地址是7为,数据是9位,不是标准的i2c协议的情况,只支持了i2c来写寄存器,没有实现i2c读寄存器。

image-20220908105702728

handsome主题预览文章的问题

根据网页开发人员工具中的报错

from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow

确定是apache2设置跨域的问题,首先使能apache2的头部请求模块

root@73b0c7f2587a:/var/www/html# a2enmod headers.load
Enabling module headers.
To activate the new configuration, you need to run:
  service apache2 restart
root@73b0c7f2587a:/var/www/html# service apache2 restart

其次是修改apache2的配置,修改

/etc/apache2/sites-enabled/000-default.conf

增加

        Header set Access-Control-Allow-Origin *
        Header set Access-Control-Allow-Credentials true
        Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"

如果是使用的nginx搭建的网站,则需要修改配置文件,在location关键字下增加

location / {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        }

然后根据网页开发人员工具中的报错

The document is sandboxed and lacks the 'allow-same-origin' flag.

确定是iframe中的sandbox缺少’allow-same-origin’属性的问题

修改Typecho根目录中的

./admin/write-js.php

文件,修改如下

    function previewData(cid) {
        isFullScreen = $(document.body).hasClass('fullscreen');
        $(document.body).addClass('fullscreen preview');

        var frame = $('<iframe frameborder="0" class="preview-frame preview-loading"></iframe>')
            .attr('src', './preview.php?cid=' + cid)
            .attr('sandbox', 'allow-scripts allow-same-origin')
            .appendTo(document.body);

        frame.load(function () {
            frame.removeClass('preview-loading');
        });

        frame.height($(window).height() - 53);
    }

主要是这一句话

.attr('sandbox', 'allow-scripts allow-same-origin')