5 全志_全志科技:智能应用时代的芯片王者

全志科技成立于 2007 年,于 2015 年 5 月登录 A 股创业板,是国内领先的智能应用处理器 SoC、高性能模拟器件和无线互联芯片设计厂商。自成立以来,公司一直致力于为客户提供系统级的超大规模数模混合 SoC、智能电源管理芯片、无线互联芯片以及相关软硬件的研究与应用技术开发。2009 年,公司发布第一代电源管理芯片 AXP186;2011 年,公司发布第一代平板处理器A10,仅用时一年,公司便凭借强大的技术研发优势及产品性能优势, 实现安卓平板处理器销量全球第一;2014 年,公司开始全面拓展产品线布局,先后发布互联网机顶盒、消费电子A 系列、家庭娱乐 H 系列、车联网应用 T&V 系列、智能硬件 R 系列等处理器,实现了单市场、单产品、单客户到多市场、多产品、多客户的转型。

在芯片设计层,设计了兼容不同核数、 不同算力、差异化应用需求的 SoC 设计技术平台;在板级电路设计层,形 成了信号和电源完整性、热设计、可生产性设计的板级设计技术平台;在基 础软件层,具备了基于 RTOS、Linux、Android 三级操作系统的软件设计技 术平台;在应用层,积累了面向不同应用领域的产品开发平台。

a4ba8f59d2127b82ba6f96caab60fc34.png

全志科技以客户为中心,坚持核心技术长期投入,在超高清视频编解码、 高性能 CPU/GPU/AI 多核整合、先进工艺的高集成度、超低功耗、全栈集成平台等方面提供具有市场突出竞争力的系统解决方案和贴心服务。按下游应用领域不同,目前公司的产品已形成智能终端应用处理器芯片、智能电源管 理芯片、无线通信产品、存储芯片、4GLTE 芯片五大主要业务板块,其中智能终端应用处理器芯片 2019 年营收占比达 67.34%,是公司最主要的产品。

af74ed22356f732b5466f31ce63a804f.png

公司围绕智能大视频战略,持续根据客户需求投入研发,在各个业务领 域推出具有竞争力的新产品及新方案,主要产品广泛适用于智能硬件、平板 电脑、智能家电、车联网、机器人、虚拟现实、网络机顶盒以及电源模拟器 件、无线通信模组、智能物联网等多个产品领域。

公司坚持“SoC+”和“智能大视频”的战略定位

公司已形成智能硬件、智能车载、OTT 和通用平板领域处理器四位一体的业务结构,提供多组合不同 配置的产品包解决方案,能够全方位覆盖不同细分市场客户的多元化需求。未来,公司将继续围绕智能大视频的战略方向,基于现有技术及持续研发, 不断开发新产品线,积极拓展销售渠道、开发新客户,通过合理有效的渠道政策,结合平台的持续建设,结盟强有力的渠道伙伴、方案商和开发者伙伴, 形成围绕公司芯片的技术生态和产业链生态,提升公司的客户支持服务质量。

8f85428a9717a99efb706e5a7d698421.png

1、智能硬件:

随着 5G 时代的到来及深度学习、人工智能、云计算等技术的兴起,越来越多的行业将 AI和 IoT 融合并应用到智能化领域,各行业智能化升级成为必然趋势。

伴随着传统音箱和蓝 牙音箱的大力普及,人们往往在音质和便携控制方面难以取得一个很好的平 衡,WIFI 音箱配合语音控制、云平台,既能兼容这二者的优点,又能创造出颠覆式的交互体验,有望成为引导未来新兴消费电子发展、全方位构建物联网智慧生态的入口级产品,因此全球各大互联网及硬件公司纷纷先后进行相关布局。

智 能硬件领域的客户需求具有多元化个性化的特征,随着智能家居生态入口的争夺战愈加激烈,诸如智能家电、智能门锁、扫地机、智能音箱、智能穿戴等强交互智能产品将迎来新一轮需求增长。

2、、智能车载:

人们对于汽车节能性、安全性、舒适性和娱乐性日益提升的需求,推动着汽车向智能化、网络化和电子化飞速发展,适用于新能源汽车以及支持先进驾驶员辅助系统和联网功能的下一代汽车电子产品正慢慢占领市场,尤其 是座舱电子如全液晶仪表、车载信息娱乐系统、360 环视、流媒体后视镜、 车联网模块、各种 ADAS 等,在近两年开始成为新车的一种主流配置。

全志科技一直致力于加深产业链协同, 和上下游企业深入战略合作,以推进智能驾驶的落地,并拓宽 AI 应用场景的边界。2017 年,全志科技和科大讯飞签署战略合作协议,进一步拓展强化汽车领域的合作;2018 年,全志科技宣布与地平线达成深度合作,联合进行 ADAS+DMS 产品的研发和推广;2019 年,全志科技和 OPEN AI LAB 达成战略合作,后者授权前者在车规芯片 T7 上搭载 Tengine 加速平台,以 提升芯片对视频类算法的效率,加速智能辅助驾驶(ADAS&DMS)、共享显示、 通勤显示类领域的视频类应用的落地。

2018 年,全志科技推出针对数字座舱的车规 (AEC-Q100)平台型处理器 T7,该芯片是第一颗通过车规认证的国内自主平台型SoC芯片,可以满足信息娱乐系统、数字仪表、360环视系统、ADAS、 DMS、流媒体后视镜、云镜等多个不同智能化系统的运行需求,让车企仅仅凭借一款芯片,就可以实现上述产品的开发,从而很好地帮助整车厂降本增效,同时提升座舱电子产品的可扩展性。

目前公司产 品已覆盖智能车载多媒体、智能液晶仪表、流媒体后视镜、安全辅助驾驶等领域。针对后装市场客户需求,公司持续进行产品创新,同时提高产品集成度,降低客户整机方案成本,成为后装市场主流方案的供应商。前装市场, 公司与多家知名车厂和 tier1 合作,布局 360 环视系统、行业车辆辅助驾驶系统,并推动公司智能驾驶方案在多款新车型上实现量产。随着汽车电子化 进程加速及前端市场客户持续突破,公司有望获得持续业绩增长。

3、通用平板:

我国平板电脑市场为典型的寡头垄断市场,大部分市场份额由苹果、华为等少数几家智能终端设备制造龙头企业所占据。我国平板电脑市场集中度明显,2019 年的行业 CR2 为 71.1%,CR5 则高达 82.7%。

公司持续完善产品性能,升级系统进行产品迭代,发力教育平板等行业差异化的市场需求。公司 2020 年推出四核 64 位平板应用处理器 A100,该处理器具有强大的运算和多媒体能力,支持双摄及内置 13MISP, 搭载双频 5GACWiFi,是专为中低平板电脑应用而设计的高度集成的应用处理器。

公司不断发掘优势外围资源,提高器件兼容性,降低整机成本,和家乐福等品牌商深度绑定,每年稳定出货千万量级白牌平板电脑,并通过和谷歌更为紧密的合作,保持在平板市场的行业地位,未来有望跟随行 业发展实现稳定营收。

公司与阿里平头哥战略合作,共同布局 RISC-V 生态

全志科技已和阿里旗下半导体公司平头哥达成战略合作,全 志科技将基于平头哥玄铁处理器研发全新的计算芯片,该芯片将应用于工业 控制、智能家居、消费电子等领域,预计 3 年出货 5000 万颗。由于 AIoT 场景的发展,芯片设计模式正在迎来新的变化,传统通用芯片架构的问题日 益凸显。为了降低芯片设计门槛,以平头哥为代表的企业率先布局开源 RISC-V 架构技术,并推出了更开放、更灵活的自研处理器 IP,可满足不同 场景的性能及功耗需求。

过去几年,RISC-V 生态逐渐成熟,并迅速成为芯片产业链的主流选择, 全志是积极拥抱该技术的芯片商之一。作为国内老牌芯片厂商,全志芯片年 出货量在亿级以上。过去十余年,其核心产品均基于 ARM 架构开发。现在, 平头哥玄铁系列处理器为全志提供了新的选择。据悉,双方首款合作产品已 经开始研发,即全志科技基于平头哥玄铁 906 和 902 处理器开发通用算力芯 片,量产周期可进一步缩短,并且有望在功耗上实现新的突破,该芯片可应 用于智能家居、工业控制及消费电子领域。未来,全志还将推出更多基于玄 铁系列处理器的芯片。

平头哥半导体有限公司是阿里巴巴全资的半导体芯片业务主体,主要针 对下一代云端一体芯片新型架构开发数据中心和嵌入式 IoT 芯片产品。平头 哥是阿里于 2018 年成立的全资控股半导体公司,主要推动高水平芯片的研 发和产业化,尤其是下一代云端一体芯片。平头哥从云和端两个方面进行软 硬深度协同的技术创新,目标是让数据和计算更普惠,持续拓展数据技术的 边界。目前已经发布了三款产品——玄铁 CPU、无剑 SoC 平台、含光 NPU 人工智能芯片。

作为最早布局 RISC-V 技术的企业之一,平头哥已拥有高性能及低功耗 等丰富的处理器 IP,在 RISC-V 技术上拥有深厚的技术积累。2019 年 7 月, 平头哥发布业界领先性能 RISC-V 处理器玄铁 910,其性能达到旗舰智能手 机级别。

4d937295d812c4c271fcc3bd364d999d.png

盈利预测

1、智能终端应用处理器芯片:公司智能终端应用处理器芯片主要包括 6 个系列数十种产品,与小米、美的等 IoT 厂商合作紧密。我们预计随着智能终端下游市场细分领域的发展和渗透率的增加,公司智能终端部分业务将保持快速增长,2020-2022 年预计取得营业收入12.47/16.83/22.95 亿元。

2、智能电源管理芯片:公司电源管理产品主要为AXP 系列,提供智能供电、电池管理功能,搭配主控芯片使用,收入增长稳健。我们预计 2020-2022 年电源管理业务可以贡献收入 1.88/2.40/2.95亿元。

3、无线通信产品:公司无线通信产品业务以互联芯片XR 系列为主,主要面向智能早教机、儿童机器人等下游市场。我们预计公司WIFI + MCU无线互联产品将持续为日益增长的物联网需求提供低功耗的解决方案,2020-2022 年 预计取得营收 1.63/1.88/2.10亿元。

4、模组及其他业务:公司模组业务包括4GLTE芯片以及存储芯片等业务, 主要为下游客户模组需求配套提供相应通讯及存储功能。随着公司下游市场的稳步发展,我们预计模组业务 2020-2022 年将取得营收2.06/2.47/2.84亿元。

我们预计全志科技2020-2022年营业收入分别为18.04/23.58/30.84亿元,综合毛利率分别为 30.72%/30.40%/30.03%;我们预计公司 20-22 年归母净利润为1.63/2.20/2.95亿元,对应EPS分别为0.49/0.66/0.89元。公司2020-2022 年 PE估值为 84x、62x、46x

公司坚持“SoC+”和“智能大视频”的行业定位,围绕 MANS 战略路线持续进行技术领域的布局和投入,2019 年研发投入超过20%。公司在布局ARM 生态基础上,携手阿里布局 RISC-V 生态,在智能硬件、平板电脑、工业交通以及高清视频解码领域推出符合客户需求的 SoC 产品,有望深度受益于 5G、 AI以及 IoT的产业趋势,公司估值低于行业平均市盈率,未来公司高速增长可期。

股价上涨的催化因素

1、 智能音箱需求快速增加,有望打开智能家居成长空间,带动公司智能硬件 SoC 产品销量提升。2、 汽车电子化进程加速及前装市场客户持续突破,带动公司智能车载业务获得持续业绩增长。

3、 教育、医疗等细分领域平板电脑需求增长,推动平板市场渗透率提升,进一步扩大公司平板电脑 SoC 销售规模。

全志R40平台的tinav2.1系统下打开SPI2接口 1、(可选修改) Q:\r40_tinav2.1\spi20_r40_tinav2.1\lichee\brandy\build.sh build_uboot() { if [ "x${PLATFORM}" = "xsun50iw1p1" ] || \ [ "x${PLATFORM}" = "xsun50iw2p1" ] || \ [ "x${PLATFORM}" = "xsun50iw6p1" ] || \ [ "x${PLATFORM}" = "xsun50iw3p1" ] || \ [ "x${PLATFORM}" = "xsun8iw12p1" ] || \ [ "x${PLATFORM}" = "xsun8iw10p1" ] || \ [ "x${PLATFORM}" = "xsun8iw11p1" ]; then cd u-boot-2014.07/ else cd u-boot-2011.09/ fi make distclean if [ "x$MODE" = "xota_test" ] ; then export "SUNXI_MODE=ota_test" fi make ${PLATFORM}_config make -j16 #make spl #make fes if [ ${PLATFORM} = "sun8iw11p1" ]; then make distclean make ${PLATFORM}_nor_config make -j16 #make spl #make fes fi cd - 1>/dev/null } 2、 Q:\r40_tinav2.1\spi20_r40_tinav2.1\lichee\linux-3.10\drivers\spi\spidev.c static struct spi_driver spidev_spi_driver = { .driver = { .name = "spidev", .owner = THIS_MODULE, .of_match_table = of_match_ptr(spidev_dt_ids), }, .probe = spidev_probe, .remove = spidev_remove, /* NOTE: suspend/resume methods are not necessary here. * We don't do anything except pass the requests to/from * the underlying controller. The refrigerator handles * most issues; the controller driver handles the rest. */ }; 3、验证APP程序: Q:\r40_tinav2.1\spi20_r40_tinav2.1\package\allwinner\spidev20_test\Makefile ############################################## # OpenWrt Makefile for helloworld program # # # Most of the variables used here are defined in # the include directives below. We just need to # specify a basic description of the package, # where to build our program, where to find # the source files, and where to install the # compiled program on the router. # # Be very careful of spacing in this file. # Indents should be tabs, not spaces, and # there should be no trailing whitespace in # lines that are not commented. # ############################################## include $(TOPDIR)/rules.mk # Name and release number of this package PKG_NAME:=spidev20_test PKG_VERSION:=0.0.1 PKG_RELEASE:=1 # This specifies the directory where we're going to build the program. # The root build directory, $(BUILD_DIR), is by default the build_mipsel # directory in your OpenWrt SDK directory PKG_BUILD_DIR := $(COMPILE_DIR)/$(PKG_NAME) include $(BUILD_DIR)/package.mk # Specify package information for this program. # The variables defined here should be self explanatory. # If you are running Kamikaze, delete the DESCRIPTION # variable below and uncomment the Kamikaze define # directive for the description below define Package/spidev20_test SECTION:=utils CATEGORY:=Allwinner TITLE:=spidev20_test just test the SPI2 interface DEPENDS:=+libpthread endef # Uncomment portion below for Kamikaze and delete DESCRIPTION variable above define Package/spidev20_test/description If you can't figure out what this program does, you're probably brain-dead and need immediate medical attention. endef # Specify what needs to be done to prepare for building the package. # In our case, we need to copy the source files to the build directory. # This is NOT the default. The default uses the PKG_SOURCE_URL and the # PKG_SOURCE which is not defined here to download the source from the web. # In order to just build a simple program that we have just written, it is # much easier to do it this way. define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef define Build/Configure endef define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ CC="$(TARGET_CC)" \ CFLAGS="$(TARGET_CFLAGS)" -Wall \ LDFLAGS="$(TARGET_LDFLAGS)" \ LIBS="-lpthread" \ all endef # We do not need to define Build/Configure or Build/Compile directives # The defaults are appropriate for compiling a simple program such as this one # Specify where and how to install the program. Since we only have one file, # the helloworld executable, install it by copying it to the /bin directory on # the router. The $(1) variable represents the root directory on the router running # OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install # directory if it does not already exist. Likewise $(INSTALL_BIN) contains the # command to copy the binary file from its current location (in our case the build # directory) to the install directory. define Package/spidev20_test/install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/spidev20_test $(1)/bin/ endef # This line executes the necessary commands to compile our program. # The above define directives specify all the information needed, but this # line calls BuildPackage which in turn actually uses this information to # build a package. $(eval $(call BuildPackage,spidev20_test)) Q:\r40_tinav2.1\spi20_r40_tinav2.1\package\allwinner\spidev20_test\src\Makefile TARGET = spidev20_test INCLUDES += -I. -Icommon/ LIBS += -lpthread -lm -lrt SRCS = spidev20_test.c OBJS = $(SRCS:.c=.o) %.o: %.c $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< $(TARGET): $(OBJS) $(CC) -o $@ $(OBJS) $(LIBS) $(LDFLAGS) all:$(TARGET) clean: rm -rf $(TARGET) *.o *.a *~ cd common && rm -f *.o *.a *.bak *~ .depend Q:\r40_tinav2.1\spi20_r40_tinav2.1\package\allwinner\spidev20_test\src\spidev20_test.c /* * SPI testing utility (using spidev driver) * * Copyright (c) 2007 MontaVista Software, Inc. * Copyright (c) 2007 Anton Vorontsov <avorontsov@ru.mvista.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License. * * Cross-compile with cross-gcc -I/path/to/cross-kernel/include */ #include <stdint.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <getopt.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/types.h> #include <linux/spi/spidev.h> #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) static void pabort(const char *s) { perror(s); abort(); } //static const char *device = "/dev/spidev0.0"; //static const char *device = "/dev/spidev0.1"; static const char *device = "/dev/spidev2.0"; static uint8_t mode; static uint8_t bits = 8; static uint32_t speed = 500000; static uint16_t delay; static void transfer(int fd) { int ret; //uint8_t tx[] = { // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x40, 0x00, 0x00, 0x00, 0x00, 0x95, // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xAD, // 0xF0, 0x0D, //}; // CityBrand WelCome U! uint8_t tx[] = { 0x43, 0x69, 0x74, 0x79, 0x42, 0x72, 0x61, 0x6E, 0x64, 0x20, 0x57, 0x65, 0x6C, 0x43, 0x6F, 0x6D, 0x65, 0x20, 0x55, 0x21, 0x43, 0x69, 0x74, 0x79, 0x42, 0x72, 0x61, 0x6E, 0x64, 0x20, 0x57, 0x65, 0x6C, 0x43, 0x6F, 0x6D, 0x65, 0x20, 0x55, 0x21, 0x43, 0x69, 0x74, 0x79, 0x42, 0x72, 0x61, 0x6E, 0x64, 0x20, 0x57, 0x65, 0x6C, 0x43, 0x6F, 0x6D, 0x65, 0x20, 0x55, 0x21, }; uint8_t rx[ARRAY_SIZE(tx)] = {0, }; struct spi_ioc_transfer tr = { .tx_buf = (unsigned long)tx, .rx_buf = (unsigned long)rx, .len = ARRAY_SIZE(tx), .delay_usecs = delay, .speed_hz = speed, .bits_per_word = bits, }; ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr;); if (ret < 1) pabort("can't send spi message"); for (ret = 0; ret < ARRAY_SIZE(tx); ret++) { //if (!(ret % 6)) // puts(" "); //printf("%.2X ", rx[ret]); if (!(ret % 20)){ puts("\n"); } printf("%c", rx[ret]); } //puts(""); puts("\n"); } static void print_usage(const char *prog) { printf("Usage: %s [-DsbdlHOLC3]\n", prog); puts(" -D --device device to use (default /dev/spidev1.1)\n" " -s --speed max speed (Hz)\n" " -d --delay delay (usec)\n" " -b --bpw bits per word \n" " -l --loop loopback\n" " -H --cpha clock phase\n" " -O --cpol clock polarity\n" " -L --lsb least significant bit first\n" " -C --cs-high chip select active high\n" " -3 --3wire SI/SO signals shared\n"); exit(1); } static void parse_opts(int argc, char *argv[]) { while (1) { static const struct option lopts[] = { { "device", 1, 0, 'D' }, { "speed", 1, 0, 's' }, { "delay", 1, 0, 'd' }, { "bpw", 1, 0, 'b' }, { "loop", 0, 0, 'l' }, { "cpha", 0, 0, 'H' }, { "cpol", 0, 0, 'O' }, { "lsb", 0, 0, 'L' }, { "cs-high", 0, 0, 'C' }, { "3wire", 0, 0, '3' }, { "no-cs", 0, 0, 'N' }, { "ready", 0, 0, 'R' }, { NULL, 0, 0, 0 }, }; int c; c = getopt_long(argc, argv, "D:s:d:b:lHOLC3NR", lopts, NULL); if (c == -1) break; switch (c) { case 'D': device = optarg; break; case 's': speed = atoi(optarg); break; case 'd': delay = atoi(optarg); break; case 'b': bits = atoi(optarg); break; case 'l': mode |= SPI_LOOP; break; case 'H': mode |= SPI_CPHA; break; case 'O': mode |= SPI_CPOL; break; case 'L': mode |= SPI_LSB_FIRST; break; case 'C': mode |= SPI_CS_HIGH; break; case '3': mode |= SPI_3WIRE; break; case 'N': mode |= SPI_NO_CS; break; case 'R': mode |= SPI_READY; break; default: print_usage(argv[0]); break; } } } int main(int argc, char *argv[]) { int ret = 0; int fd; parse_opts(argc, argv); fd = open(device, O_RDWR); if (fd < 0) pabort("can't open device"); /* * spi mode */ ret = ioctl(fd, SPI_IOC_WR_MODE, &mode;); if (ret == -1) pabort("can't set spi mode"); ret = ioctl(fd, SPI_IOC_RD_MODE, &mode;); if (ret == -1) pabort("can't get spi mode"); /* * bits per word */ ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits;); if (ret == -1) pabort("can't set bits per word"); ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits;); if (ret == -1) pabort("can't get bits per word"); /* * max speed hz */ ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed;); if (ret == -1) pabort("can't set max speed hz"); ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed;); if (ret == -1) pabort("can't get max speed hz"); printf("spi mode: %d\n", mode); printf("bits per word: %d\n", bits); printf("max speed: %d Hz (%d KHz)\n", speed, speed/1000); transfer(fd); close(fd); return ret; } 4、修改配置文件: Q:\r40_tinav2.1\spi20_r40_tinav2.1\target\allwinner\azalea-m2ultra\configs\sys_config.fex [jtag_para] jtag_enable = 1 jtag_ms = port:PB14<3><default><default><default> jtag_ck = port:PB15<3><default><default><default> jtag_do = port:PB16<3><default><default><default> jtag_di = port:PB17<3><default><default><default> 修改为: [jtag_para] jtag_enable = 0 ;jtag_ms = port:PB14<3><default><default><default> ;jtag_ck = port:PB15<3><default><default><default> ;jtag_do = port:PB16<3><default><default><default> ;jtag_di = port:PB17<3><default><default><default> ;---------------------------------------------------------------------------------- ;SPI controller configuration ;---------------------------------------------------------------------------------- [spi0] spi0_used = 0 spi0_cs_number = 2 spi0_cs_bitmap = 3 spi0_cs0 = port:PC23<3><1><default><default> spi0_cs1 = port:PI14<2><1><default><default> spi0_sclk = port:PC2<3><default><default><default> spi0_mosi = port:PC0<3><default><default><default> spi0_miso = port:PC1<3><default><default><default> [spi1] spi1_used = 0 spi1_cs_number = 2 spi1_cs_bitmap = 3 spi1_cs0 = port:PA0<3><1><default><default> spi1_cs1 = port:PA4<3><1><default><default> spi1_sclk = port:PA1<3><default><default><default> spi1_mosi = port:PA2<3><default><default><default> spi1_miso = port:PA3<3><default><default><default> [spi2] spi2_used = 0 spi2_cs_number = 2 spi2_cs_bitmap = 3 spi2_cs0 = port:PB14<2><1><default><default> spi2_cs1 = port:PB13<2><1><default><default> spi2_sclk = port:PB15<2><default><default><default> spi2_mosi = port:PB16<2><default><default><default> spi2_miso = port:PB17<2><default><default><default> [spi3] spi3_used = 0 spi3_cs_number = 2 spi3_cs_bitmap = 3 spi3_cs0 = port:PA5<3><1><default><default> spi3_cs1 = port:PA9<3><1><default><default> spi3_sclk = port:PA6<3><default><default><default> spi3_mosi = port:PA7<3><default><default><default> spi3_miso = port:PA8<3><default><default><default> ;---------------------------------------------------------------------------------- ;SPI device configuration ;compatible --- device name ;spi-max-frequency --- work frequency ;reg --- chip select ;optional properties: spi-cpha, spi-cpol, spi-cs-high ;---------------------------------------------------------------------------------- ;[spi0/spi_board0] ;compatible = ;spi-max-frequency = ;reg = ;spi-cpha ;spi-cpol ;spi-cs-high 修改为: ;---------------------------------------------------------------------------------- ;SPI controller configuration ;---------------------------------------------------------------------------------- ;spi0有接SPI器件(和PC引脚和NAND冲突),但是空贴! [spi0] spi0_used = 0 spi0_cs_number = 2 spi0_cs_bitmap = 3 spi0_cs0 = port:PC23<3><1><default><default> spi0_cs1 = port:PI14<2><1><default><default> spi0_sclk = port:PC2<3><default><default><default> spi0_mosi = port:PC0<3><default><default><default> spi0_miso = port:PC1<3><default><default><default> ;和gmac0复用冲突了! [spi1] spi1_used = 0 spi1_cs_number = 2 spi1_cs_bitmap = 3 spi1_cs0 = port:PA0<3><1><default><default> spi1_cs1 = port:PA4<3><1><default><default> spi1_sclk = port:PA1<3><default><default><default> spi1_mosi = port:PA2<3><default><default><default> spi1_miso = port:PA3<3><default><default><default> ;大排针J9引出来了! [spi2] spi2_used = 1 spi2_cs_number = 2 spi2_cs_bitmap = 3 spi2_cs0 = port:PB14<2><1><default><default> spi2_cs1 = port:PB13<2><1><default><default> spi2_sclk = port:PB15<2><default><default><default> spi2_mosi = port:PB16<2><default><default><default> spi2_miso = port:PB17<2><default><default><default> ;和gmac0复用冲突了! [spi3] spi3_used = 0 spi3_cs_number = 2 spi3_cs_bitmap = 3 spi3_cs0 = port:PA5<3><1><default><default> spi3_cs1 = port:PA9<3><1><default><default> spi3_sclk = port:PA6<3><default><default><default> spi3_mosi = port:PA7<3><default><default><default> spi3_miso = port:PA8<3><default><default><default> ;---------------------------------------------------------------------------------- ;SPI device configuration ;compatible --- device name ;spi-max-frequency --- work frequency ;reg --- chip select ;optional properties: spi-cpha, spi-cpol, spi-cs-high ;---------------------------------------------------------------------------------- ;[spi0/spi_board0] ;compatible = ;spi-max-frequency = ;reg = ;spi-cpha ;spi-cpol ;spi-cs-high [spi2/spi_board2] compatible = "spidev" spi-max-frequency = 50000000 reg = 0 ;spi-cpha = 0 ;spi-cpol = 0 ;spi-cs-high = 0 5、刷机之后: root@TinaLinux:/# root@TinaLinux:/# find . -name spi* ./bin/spidev20_test ./dev/spidev2.0 ./proc/irq/44/spi2 ./rom/bin/spidev20_test ./rom/usr/lib/opkg/info/spidev20_test.control ./rom/usr/lib/opkg/info/spidev20_test.list ./sys/bus/spi ./sys/bus/spi/devices/spi2.0 ./sys/bus/spi/drivers/spidev ./sys/bus/spi/drivers/spidev/spi2.0 ./sys/bus/platform/devices/spi2 ./sys/bus/platform/drivers/spi ./sys/bus/platform/drivers/spi/spi2 ./sys/devices/soc/spi2 ./sys/devices/soc/spi2/spi_master ./sys/devices/soc/spi2/spi_master/spi2 ./sys/devices/soc/spi2/spi_master/spi2/spi2.0 ./sys/devices/soc/spi2/spi_master/spi2/spi2.0/spidev ./sys/devices/soc/spi2/spi_master/spi2/spi2.0/spidev/spidev2.0 ./sys/class/spi_master ./sys/class/spi_master/spi2 ./sys/class/spidev ./sys/class/spidev/spidev2.0 ./sys/kernel/debug/clk/hosc/pll_periph0/spi2 ./sys/kernel/debug/clk/hosc/spi0 ./sys/kernel/debug/clk/hosc/spi1 ./sys/kernel/debug/clk/hosc/spi3 ./sys/module/spidev ./usr/lib/opkg/info/spidev20_test.control ./usr/lib/opkg/info/spidev20_test.list root@TinaLinux:/# root@TinaLinux:/#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值