A33

Allwinner A33

全志 A33

Posted by LXG on April 10, 2021

www.allwinnertech.com

主板demo

www.rervision.cn

a33

GPIO

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。GPIO是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO口的使用非常广泛。掌握了GPIO,差不多相当于掌握了操作硬件的能力。

RS485

原来RS-485这么简单

RS-485和RS-232一样,都是串行通信标准,现在的标准名称是TIA485/EIA-485-A,但是人们会习惯称为RS-485标准,RS-485常用在工业、自动化、汽车和建筑物管理等领域。

RS-485总线弥补了RS-232通信距离短,速率低的缺点,RS-485的速率可高达10Mbit/s,理论通讯距离可达1200米;RS-485和RS-232的单端传输不一样,是差分传输,使用一对双绞线,其中一根线定义为A,另一个定义为B。

UART0

通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议,在嵌入式领域应用的非常广泛。

UART作为异步串行通信协议的一种,工作原理是将传输数据的每个二进制位一位接一位地传输。在UART通信协议中信号线上的状态为高电平时代表‘1’,信号线上的状态为低电平时代表‘0’。比如使用UART通信协议进行一个字节数据的传输时就是在信号线上产生八个高低电平的组合。

TP

TP的全称叫touchpanel,字面意思就是触摸屏。常见触摸屏有电阻触摸屏和电容式触摸屏,现在我们使用的手持设备基本都是电容屏。触摸IC会计算出触摸坐标,然后通过i2c传送给平台,响应触摸事件。

android 串口通信

Demo 1

android-serialport-api


android-serialport-api/project$ tree
.
├── AndroidManifest.xml
├── jni
│   ├── Android.mk
│   ├── Application.mk
│   ├── gen_SerialPort_h.sh
│   ├── SerialPort.c
│   └── SerialPort.h
├── libs
│   ├── armeabi
│   │   └── libserial_port.so
│   ├── armeabi-v7a
│   │   └── libserial_port.so
│   └── x86
│       └── libserial_port.so
├── res
│   ├── drawable
│   │   └── icon.png
│   ├── layout
│   │   ├── console.xml
│   │   ├── loopback.xml
│   │   ├── main.xml
│   │   └── sending01010101.xml
│   ├── values
│   │   ├── baudrates.xml
│   │   └── strings.xml
│   └── xml
│       └── serial_port_preferences.xml
├── run_emulator.sh
└── src
    └── android_serialport_api
        ├── sample
        │   ├── Application.java
        │   ├── ConsoleActivity.java
        │   ├── LoopbackActivity.java
        │   ├── MainMenu.java
        │   ├── Sending01010101Activity.java
        │   ├── SerialPortActivity.java
        │   └── SerialPortPreferences.java
        ├── SerialPortFinder.java
        └── SerialPort.java

Demo 2

Android-SerialPort-API


Android-SerialPort-API$ tree
.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── LICENSE
├── README.md
├── sample
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src
│       ├── androidTest
│       │   └── java
│       │       └── android
│       │           └── serialport
│       │               └── sample
│       │                   └── ExampleInstrumentedTest.java
│       ├── main
│       │   ├── AndroidManifest.xml
│       │   ├── java
│       │   │   └── android
│       │   │       └── serialport
│       │   │           └── sample
│       │   │               ├── Application.java
│       │   │               ├── ConsoleActivity.java
│       │   │               ├── LoopbackActivity.java
│       │   │               ├── MainMenu.java
│       │   │               ├── Sending01010101Activity.java
│       │   │               ├── SerialPortActivity.java
│       │   │               └── SerialPortPreferences.java
│       │   └── res
│       │       ├── drawable
│       │       │   └── icon.png
│       │       ├── layout
│       │       │   ├── console.xml
│       │       │   ├── loopback.xml
│       │       │   ├── main.xml
│       │       │   └── sending01010101.xml
│       │       ├── values
│       │       │   ├── baudrates.xml
│       │       │   ├── colors.xml
│       │       │   ├── strings.xml
│       │       │   └── styles.xml
│       │       └── xml
│       │           └── serial_port_preferences.xml
│       └── test
│           └── java
│               └── android
│                   └── serialport
│                       └── sample
│                           └── ExampleUnitTest.java
├── serialport
│   ├── bintray.gradle
│   ├── build.gradle
│   ├── CMakeLists.txt
│   ├── proguard-rules.pro
│   └── src
│       └── main
│           ├── AndroidManifest.xml
│           ├── cpp
│           │   ├── gen_SerialPort_h.sh
│           │   ├── SerialPort.c
│           │   └── SerialPort.h
│           ├── java
│           │   └── android
│           │       └── serialport
│           │           ├── SerialPortFinder.java
│           │           └── SerialPort.java
│           └── res
│               └── values
│                   └── strings.xml
└── settings.gradle

设备唯一标识

Android 设备唯一标识

EMMC

eMMC 原理-蜂窝科技

eMMC 是 embedded MultiMediaCard 的简称。MultiMediaCard,即 MMC, 是一种闪存卡(Flash Memory Card)标准,它定义了 MMC 的架构以及访问 Flash Memory 的接口和协议。 而 eMMC 则是对 MMC 的一个拓展,以满足更高标准的性能、成本、体积、稳定、易用等的需求。

eMMC 分区


# ls /dev/block/mmcblk0*
/dev/block/mmcblk0
/dev/block/mmcblk0boot0
/dev/block/mmcblk0boot1
/dev/block/mmcblk0p1
/dev/block/mmcblk0p10
/dev/block/mmcblk0p11
/dev/block/mmcblk0p12
/dev/block/mmcblk0p2
/dev/block/mmcblk0p3
/dev/block/mmcblk0p5
/dev/block/mmcblk0p6
/dev/block/mmcblk0p7
/dev/block/mmcblk0p8
/dev/block/mmcblk0p9

emmc_partitions

  • BOOT Area Partition 1 & 2 此分区主要是为了支持从 eMMC 启动系统而设计的。 该分区的数据,在 eMMC 上电后,可以通过很简单的协议就可以读取出来。同时,大部分的 SOC 都可以通过 GPIO 或者 FUSE 的配置,让 ROM 代码在上电后,将 eMMC BOOT 分区的内容加载到 SOC 内部的 SRAM 中执行。

  • RPMB Partition RPMB 是 Replay Protected Memory Block 的简称,它通过 HMAC SHA-256 和 Write Counter 来保证保存在 RPMB 内部的数据不被非法篡改。 在实际应用中,RPMB 分区通常用来保存安全相关的数据,例如指纹数据、安全支付相关的密钥等。(SN序列号也可以写在此分区)

  • General Purpose Partition 1~4 此区域则主要用于存储系统或者用户数据。 General Purpose Partition 在芯片出厂时,通常是不存在的,需要主动进行配置后,才会存在。

  • User Data Area 此区域则主要用于存储系统和用户数据。 User Data Area 通常会进行再分区,例如 Android 系统中,通常在此区域分出 boot、system、userdata 等分区。

vendor/softwinner/tools/pack/chips/sun8iw5p1/configs/dvk3/bootlogo.bmp

串口调试

a33_uart_log

强制刷机

  1. 设备断电
  2. 按住音量按键不动
  3. 同时插入USB调试线
  4. 连续点击6次电源按键