您尚未登录。

#1 Re: ESP32/ESP8266 » esp32p4我们来了~ (慢慢附上网上目前收集到资料) » 2024-12-29 23:22:41

Onism 说:

这个芯片牛的地方在于带H.264 encoder

直接转头去看BK7528,也有H264 编码,480MHz,内置16MB PSRAM和16MB Flash

#2 Re: 全志 SOC » 初学者小白的第一点疑问 » 2024-12-16 15:53:13

@Gaga
华芯微特M33架构的SWM34S,150MHz,内嵌8M SDRAM,带LCD控制器,价格十几块,如果对CPU性能要求不高,也可以选择选择。

#4 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » AWTK-WEB更新 » 2024-11-11 09:19:36

lixianjing 说:

* 优化编译脚本,加快编译速度。
* 优化代码生成,大幅减小wasm文件体积。
* 增加模拟器外壳。

https://whycan.com/files/members/1617/ui_20241110-1940.png

AWTK支持越来越丰富了。

#5 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » FreeRTOS运行Lvgl,应该如何设计框架的? » 2024-10-15 16:55:24

借助freeRTOS的队列,任务之间通讯。
app任务根据情况,需要显示的时候,发送队列信息,
lvgl做一个软件定时器,定时接收队列信息,改变显示。

#6 Re: 华芯微特 » 【华芯微特32位MCU相关资料】官网,资料以及购买渠道,联系方式 » 2024-10-10 09:02:23

vasill 说:

跟STM32比有什么优势吗?

这个厂家有一些内嵌SDRAM+LCD驱动器的单片机,价格比较实惠,资料也还OK。
比如SWM32S、SWM34S。
比STM32那些外挂SDRAM,成本要低很多。

#7 Re: 全志 SOC » f1c100s在clion使用jlink或stlink单步调试 » 2024-09-11 21:16:29

cris8259 说:

付费购买,欢迎大佬共享

淘宝有V3s,IAR的代码,可以Jlink调试。

V3s IAR代码资料-淘宝购买链接

#8 Re: 全志 SOC » 请教个问题,全志V3S的启动问题 » 2024-08-14 16:24:30

@wonrowl
我只知道,3.0V不焊接,识别不到USB。

别的情况,没出现过哈哈哈。

#9 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 有没有人做的nas方案可以借鉴一下 » 2024-07-24 13:44:03

自己用的话,搞个HTPC就可以。
再来一个kod explorer,网页文件管理。

#13 Re: 工业芯 匠芯创 » 开始进入平头哥的双千兆网时代 » 2024-06-15 09:36:10

Gentlepig 说:

问下,为什么用了3.3V供电的can驱动芯片?直接用5V的,就可以省掉24VB了吧?

24V应该是板子的取电电源。
把CAN的信号和电源做在同一个座子了。

#14 Re: 全志 SOC » F1C100内置语音识别算法的测试 » 2024-06-04 23:46:52

@achinwoo
我才发现,你这唤醒词,好骚啊。哈哈哈哈

#15 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 最近想做一款显示面板,求方案 » 2024-06-02 23:44:06

SWM32S或者SWM34S ,内嵌8MB SDRAM,带LCD控制器。12~18块。外设也丰富。
2楼已经给出最佳答案了。
另外,晕哥的f1c100s也不错。

#18 Re: 全志 SOC » 求教, 如何从 V3S 里面节省引脚 » 2024-05-01 19:58:31

@heidaren
我之前测试了一下,V3s裸机FATFS
4bit读写tf卡大概7MB/s
1bit读3.8 MB/s,写4.1MB/s

#20 Re: 全志 SOC » 分享一个自己做的T113-S3裸机IAR工程,有bootloader和led闪烁demo » 2024-02-27 13:39:42

串口3的时钟应该是开了,工程里面根据id作为偏移量开启时钟的。

void sunxi_usart_init(sunxi_usart_t *usart)
{
  uint32_t addr;
  uint32_t val;

  /* Config usart TXD and RXD pins */
  sunxi_gpio_init(usart->gpio_tx.pin, usart->gpio_tx.mux);
  sunxi_gpio_init(usart->gpio_rx.pin, usart->gpio_rx.mux);

  /* Open the clock gate for usart */
  addr = T113_CCU_BASE + CCU_USART_BGR_REG;
  val	 = read32(addr);
  val |= 1 << usart->id;
  write32(addr, val);

  /* Deassert USART reset */
  addr = T113_CCU_BASE + CCU_USART_BGR_REG;
  val	 = read32(addr);
  val |= 1 << (16 + usart->id);
  write32(addr, val);

  /* Config USART to 115200-8-1-0 */
  addr = usart->base;
  write32(addr + 0x04, 0x0);
  write32(addr + 0x08, 0xf7);
  write32(addr + 0x10, 0x0);
  val = read32(addr + 0x0c);
  val |= (1 << 7);
  write32(addr + 0x0c, val);
  write32(addr + 0x00, 0xd & 0xff);
  write32(addr + 0x04, (0xd >> 8) & 0xff);
  val = read32(addr + 0x0c);
  val &= ~(1 << 7);
  write32(addr + 0x0c, val);
  val = read32(addr + 0x0c);
  val &= ~0x1f;
  val |= (0x3 << 0) | (0 << 2) | (0x0 << 3);
  write32(addr + 0x0c, val);
}

时钟相关代码应该是这几行。
/* Open the clock gate for usart */
  addr = T113_CCU_BASE + CCU_USART_BGR_REG;
  val     = read32(addr);
  val |= 1 << usart->id;
  write32(addr, val);

  /* Deassert USART reset */
  addr = T113_CCU_BASE + CCU_USART_BGR_REG;
  val     = read32(addr);
  val |= 1 << (16 + usart->id);
  write32(addr, val);

#21 Re: 全志 SOC » 分享一个自己做的T113-S3裸机IAR工程,有bootloader和led闪烁demo » 2024-02-27 11:42:52

我是买的开发板,板载SPI Nand,已经修改为SPI nor。
T113-M2_board.png
板子用的是uart3,所以修改了一下代码。
T113-M2_UART.png
T113-M2_UART_code.png
编译,处理头部,烧录
T113-M2_UART_download.png

结果,灯亮了,但是串口没信息。

#22 Re: 全志 SOC » 之前rt-thread有支持t113的,现在不支持了,各位知道原因吗? » 2024-02-17 22:19:33

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/allwinner_t113
  remotes/origin/aozima_dev
  remotes/origin/aozima_test
  remotes/origin/aozima_test1
  remotes/origin/gitee_fix
  remotes/origin/gitee_master
  remotes/origin/gitee_master_dev
  remotes/origin/github_EDI-Systems_pr1339
  remotes/origin/lts-v3.1.x
  remotes/origin/master
  remotes/origin/stable-v1.2.x
  remotes/origin/stable-v2.0.x
  remotes/origin/stable-v2.1.x
  remotes/origin/stable-v3.0.x
$ git checkout -b allwinner_t113 origin/allwinner_t113
Updating files: 100% (26292/26292), done.
Switched to a new branch 'allwinner_t113'
branch 'allwinner_t113' set up to track 'origin/allwinner_t113'.

#23 Re: 全志 SOC » 模仿stm32标准库风格写的库文件(f1c100s/f1c200s),且已移植了rt-thread、lvgl、fatfs、cherryusb » 2024-02-04 19:01:26

楼主牛,请问这个环境怎么debug呢?能不能指示一下怎么GDB调试呀。
是不是需要一些初始化DDR脚本什么的。

#24 Re: 全志 SOC » 请问F1C100S串口中有两个寄存器偏移地址都是一样的,芯片是怎么识别的? » 2024-01-25 18:54:48

这个地址是分时使用的。
配置DLAB前,和配置之后,访问的寄存器不一样。

#25 Re: 全志 SOC » 之前rt-thread有支持t113的,现在不支持了,各位知道原因吗? » 2024-01-23 18:26:28

dsp2000 说:

之前rt-thread有支持t113的,现在不支持了,各位知道原因吗?
在gitee能找到 rt-thread-allwinner_t113 这个项目的

这里,
https://gitee.com/aozima/rt-thread/tree/allwinner_t113/

#27 Re: RK3288/RK3399/RK1108 » 为什么瑞芯微公开资料这么少呢 » 2024-01-10 09:03:54

as86455011 说:

你看看隔壁全志,那个才叫资料少。搞个ddr都要遮遮掩掩

以前不是说过了吗?全志芯片几乎是方案芯片,
技术服务(方案资料)是一些上游代理商负责的,
你拿足够的芯片,啥资料都有了,
据说这样是为了保护代理商。
但是现在全志也在做开源资料了,像D1s什么的。
小白用户,说实话,没有教程,估计给资料了,也很难玩的动(没错,说的就是我自己)。

#28 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 40pin rgb屏和50pin rgb接口有什么区别呢?比如都是7寸800x480。增加问题,背光led电流控制在多少合适? » 2024-01-05 16:56:01

Gentlepig 说:

以前一直以为信号线都一样呢。
今天才知道不一样。50pin有vcom, vgh, vgl信号。
40pin一般有rtp信号,50pin的好像没见到。

有人能科普下这两种接口屏的区别吗?各有什么优劣?

可能是屏幕大了,所以驱动要求不一样,50P主要是多了负压、高压这些。

#30 Re: 全志 SOC » F1C100S GT911 问题 » 2023-12-19 23:33:02

whycan其他大神回应,买一个汇顶调试工具,校准一遍,得到配置数据,完美解决。

#31 Re: 全志 SOC » f1c100s入门+1 » 2023-12-16 11:02:38

wakulgz 说:

稍微定一下  有没有合适的ui软件推荐啊

AWTK YYDS

#32 Re: 全志 SOC » LVGL 只有物理按键 » 2023-12-15 20:00:09

按键产生事件,GUI负责帮你分发事件,你逻辑代码,让事件和控件联系起来就行了。

#33 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2023-10-15 19:22:13

bonito 说:

支持开源,而且是allegro格式!

我用的是荔枝派板子,你直接参考这个资料即可。

#34 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2023-10-15 19:21:38

wenjiu 说:

楼主,启动速度要多久?

这个帖子很久了,现在很难跟进了,好像是二十多秒启动完?

#35 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2023-10-09 09:41:58

zzy 说:

楼主能出一个配置adb的教程吗,配置了usb后不知道咋操作了,传不了文件

参考这一篇,可以用串口直接传文件
https://whycan.com/t_4266.html

#36 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2023-07-23 01:53:18

123546 说:

请教一下大佬,这个最后一步烧入bin文件到单板上怎么烧入的,有没有详细步骤。

教程在晕哥这个链接
编译、安装Windows版本sunxi-fel步骤 (32M spi flash补丁,支持W25Q256/MX25L256)
https://whycan.com/t_444.html#p1130

#37 Re: 全志 SOC » 尝试从一开发F1C100s应用 » 2023-07-09 11:40:10

jiabuda 说:

借楼问问,其实除了rz这种,是否有一些更高效的方式来进行开发呢?我现在编译lvgl,每次出来的执行文件都有300多k,传输一次一分钟,有点太慢

用usb adb,论坛里有。

#39 Re: 全志 SOC » 网上看到的F1C200s最新资料,包括Datasheet(V1.1)和User Manual(V1.2) » 2023-03-21 20:48:49

27527 说:

F1C100S是参考F1C200S的User Manual还是F1C600的User Manual

参考F1C200s的手册。

#41 Re: 全志 SOC » 新手自制f1c200s开发板 » 2023-02-17 21:43:24

不知道有没有兴趣上AP6212呢?
我看RTT是有这个驱动的,感觉可以参考RTT那个APT-Pi的SDK,来开发。

#42 Re: 全志 SOC » f1c100s 支持MCU接口的LCD 原理图 » 2023-02-16 20:47:43

f1c100s/200s 接MCU屏,引脚对应关系。
GPIOD[8:1]         ==> DAT [7:0]
GPIOD[17:10]     ==>DAT[15:8]
GPIOD[18]          ==>LCD_WR
GPIOD[19]          ==>LCD_RS
GPIOD[20]          ==>LCD_RD
GPIOD[21]          ==>LCD_CS

#43 Re: 全志 SOC » [F1C100S / F1C200S] Bare metal / RTOS hardware H264 effort » 2023-02-16 12:38:33

hoel 说:
Ozelot 说:
hoel 说:

我在裸机中使用了 DEFE,所以,是的,我认为它可以在主线中完成。3265649676

Can you share an example of working with DEFE?

Sorry i missed the message, sure contact me on the QQ email and i'll share.

I want it too. Could you send me a copy。
1032055624@qq.com
Thank you!

#44 Re: 全志 SOC » 在项目上选用F1C100s是否合适? » 2023-02-15 12:47:06

zenghc 说:

业余时间玩过lichee_zero和lichee_nano,在小企业里打算在一个简单RGB屏显的项目上选用F1C100s。评估过F1C100s资源是够用的,价格也便宜。不过F1C100s是arm9平台,已经比较古老了,现在采用这个是否合适,这个芯片是否会停产?

看应用需求,没有需求不能谈选型。

#45 Re: 上海航芯 » ACM32没有8080或6800这类并行接口 » 2023-02-09 20:09:08

海石生风 说:

想用ACM32驱动并口的12864 LCD时才发现,ACM32没有STM32那样的FSMC或新唐MCU那样的外部总线接口。
只能用IO模拟的方式来驱动,不太方便。不少国产MCU都这类并行接口。
建议添加并行接口来完善下。

12864支持SPI驱动,而且只需要用2根线/3根线就可以了。
建议使用SPI驱动,DMA+SPI,直接刷。

#46 Re: 全志 SOC » f1c100s入门+1 » 2023-02-08 17:28:17

@wakulgz
你这个结构比较简单,其实你可以直接挂SPI上面,用HC595+HC165进行输入输出扩展。
我经常这样用,接十来片HC595,没啥问题。
(理论上,无限扩展)。

#47 Re: 全志 SOC » 发现淘宝有卖F1C100S源码的 » 2023-02-08 17:25:33

wj8331585 说:

宝贝还在,却实太贵了

资料非常丰富,1500其实也就是几天的工资而已。
让你自己撸这些代码,不知道要搞多久,花钱买效率,物超所值。(个人观点,没有PY交易)

#48 Re: 全志 SOC » 问一下,F1C100S在KEIL上跑RTT操作系统系统。有大佬调通吗?哪里可以参考吗? » 2023-02-02 18:01:53

jack821119 说:

@LinjieGuo
我这边调试f1c100s+rtthread的时候,使用sunxi-fel将boot刷到flash的时候,boot程序多次没更新到spi flash中,后来晕哥说sunxi-fel不检测flash的存在。请问你这边用sunxi-fel刷新boot或者app又发现这种现象不?

没有出现你的情况,你可以参考这篇帖子,里面留了文件。

f1c200s运行rtt

#49 Re: 全志 SOC » 问一下,F1C100S在KEIL上跑RTT操作系统系统。有大佬调通吗?哪里可以参考吗? » 2023-02-01 21:58:08

Jkkk 说:

@LinjieGuo
厉害,我是个人学习。看了很多文档,现在还是一头雾水。
还有一个问题请教,在论坛或者GITEE下载的例程,为什么都是没有工程文件,只有很多.c.h,不知道是用什么开发的,如何打开?

直接在rtstudio上面开发即可,自动构建工程。
当然100s你要参考论坛的文章,解决启动加载问题。
我的一篇帖子有,您可以看看。手机回复就不引用了。

#50 Re: 全志 SOC » 问一下,F1C100S在KEIL上跑RTT操作系统系统。有大佬调通吗?哪里可以参考吗? » 2023-02-01 12:01:09

Jkkk 说:

看起来很齐全,不知道靠不靠谱。  贵是真贵

靠谱,V3s和100s我都买了,商用开发节省调试时间,效率顶呱呱。商用开发建议购买。
个人学习RTT,可以移步RTT文档中心,结合RTT文档以及Baidu搜索,也是不错的。我是在RT Studio上面开发,100s无法debug调试

#51 Re: 全志 SOC » F1C100S + FreeRTOS + USB Host » 2023-01-11 09:13:59

楼主你好,请问是文件上传遇到了什么困难吗?是否需要协助呢?

#52 Re: Cortex M0/M3/M4/M7 » 有没有带H.264编码的单片机? » 2023-01-04 10:46:40

wujique 说:

为什么我讲是单片机,其实就是针对现在大部分的都是linux+soc方案,他们需要的资源通常比较多。
那么mcu+rtos,就能节省资源,就能有成本优势。。。

BL808这个芯片太强大了,3核+无线,价格在sipeed上看好像是6刀。

因为,只要你不跑系统,他就是一个大号单片机啊。
100s有人跑linux,有人跑meils,有人跑裸机。。。

#53 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 杰里芯片官网开始拥抱社区了吗 » 2023-01-04 08:43:46

kekemuyu 说:

看到一份官网开发文档https://doc.zh-jieli.com/AC79/zh-cn/master/index.html,然后在淘宝和b站都有看到官方在普及芯片。芯片性价比真是无敌呀

2023/01/04,淘宝看到,样品售价,11元/片,还不错。
AC79.jpg

#54 Re: 上海航芯 » ACM32H5新产品需求及意见收集 » 2022-12-22 10:20:33

@saub
我也是这个观点,我自认没有焊接多引脚BGA的能力,选型时,会主动避开BGA封装。

#56 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » Shipping problems … continue » 2022-12-17 20:51:51

我买了个饭盒,收件地址,广东广州番禺8天没到,然后。。。
快递到了广州,提示:由于派件员忙,派送时间可能增加。
结果,物流居然直接退回去了。。。
I bought a lunch box. The delivery address was Panyu, Guangzhou, Guangdong. I hadn't been there for 8 days, and then...

When the express arrived in Guangzhou, it was suggested that the delivery time might increase due to the busy dispatchers.

As a result, the logistics actually returned directly...

#57 Re: 上海航芯 » ACM32H5新产品需求及意见收集 » 2022-12-16 23:23:10

我觉得主频低了一点,能不能干到400MHz以上呢?

#58 Re: 全志 SOC » F1C100S FreeRTOS工程,100%可用 » 2022-12-15 11:49:26

在whycan上传文件也是比较容易的,我截了个图,大哥可以看一看。
upload.png

#59 Re: 全志 SOC » F1C100S FreeRTOS工程,100%可用 » 2022-12-15 11:33:47

楼主可能是不知道怎么上传文件到whycan,
我刚好是CSDN会员,帮楼主把文件挪过来啦。(狗头保命)
另外,工程本身很小,git文件夹五十多MB,我删掉了。。。
whycan下载:F1C100S_FreeRTOS_no_git.zip
外站免费下载:F1C100S_FreeRTOS_no_git.rar(可能会失效)

#61 Re: 华芯微特 » 基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立--缥缈九哥 » 2022-12-07 08:40:43

吴助建 说:

这家公司是真的好,找遍整个官网,就是找不到keil 5的pack包.
奇了怪了.

链接:https://pan.baidu.com/s/1atLWlk1_SUR8WjISr-Bfpw
提取码:byv2
资料都放在这个网盘里面,官方构建的。

#62 Re: 好钜润半导体(TIKY) » 这么版块这么冷清? » 2022-12-05 21:49:06

据说是因为这个芯片好像不能仿真调试,很多人就放弃了

#63 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 有了解华芯微特公司的小伙伴吗 » 2022-12-01 17:19:05

bigbat 说:

最近看了一下华芯微特的SWM34S芯片,这颗芯片的性价比还不错,有了解华芯微特公司的小伙伴吗,这家公司经营情况怎么样,别费劲弄完了在来个停产那就不好玩了。

他们家芯片供货是稳定的,我目前在用SWM320,除了引脚不像STM32那样,IO口容忍3V3,其余的特性,简直的不要太爽。

#64 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 尝试使用C#开发一款串口调试工具 » 2022-11-29 21:49:58

海石生风 说:

虽然我没搞过C#,但很明显 textBox_debug应该要像textBox_recv那样AppendText时要区分HEX和ASCII

嗯嗯,你说的这一点也是对的。
不过问题不是出在这个地方,问题是:数据内容接收到了,但是出现读取到的长度却不一致的情况。
后来在@周正的指导下,解决这个问题。
(1)使用ReadExisting()这个方法从串口接收中取数据,适用于字符串,可能不太适合面向字节流的数据。
(2)所以,接收代码修改为:

//串口接收事件
        private void ReceiveData(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] datas = new byte[serialPort1.BytesToRead];
            int len = serialPort1.Read(datas, 0, datas.Length);

            //数据写入环形缓冲区
            recv_lp.write_data(datas, len);

            show_recv_data(datas, len);
            /*
                        string content = serialPort1.ReadExisting();        //从串口中读取输入流,返回string
                        ShowData(content);
            */
        }
        private void show_recv_data(byte[] data, int len)
        {
            //更新接收数据计数
            recv_cntr += (UInt32)len;
            lab_recv_cntr.Text = recv_cntr.ToString();

            if (rbtn_recv_hex.Checked)
            {//按HEX模式 展示接收到的内容 

                for (int i = 0; i < len; i++)
                {
                    textBox_recv.AppendText(string.Format("{0:X2} ", data[i]));
                }
            }
            else
            {//按ASCII模式 展示接收到的内容
                string str = System.Text.Encoding.Default.GetString(data);
                textBox_recv.AppendText(str);
            }

        }

#65 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 尝试使用C#开发一款串口调试工具 » 2022-11-28 13:44:51

3、测试
    工程跑起来后,插入CH340G,将TX RX短接,
(1)设置为ascii模式,收发一切正常。
(2)设置为HEX模式,发送0x01、0x02 、0x99等不带字母的十六进制数,正常。
但是发送0xA0,这样带字母的十六进制数,就会出现以下情况。
uart_002.png

(为了调试方便,我加入了日志打印区。在发生接收事件时,做2件事情,①在接收区显示收到的数据,②在日志区显示收到了多长的数据)

[1]第一次发送0xA0,触发了接收事件,①显示区没有任何显示;②数据长度是0
[2]第二次发送0xA0,触发了接收事件,①显示区显示了2个A0;②数据长度是1
结果是,数据长度对不上。。。请问有没有大神懂这是什么原因呢?
附上工程:uart_tool_base_v001_20221128.zip
外链免费下载:uart_tool_base_v001_20221128.zip

#66 Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 尝试使用C#开发一款串口调试工具 » 2022-11-28 13:35:58

LinjieGuo
回复: 4

嵌入式产品一般出场前要经过参数设定、参数校准、终端号设置等操作,单片机上面没有太多的设置接口,一般而言,只有一个串口可以使用,我尝试使用VS2019+WinForm,C#开发开发一款串口调试工具,用于配置产品的参数。
1、建立好工厂后,布局,给控件命名
uart_001.png
2、编写代码
2.1 实现端口号扫描

        private void ReflashPortToComboBox(SerialPort serialPort, ComboBox comboBox)
        {
            if (!serialPort.IsOpen)
            {//串口处于关闭状态
                comboBox.Items.Clear();
                string[] str = SerialPort.GetPortNames();
                if (str == null)
                {
                    MessageBox.Show("本机没有串口!", "Error");
                    return;
                }
                //添加串口
                foreach (string s in str)
                {
                    comboBox.Items.Add(s);
                    Console.WriteLine(s);
                }
            }
            else
            {
                MessageBox.Show("串口处于打开状态下,不能刷新串口列表", "Error");
            }
        }

2.2 打开串口按钮代码

        private void btn_open_com_Click(object sender, EventArgs e)
        {
            Int32 ibaudrate = Convert.ToInt32(cb_select_baudrate.SelectedItem.ToString());
            serialPort1.PortName = cb_select_com.SelectedItem.ToString();
            serialPort1.BaudRate = ibaudrate;
            serialPort1.Parity = (System.IO.Ports.Parity)Enum.Parse(typeof(System.IO.Ports.Parity), cb_select_check_bit.Text);
            serialPort1.StopBits = (System.IO.Ports.StopBits)Enum.Parse(typeof(System.IO.Ports.StopBits), cb_select_stop_bit.Text);
            serialPort1.DataBits = Convert.ToInt16(cb_select_data_bits.Text);

            //添加串口事件处理
            serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(ReceiveData);


            try
            {
                serialPort1.Open();
                btn_open_com.Enabled = false;
                btn_close_com.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("串口打开失败"+ex, "Error");
            }


        }

2.3 串口接收事件代码

//串口接收事件
        private void ReceiveData(object sender, SerialDataReceivedEventArgs e)
        {
            string content = serialPort1.ReadExisting();        //从串口中读取输入流,返回string
            
            ShowData(content);
        }
        private void ShowData(string text)
        {
            string receiveText = text;
            
            //更新接收数据计数
            recv_cntr += (UInt32)receiveText.Length;
            lab_recv_cntr.Text = recv_cntr.ToString();

            textBox_debug.AppendText("接收到了"+ receiveText.Length.ToString()+ "个数据: "+ text+"\r\n");

            if (rbtn_recv_hex.Checked)
            {//按HEX模式 展示接收到的内容 
                byte[] recData = System.Text.Encoding.Default.GetBytes(receiveText);// 将接受到的字符串据转化成数组;  

                foreach (byte str in recData)
                {
                    textBox_recv.AppendText(string.Format("{0:X2} ", str));
                }
            }
            else
            {//按ASCII模式 展示接收到的内容
                
                textBox_recv.AppendText(text);                   //将收到的字符串追加展示出来
            }

        }

2.4 发送按钮代码

        private void btn_send_Click(object sender, EventArgs e)
        {
            //串口打开的情况下,才能进行下一步操作
            if (!serialPort1.IsOpen) return;
            
            //发送内容不能为空 
            if ("" == textBox_send.Text) return;

            string sendData = textBox_send.Text;    //复制发送数据

            if (true == rbtn_send_ascii.Checked)
            {//字符模式
                try
                {
                    serialPort1.Write( sendData );
                    //更新发送数据计数
                    send_cntr += (UInt32)sendData.Length;
                    lab_send_cntr.Text = send_cntr.ToString();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "串口数据发送错误");
                    serialPort1.Close();
                    btn_open_com.Enabled = true;
                    btn_close_com.Enabled = false;
                }

            }
            else
            {//HEX模式 
                try
                {
                    sendData.Replace("0x", "");   //去掉0x
                    sendData.Replace("0X", "");   //去掉0X

                    string[] strArray = sendData.Split(new char[] { ',', ',', '\r', '\n', ' ', '\t' });
                    byte[] sendBuffer = new byte[strArray.Length];  //发送数据缓冲区
                    int decNum = 0,i = 0;
                    foreach (string str in strArray)
                    {
                        try
                        {
                            decNum = Convert.ToInt16(str, 16);
                            sendBuffer[i] = Convert.ToByte(decNum);
                            i++;
                        }
                        catch
                        {
                            //MessageBox.Show("字节越界,请逐个字节输入!", "Error");                          
                        }
                    }

                    serialPort1.Write(sendBuffer, 0, sendBuffer.Length);

                    //更新发送数据计数
                    send_cntr += (UInt32)sendBuffer.Length;
                    lab_send_cntr.Text = send_cntr.ToString();
                   
                }
                catch 
                {
                    MessageBox.Show("当前为16进制发送模式,请输入16进制数据");
                }
            }
   
        }

#67 Re: 全志 SOC » SWMS4S LCD RGB565驱动 » 2022-11-04 11:07:45

分类搞错了,要放到华芯微特区。

#69 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 【开源】串口/蓝牙/网络多合一调试助手,支持绘图,可在Android, Windows, Linux上运行 » 2022-11-03 09:00:57

wh201906 说:

你需要先下载qcustomplot.cpp,然后放到src文件夹下,这样就能编译了
项目的README里面有介绍如何编译,可以照着做

好的好的,非常感谢wh201906。
还有个问题想要请教一下,我使用您推荐使用的软件方案。
然后我把CH340的TX接到RX来测试软件发现了通讯bug,
(比方说我想发送A1,传过去就变成了01,发B1,传过去就变成了11),
请问您知道是什么原因导致的吗?

#71 Re: 司徒开源 » 开源精神值得敬佩,但是你司徒公开po 解FC3000的加密芯片就是可耻,做技术要有底线 » 2022-10-28 20:20:10

benlypan 说:

拿卖刀来举例子是偷换概念,客户买刀主要的用途是正经的,客户买你的方案主要的用途正经不正经,心理难道没数吗?

上一次看菜刀理论还是某播放器案。。。

#72 Re: 司徒开源 » 开源精神值得敬佩,但是你司徒公开po 解FC3000的加密芯片就是可耻,做技术要有底线 » 2022-10-26 10:56:55

这件事情其实可以找晕哥、或者私聊司徒沟通解决的,非要用撕的吗?
我的内心也是复杂的,不知道怎么说,之前还一直称呼  大佬 大佬 请教问题,现在。。。:
001.png
002_20221026-1054.png
003.png
004.png

#73 Re: 全志 SOC » 有偿求助(1000元)F1C100S使用USB摄像头 » 2022-10-15 17:19:25

yobbo 说:

和楼上说的一样,目前好像还没有人裸机实现USB-HOST,如果改用其他摄像头可以搜论坛帖子或者直接找Taobao上的大神定制,就是那位f1c100裸机开发keil项目卖1499的。

1499也没有实现裸机USB HOST,可以考虑TVBS+DVP,可以挂接2个。

#74 Re: 全志 SOC » f1c00s下载裸机程序后上电直接进入fel模式 » 2022-09-28 21:32:51

hhy 说:

f1c00s下载裸机程序后上电直接进入fel模式,也试过论坛大佬下载msvcr120d.dll放到Tools里面,上电后还是直接进入fel。 neutral

检查一下Flash是不是虚焊了,或者是不是坏了,这个工具只要是识别了fel USB设备,是可以对空烧写的。

#75 Re: 全志 SOC » F1C100s的CSI摄像头接口好裸奔么? » 2022-09-14 16:04:44

mind 说:

裸奔 DVP CSI的,有没有调通的,linux主线的启动时间剪裁后还是太长,客户不接受

商用推荐可以看看这个小淘气科技掌机

#76 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2022-09-14 15:57:37

47272078 说:

请教大神一个问题,开发环境是不是可以用树莓派的ubuntu下进行编译?

按理说是可以的,但是你要找到合适的编译工具链。。。

#77 Re: 全志 SOC » F1C200s+lvgl+freetype字体显示 » 2022-09-14 15:55:39

达子666 说:
哇酷小二 说:

buildroot 的 make menuconfig 直接勾选 freetype 呢?

这个没有,也不懂再哪里勾,buildroot有这个选项嘛

搜索一下啊,menuconfig界面可以搜索,我记得好像是按/ 搜索

#78 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2022-09-08 13:28:03

zhishang 说:

就是编译uboot的时候一直报make: *** No targets specified and no makefile found.  Stop.

我比较长时间没有关注了,你可以尝试使用我搭建好的环境,里面包含了本贴的所以内容。
配置好的VM虚拟机Ubuntu系统 链接:https://pan.baidu.com/s/17vk0_QWRNRuxwi5EZ_P-Xg 提取码:54pb

#79 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 有偿找人教我v3s 和 f1c200s 的液晶屏 及 VGA输出。 » 2022-09-05 08:39:00

lottefang 说:

情况是这样的,我在研究上述两款芯片的液晶屏和VGA输出(GM7123C)。希望有玩过这块的同好能教会我。我有偿支付学费。QQ 447652622 请加我联系。

推荐一下,淘宝上买有商用开发资料,
V3s和f1c的都有,(2款都买,建议问问有没有优惠)
综合起来你的个人精力,其实不算贵。

小淘气科技店铺

#82 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】 » 2022-07-20 08:26:23

迪卡 说:

https://whycan.com/files/members/1228/bf17a44ca6a9711dd2e93423cb844b6.png
这个电路是我比较倾向的。
在上电时,MUX都会打到终端电阻位置,
这样只有离CPU单元最近的模块能被访问到,就可以依次进行地址赋值。

我感觉原理是没有问题了,但往往这种自定义的设计,会因为开发时间久,测试不方便,成本不够低,不好落地。

#83 Re: 全志 SOC » V3s这么强显示能力, 不搞个示波器可惜了,接什么ADC好呢? » 2022-07-17 17:30:29

echo 说:

GD32F450用GPIO+DMA可以实现125Mx16的读取速度,也就是250MBytes/s的速度,达到PCIe 1.0的水平。接MXT2088刚刚好。
目前也有F1C100s+FPGA+MTX2088方案的示波器,不知道它用的什么高速接口。

用的是摄像头CSI接口

#84 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】 » 2022-07-13 18:14:03

@迪卡
嗯嗯,我上面是这样接的
(1)
单片机提供:
MOSI
MISO
SCLK
Ctrl
(2)板子165接法
MISO
SCLK
Ctrl
(3)板子595接法
MOSI
SCLK
Ctrl


1M和2M偶尔会出错,速度上到4MHz就基本上不行了

最终定在200K左右,还算比较稳定(我595是点灯的,偶尔还是会乱闪,一瞬间的事情,被下一帧刷掉就好了)

#85 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 众人拾柴-魔改SPI为一主多从高速总线【迪卡总线】 » 2022-07-13 09:13:53

@阿黄
我之前使用485芯片来延长SPI总线,挂接HC595/HC165,线越长,相位偏移,走形便越厉害。
如果器件传输延迟低,SPI CLK不要太高,感觉没问题。

#87 Re: 上海航芯 » 收到晕哥发来的ACM32F403RET7,感谢晕哥! » 2022-06-22 11:12:52

九重天 说:

请问楼主,航芯的DAP驱动在哪里下载呢?

我原本就装好了DAP-Link的驱动,使用的是WCH-Link(实际上也是DAP-Link)。
按理说,win10应该是免驱的。
说实话,我也不知道我怎么装上的,要不你参考一下这个链接?
参考以下连接:
(1)从MounRiver Studio中提取的WchLink驱动

#88 Re: 上海航芯 » 收到晕哥发来的ACM32F403RET7,感谢晕哥! » 2022-06-22 09:22:19

2、安装型号支持包,然后找到一个UART例程,打开!
(1)安装支持包,直接打开文件,下一步...即可
(2)找一个GPIO工程,因为我们看到更新时间,
Core_ModulesDemo_Rev2.0.1| rar | 2022-03-10
这个较新,从里面找GPIO相关工程。
ACM32-GPIO.png
(3)配置DAP-Link,编译工程,烧写
ACM-Pro-setting.png
ACM-Pro-setting2.png
ACM-Pro-setting3.png
ACM-Pro-setting4.png
ACM-Pro-setting5.png
ACM-Pro-setting6.png
ACM-Pro-setting7.png

#89 Re: 上海航芯 » 收到晕哥发来的ACM32F403RET7,感谢晕哥! » 2022-06-22 09:04:22

我的电脑环境情况:
(1)MDK529+coretex-M
(2)有WCH-Link驱动(也是一款DAP-Link)
1、获取开发相关资源
(1)型号支持包:   
型号支持包
(2)外设基本例程:
Core_ModulesDemo_Rev2.0.1
Nucleo_ModulesDemo_Rev1.0.8
(3)开发板PDF原理图
ACM32F403RET7_CORE_V1.2
如果链接失效,直接访问官网下载即可:
ACM官方网站

#90 上海航芯 » 收到晕哥发来的ACM32F403RET7,感谢晕哥! » 2022-06-22 08:51:29

LinjieGuo
回复: 9

本来想使用ACM32F030xxxx/ACM32F070xxxx,然而晕哥手上只有ACM32F403RET7开发板,这款开发板所使用的主控芯片是ACM32F403RET7,资源非常丰富!不过此处就不细说了,详细内容参考帖子:
上海航芯 ACM32F403RET7 开发板, 促销价 18.8元
开发板贴图ACM1.jpg
从图上可以看到,资源不多,但是作为一个最小系统板,板载了DAP-Link,已经是非常友好。

#91 Re: 上海航芯 » 上海航芯技术文章合集,开源送三片芯片(包邮) » 2022-06-21 09:37:52

就这样吧 说:

资料全不

资料非常丰富,直接在官网就可以下载

#92 Re: 华芯微特 » 基于MDK-ARM的华芯微特SWM180+RTOS的JLINK开发环境建立--缥缈九哥 » 2022-06-18 09:36:26

nufing 说:

不知道能不能像 STM32、GD32 那样,通过串口进行烧录程序 ?

可以的,有个专用的ISP 串口/Jlink烧写工具。

#94 Re: 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 14:48:18

@三哥
三哥才是真正的大佬,闲暇下来一定玩它,玩它,玩它,谢谢三哥分享。 big_smile

#95 Re: 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 13:39:25

支持勇于创新的思维,贴主的设想不错。
但是我下载文件之后,发现:
arm9os只有一个bin文件,
无法得知里面是什么样的情况。
有以下几个疑问,请问:
(1)app加载之后,都拥有自己的独立内存空间吗?
(2)app访问资源,如何解决资源互斥问题呢?

#97 Re: 全志 SOC » T507 能否设置PWM开启每次只输出一个方波 » 2022-04-12 08:30:33

加一片4051芯片用于SPI片选就可以了。
比方说我这个串口发送,因为我有2个串口音频芯片,并且用不上串口接收功能。
CD4051.png
通过UART3_RX引脚进行片选,可以控UART3_TX接通AUART_TX0或者AUART_TX1。
同理,你也可以让SPI MOSI进行多路选一避免干扰,加一个引脚进行片选就好了。

#98 Re: 全志 SOC » [XR806]XR806 FreeRTOS_BSP编译 » 2022-04-10 23:14:51

换了个软件,打印显示看起来正常了
123.png

#99 Re: 全志 SOC » [XR806]XR806 FreeRTOS_BSP编译 » 2022-04-10 22:30:27

6、烧写程序到开发板
参考链接:跳转到全志在线帖子
(1)生成烧写镜像
上述make只是生成了bin文件,我们需要进一步生成烧写镜像,才可以顺利下载。
make image

Flash Layout:
sec bin 0 boot_40M.bin      :   flash_offs: 0x00000000(   0K)   data_size: 0x00002F28(  12K)
sec bin 1 app.bin           :   flash_offs: 0x00004000(  16K)   data_size: 0x00004920(  19K)
sec bin 2 app_xip.bin       :   flash_offs: 0x00029800( 166K)   data_size: 0x000058E0(  23K)

generate image: xr_system.img
cp -t ../../../../out/ ../image/"xr806"/*.bin ../image/"xr806"/xr_system.img *.map
book@book-desktop:~/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc$ 

(2)获取工具
工具存放在bsp包./tools目录里,程序文件为phoenixMC.exe。
(3)烧写镜像
如下图所示
2022-04-10%20222554.png
(4)查看打印
如下图所示
2022-04-10%20222506.png

看起来,helloworld字样已经出来了,说明编译环境基本上已经搭建好了。

#100 全志 SOC » [XR806]XR806 FreeRTOS_BSP编译 » 2022-04-10 18:31:23

LinjieGuo
回复: 3

1、构建工作文件夹
(1)cd ~
(2)mkdir work
(3)cd work
(4)mkdir xr806
(5)cd xr806
2、获取资源
(1)wget http://www.armsoc.cn/whycan/xr806/xr806_sdk_v1.2.1.tgz
(2)wget http://www.armsoc.cn/whycan/xr806/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2

如果获取失败,直接whycan下载(可能需要积分)
-->freeRTOS bsp
    xr806_sdk_v1.2.1.tgz
-->gcc工具链   
    gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
3、编译一个例程
(1)解压bsp
tar -xzvf xr806_sdk_v1.2.1.tgz
(2)选择一个例程进行编译
cd ~/work/xr806/xr806_sdk_v1.2.1/project/demo
ls
可以看到现在有一下几个例程

book@book-desktop:~/work/xr806/xr806_sdk_v1.2.1/project/demo$ ll
总用量 32
drwxrwxr-x  8 book book 4096 4月   2 16:50 ./
drwxrwxr-x 10 book book 4096 4月   2 16:50 ../
drwxrwxr-x  3 book book 4096 4月   2 17:26 at_demo/
drwxrwxr-x  4 book book 4096 4月   2 17:23 audio_demo/
drwxrwxr-x  8 book book 4096 4月   2 16:50 bluetooth/
drwxrwxr-x  3 book book 4096 4月   2 17:22 hello_demo/
drwxrwxr-x  4 book book 4096 4月   2 16:50 wlan_ble_demo/
drwxrwxr-x  3 book book 4096 4月   2 16:50 wlan_demo/

(3)选择hello_demo
    cd hello_demo
(4)进入gcc目录,进行编译
cd gcc
make
    结果,编译出错了,原因是我们没有安装交叉编译工具链。

...
/bin/sh: 1: /home/book/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gcc: not found
../../../../project/project.mk:437: recipe for target 'hello_demo.elf' failed
make[1]: *** [hello_demo.elf] Error 127
make[1]: 离开目录“/home/book/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc”
../../../../project/project.mk:426: recipe for target '__all' failed
make: *** [__all] Error 2

4、安装交叉编译工具链
(1)解压工具链
cd ~/work/xr806/
tar -xvf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
(2)复制到项目例程指定的目录
根据上面的错误信息,我们可以知道交叉编译工具链,应该是存放在这个位置:
/home/book/tools/gcc-arm-none-eabi-8-2019-q3-update/

cd ~
mkdir tools
cd ~/work/xr806/
cp -r gcc-arm-none-eabi-8-2019-q3-update ~/tools/

5、回到例程目录,重新编译
cd ~/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc/
make
编译结果,看起来像是成功了

~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-objcopy -O binary -R .xip   hello_demo.elf hello_demo.bin
~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-objcopy -O binary -j .xip hello_demo.elf hello_demo_xip.bin
~/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-size hello_demo.elf
   text    data     bss     dec     hex filename
  39768    1576    2248   43592    aa48 hello_demo.elf
make[1]: 离开目录“/home/book/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc”
book@book-desktop:~/work/xr806/xr806_sdk_v1.2.1/project/demo/hello_demo/gcc$ 

我们得到了两个bin文件,一个elf文件
hello_demo.bin
hello_demo_xip.bin
hello_demo.elf

#101 Re: ST/STM8/STM8S/STM8L » 谁能拒绝在自己的项目中添加终端工具用于调试呢? » 2022-04-03 19:36:16

@llinjupt
哈哈,你这个功能我好像做过,但是不太完善,以前调试USB手柄的时候写的,你可以看看哈。
帖子跳转  ITX-190——一个性能不强却支持强大的开发板

#102 Re: 全志 SOC » F1C200S牺牲颜色数量,增加一个TWI1出来? » 2022-04-02 14:45:38

如果非要丢,丢低位,保高位。
如果重新设计,使用i80屏幕好像可以腾出一些引脚。

#103 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2022-03-15 09:05:03

就是小白了 说:

@LinjieGuo
这个文件是要烧写到哪个地址呢,是地址0吗,我把下面提供的虚拟机里的bin文件烧录到0地址结果出现和你第一次报错一样的错误,但是suniv.h已经是删过冒号的了。
https://whycan.com/files/members/6074/微信截图_20220310161208.png

兄弟你的Flash是什么型号呢?

#104 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2022-03-12 14:39:55

@gdzh26
限制次数可能是为了防止别人爬网站资源,
或者防止限制代下资源的情况。
另外,好像CSDN也限制每天下载次数。

并没有说whycan好,CSDN不好,
CSDN我没有文档输出,
所以,会员也开了好多年了,
我认为网站的规则如此,
不喜欢可以右上角,
强扭的瓜不甜!

csdn_vip.png
csdn_dw_20220312-1442.png
相关帖子:
限制下载次数或限制下载不知是何用意?

#105 Re: 全志 SOC » F1C100S和F1C200S公版 » 2022-03-12 13:11:13

1ohm 说:

你好朋友,我是新来的。

这么多很棒的板子。

我想自己画。 谁能给我一个购买 Allwinner F1C200s 和 F1C100s 的链接?

Hello friends, I am new here.

So many great boards.

I want to draw my own. Can anyone send me a link to buy Allwinner F1C200s and F1C100s?

直接购买晕哥的芯片就可以了。
F1C100s/F1C200s

#106 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-12 12:24:28

大哥,ws2812你看看这个color表行不行。

SPI CLK 20MHz

T1H = T0L = 16个SPI数据     = 0.8us
T0H = T1L =   8个SPI数据位  = 0.4us


color_map_ws2812.c

#107 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-12 11:22:15

xboot 说:

综合判定下来,应该选择8bit模式,比较合理,资源也相对少一点,8bit的话,基本就可以不要表格了,直接运算就行了。

按我上面所描述的8bit处理,那么,描述一个RGB,使用24字节。
如果存在表格,按字取数,取6次就可以了。
表格不需要运行时参与,存在代码区。
我随便撸几行代码,搞一个表格出来。哈哈。

#108 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-12 10:21:18

我从别的网站帖子上面看到了如下信息,我根据这些信息列出理论依据。
WS2812原理与实现
裁剪帖子的部分信息,可以看到,对于WS2812,其时序要求如下:
ws2812_clk.png
(1)T0H = T1L = 0.4us    (±150ns,建立color表时,尽量不考虑误差范围,可作为芯片SPI时钟误差)
(2)T1H = T0L = 0.85us  (±150ns,建立color表时,尽量不考虑误差范围,可作为芯片SPI时钟误差)

(3)与1楼的理论同理,得:
令SPI的一个时钟周期t = 0.05us,即SPI 的f = 20MHz。

T1H = T0L = 17个SPI数据
T0H = T1L =   8个SPI数据位

但是,芯片支持误差容忍(0.15us/150ns),
所以,可以尝试:

T1H = T0L = 16个SPI数据(少1个时钟节拍,0.05us/50ns)
T0H = T1L =   8个SPI数据位

#109 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-12 10:03:11

这是我测试到的波形,看起来数据宽度并没有绝对0.5us/2.0us,
是由于我的晶振使用内部32MHz晶振,时钟不准,但是点亮WS2811没有什么问题。
我现在看看WS2812,搞一个表出来。

(1)whycan下载
(2)站外免积分下载

#110 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-12 09:52:01

xboot 说:

使用5bit,测试下来,发现可靠性偏低,感觉有必要搞成8bit,或者16bit,反正SPI时钟速度不是瓶颈。还有感觉想要搞通用时序,估计可靠性都好不到哪里去,最优的方式,还是用可配置的8bit或者16bit方案。

2812没有测试过,
值得一提的是,我这里使用WS2811芯片,
测试情况是,没有问题。
随时热拔插,瞬间就点亮并且呈现目标颜色。不存在乱闪的问题。
我现在看看搞一个8bit/16bit的表格出来。

#111 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-10 09:47:48

@xboot
分析的没错。
还有个地方需要注意。
那就是复位时序的时间长短,
有很大区别。
WS2812B需要280us以上
WS2811 反而只需50us以上。
(可能是WS2812B的传输数据速度快,为了确保稳定性,把复位时长提高?)

#112 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-10 09:25:55

对于上面我使用的WS2811的情况,2M SPI CLK,
情况如下:
(1)T0H = T1L = 0.5us = 500ns
(2)T1H = T0L =2.0us = 4 * T0H = 4 * T1L
看了你的WS2812手册里面给了个范围,
我们以WS2812B为准,将SPI CLK提升到4M。
那么,周期变成一半。
(1)T0H = T1L = 0.25us = 250ns
(2)T1H = T0L =1.0us = 1000ns =4 * T0H = 4 * T1L

观察了一下,完全符合WS2812B的时序要求。
(WS2812的数据传输速度是800KHz,WS2811(400KHz)的2倍)
所以,你至少使用4M的SPI CLK,才能驱动WS2812。

#113 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-10 09:02:39

xboot 说:

另外,可以把dma怼上去。
我是这样搞:

#define CHIP_NUM  100
typedef strut{
  uint8_t rst[200];    //0.5us *200 = 100us 
  uint8_t frame[ CHIP_NUM ][3][5];
  //3 代表颜色分量,R / G / B
  //5 颜色数据,5字节SPI数据描述一个分量的颜色深浅
}ws28xx_t,ws28xx_pt;

然后定时使用DMA将帧内存通过SPI发送出去就可以了。

#114 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-10 08:39:29

xboot 说:

哈哈,大哥果然神速。
我昨天调试了半天ws2811。
怎么搞都不行,后面才发现。12V没接......

#115 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-03-07 14:13:06

时隔多日,回来续帖。
    前面知道了原理,接下来,我们得生成一个color表。
    color表的结构应该是这样:
   

uint8_t ws2811_color[256][5]={......} 

    其中,256对应一中颜色分量的颜色深浅,因为RGB各占8bit。
    以下是我针对1楼的时序,生成的color表:
    color_map_ws2811.c
    color_map_ws2811.txt
    下一步是借助color_map_ws2811.c文件,编写CH579M的驱动代码!

#116 Re: 全志 SOC » v3s 的800x480屏幕的通信协议是什么? » 2022-02-28 18:28:52

inia 说:

请问 v3s 的 800x480屏幕的通信协议是什么?
源代码去哪里找?

一般我们都是接RGB666/rgb565屏幕,
源代码论坛里很多,详细请使用右上角的搜索,看你会不会用了。
基本上搭建环境的帖子,RGB TFT都是调通了的

#118 Re: 全志 SOC » 那位高人给讲讲f1c100s的内存布局 » 2022-02-21 19:56:46

bigbat 说:

想了解一下f1c100s的内存布局,sunxi-fei工具,有少些地址是0的、有0x80000000的,这是地址都是问什么呀

手册里面有存储器映射地址描述的。可以从f1c200s的手册里面看看。

#119 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2022-02-10 14:29:32

shenbk 说:

使用tiny-R2,默认串口为UART1,bootloader的串口非常容易改,反而RTT的finsh默认串口没修改成功,请问这个在哪里修改啊,我改了几个地方都没效果。

参考官方文档:FinSH 移植

FinSH 的输出:
FinSH 的输出依赖于系统的输出,在 RT-Thread 中依赖 rt_kprintf() 输出。在启动函数 rt_hw_board_init() 中, rt_console_set_device(const char* name) 函数设置了 FinSH 的打印输出设备。

对应串口引脚配置,应该在drv_uart.c里面,

有这样一个结构体,

static rt_err_t uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg);
static rt_err_t uart_control(struct rt_serial_device *serial, int cmd, void *arg);
static int      uart_putc(struct rt_serial_device *serial, char c);
static int      uart_getc(struct rt_serial_device *serial);
static rt_size_t uart_dma_transmit(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction);

void     uart_irq_handler(int irqno, void *param);

const struct rt_uart_ops _uart_ops =
{
    uart_configure,
    uart_control,
    uart_putc,
    uart_getc,
    uart_dma_transmit
};

可以看出,就是以下这个函数负责配置串口引脚的。
static rt_err_t uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg);

#120 Re: 全志 SOC » 开源 全志f1c100s(200s)所有IO都引出 » 2022-02-06 08:46:32

mapleft 说:

F1C 中间那个大洞是用老散热的么?, 我看很多人画的PCB中间的洞都是这么大的

这个洞是为了方便焊接的时候……方便灌锡……

#121 Re: Cortex M0/M3/M4/M7 » CH579M串口接收问题 » 2022-01-25 10:42:04

stephone 说:

无语了,刚发贴就发现原因了,自己不知道怎么改成这样了 sad sad sad
#define    UART1_RecvByte()        ( UART_RBR )

哈哈,CH579M的FIFO功能挺好的。
接收超时+FIFO溢出,
用起来可以减少CPU开销。

#122 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » [记录]使用SPI驱动WS2811 » 2022-01-22 16:28:15

LinjieGuo
回复: 21

市面上常见的2款串行可编程控制LED方案,分别是WS2811和WS2812。
    其中,

    [1]WS2811是芯片,常规供电为12V,按理说,驱动距离会远一些。

    [2]WS2812是灯珠,把可编程芯片内嵌在灯珠里面,常规供电5V,按理说,驱动距离相对短。

   

    相信很多朋友都在51单片机上面驱动过这个芯片,使用方法是:IO模拟单总线时序,达到传输RGB数据的效果。

    因为WS2811/2812驱动时序,是us级的,IO模拟的方法,过度依赖CPU,这种做法实在不合理。

    正确做法应该是借助片上的通讯外设,如UART/SPI等,兼容WS2811/2812的时序,腾出CPU资源,并且提高灯带驱动的稳定性。



    本文章阐述,使用SPI驱动WS2811的思路。

    先看手册:   

    ![image-20220122160847782](image-20220122160847782.png)
        image-20220122160847782.png

    ![image-20220122160959434](image-20220122160959434.png)
        image-20220122160959434.png

    从WS2811的手册,可以得知( 高速模式下 ):

    [1]这款芯片支持2种驱动速度:分别为高速模式和低速模式。

    [2]对单总线送'0'码和'1'码,需要使用T0H / T1H / T0L /T1L搭配。

    [3]搭配出来的'0'码和'1'码所占用时长皆为 2.5us。

    [4]T0H = T1L = 0.5us

    [5]T1H = T0L =2.0us = 4 * T0H = 4 * T1L

   

    因此,SPI总线的驱动时钟,一个时钟脉冲的周期不能大于 T0H / T1L ,也就是不能大于0.5us。

    我们试着就让SPI总线一个时钟脉冲的周期就等于0.5us,Tspiclk = 0.5us。

    那么,频率Fspiclk = 1 / Tspiclk  = 2MHz。

    这种情况下,如果想要送RGB888数据中的 1 位 数据 到WS2811,SPI总线需要发出5个位的数据:

○  1 : 00001 

○  0 : 11110

    如果要发1字节数据(8个位),如R = 0xF0,对应二进制为:

	1111 0000

    那么SPI应该发出这样的数据:

 	00001 00001 00001 00001 11110 11110 11110 11110

    对其进行组合,可以得到5个字节:

    0000 1000 0100 0010 0001 1111 0111 1011 1101 1110

    所以,SPI应该发送的数据为:

	0X08 		0X42		0X1F		0X7B		0XDE

    同理,对于R 、G、 B都可以这样操作。

    那么,也就是说,想要给一颗WS2811输送RGB888数据,需要发送5*3 = 15个字节

#123 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 有没有人想创业? » 2022-01-20 08:13:54

stb 说:

我想做一个带有 nas 功能的 网络盒子,其实主要就是开发一些LINUX 系统的应用,有没有人感兴趣 ?注意:创业需要用爱发电,没有工资发的哦,但是也不用掏钱:)

啊,这......

#124 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-15 13:45:22

435788A 说:

@LinjieGuo
下载了,还是出错误。
https://whycan.com/files/members/7570/rtt错误1.jpg
用惯了Keil这种界面,有错误直接跳到出错代码处
这个rtt一时难以上手

rtt的源码重新下载解压了吗?
我把我的整个rtt目录上传上来,你看看。
rt_thread_fal_elm_dfs_20220115.zip

#125 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-15 08:17:55

435788A 说:

我也来学习,初次接触RTT,文件在那里也不知道,给我来了个错误了
https://whycan.com/files/members/7570/RTT.png

哈哈,我上传一下代码啊。
你这个情况,感觉像是源码没有下载全的样子。
可以试试重新拉取系统源码,然后把bsp工程复制进去。
allwinner_tina_prj_v1_fat_elm_dfs.zip

#128 Re: 华芯微特 » 基于华芯微特SWM181CB的DS18B20温度传感器的1-wire驱动程序 » 2022-01-13 13:31:03

@缥缈九哥
九哥,还可以使用串口转单总线时序,节省CPU资源。
但是我具体不知道怎么做......(狗头保命)

#129 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2022-01-12 17:36:17

@illusion
"所谓的“积分下载有门槛”,只是一些白嫖怪的借口而已。"
非常赞同这句话。

#130 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2022-01-12 15:06:04

@luoyuan0130
同意你说的互相开源学习,
只要你开源了自己的作品/资源,
积分就来了,
那么自然就可以下载想要的资源。
(开源不等于免费,以下资料分享给你 )
[文章分享:再看中国法院是怎么对待GPL的]
QT_GPL_20220112-1509.png

#131 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-12 10:03:01

擦掉分区的数据之后,重启,果然OK了。
rtt_fal_erase_reboot.png

我们再做下一步工作:
(1)挂载了spi_nor的一部分分区到根目录,并且创建了sdcard的工作目录,
<1>读入/config/config.txt的内容
<2>根据配置参数,选择要不要挂载SD卡

#132 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-12 09:56:01

对上一个帖子的要求,我们再度优化bsp_fal_init()函数:

void bsp_fal_init(void)
{
	int fd, size;
    struct statfs elm_stat;
    struct fal_blk_device *blk_dev;
    char str[] = "enable sdcard 1 ", buf[80];

	/* fal init */
    fal_init();

	 /* create block device */
    blk_dev = (struct fal_blk_device *)fal_blk_device_create(FS_PARTITION_NAME);
    if(blk_dev == RT_NULL)
        rt_kprintf("Can't create a block device on '%s' partition.\n", FS_PARTITION_NAME);
    else
        rt_kprintf("Create a block device on the %s partition of flash successful.\n", FS_PARTITION_NAME);

	/* mount elmfat file system to FS_PARTITION_NAME */
    if(dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
    {    
    	rt_kprintf("elmfat filesystem mount success.\n");
		return;
	}
	else
	{
		rt_kprintf("elmfat filesystem mount failed.\n");
		goto __do_mount_bolck_dev_fs_failed_fal_action;
		
	}

__do_mount_bolck_dev_fs_failed_fal_action:
	/* make a elmfat format filesystem */
	 if(dfs_mkfs("elm", FS_PARTITION_NAME) == 0)
	 {
		rt_kprintf("make elmfat filesystem success.\n");
		if(dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
   		{    
    		rt_kprintf("elmfat filesystem mount success.\n");
			
		}
		 
	 }
	 else
	 {
	 	rt_kprintf("make elmfat filesystem faild.\n");
	 	while(1);
	 }

    /* Get elmfat file system statistics */
    if(statfs("/", &elm_stat) == 0)
        rt_kprintf("elmfat filesystem block size: %d, total blocks: %d, free blocks: %d.\n", 
                    elm_stat.f_bsize, elm_stat.f_blocks, elm_stat.f_bfree);

    if(mkdir("/user", 0x777) == 0)
        rt_kprintf("make a directory: '/user'.\n");
	
	if(mkdir("/sdcard", 0x777) == 0)
		   rt_kprintf("make a directory: '/sdcard'.\n");

	if(mkdir("/config", 0x777) == 0)
		   rt_kprintf("make a directory: '/sdcard'.\n");
	

    rt_kprintf("Write string '%s' to /config/config.txt.\n", str);

    /* Open the file in create and read-write mode, create the file if it does not exist*/
    fd = open("/config/config.txt", O_WRONLY | O_CREAT);
    if (fd >= 0)
    {
        if(write(fd, str, sizeof(str)) == sizeof(str))
            rt_kprintf("Write data done.\n");

        close(fd);   
    }
 
}

编译,修饰,烧写,启动,没啥改变

msh />
msh />
msh />
msh />
msh />ls
Directory /:
user                <DIR>                    
whycan              <DIR>                    
msh />

(使用命令行)擦掉这个这个分区的数据,再试一下:

msh />fal probe
No flash device or partition was probed.
Usage: fal probe [dev_name|part_name]   - probe flash device or partition by given name.
[I/FAL] ==================== FAL partition table ====================
[I/FAL] | name           | flash_dev |   offset   |    length  |
[I/FAL] -------------------------------------------------------------
[I/FAL] | sys_partition  | wind25qx  | 0x00000000 | 0x00100000 |
[I/FAL] | root_partition | wind25qx  | 0x00100000 | 0x00f00000 |
[I/FAL] =============================================================
msh />fal probe root_partition
Probed a flash partition | root_partition | flash_dev: wind25qx | offset: 1048576 | len: 15728640 |.
msh /               
msh />
msh />fal erase 0 4096
Erase data success. Start from 0x00000000, size is 4096.
msh />

#133 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-12 09:34:36

答案不言而喻(因为开机打印东西有点多,不贴图了)
(1)第一次开机,会因为挂载不上,而格式化FAL分区所创建的块设备,然后挂载这个块设备到dfs
(2)我们手动创建了文件夹whycan之后
(3)无论我们是重启单板,还是重新烧写一样的程序,whycan依然在。

我们再优化一下,流程应该是这样的:
(1)挂载FAL分区所创建的块设备到DFS
    如果挂载成功,则执行正常开机
    如果挂载失败,则执行初始化分区操作。
(2)初始化操作,应该包含以下:
<1>格式化FAL分区为文件系统
<2>挂载文件系统
<3>创建默认工作目录
<4>创建配置文件config到/config目录

#134 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-12 09:31:07

重启单板,咦?我们刚刚创建的whycan文件夹没了??
这一看,那一看,发现,每次开机,bsp_fal_init()函数都会做一遍格式化操作。
我们是不是可以这样:
(1)[分区创建块设备]
(2)尝试挂载块设备到文件系统
   如果成功,就不格式化了
   如果失败,则格式化完在挂载

说干就干!修改一下这个bsp_fal_init()函数:(关键代码)

__mount_fal:
	/* mount elmfat file system to FS_PARTITION_NAME */
    if(dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
    {    
    	rt_kprintf("elmfat filesystem mount success.\n");
	}
	else
	{
		/* make a elmfat format filesystem */
   		 if(dfs_mkfs("elm", FS_PARTITION_NAME) == 0)
   		 {
       		 rt_kprintf("make elmfat filesystem success.\n");
			 goto __mount_fal;
   		 }
		 else
		 {
		 	rt_kprintf("make elmfat filesystem faild.\n");
		 	while(1);
		 }
	}

#135 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-12 09:19:44

开机,看一看
rtt_dfs_spi_nor.png
显然,虚拟文件系统挂载进去了。(红色字体是SD卡相关,没有插卡,所以报故障)
具体的 [分区创建块设备]  [块设备格式化为文件系统] [文件系统挂载到DFS] [创建目录] [创建文件] [写文件]
这些流程,看上面的代码,一目了然。不作过多描述。

#136 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-12 09:10:18

继续前进。
参考文章IOT-OS之RT-Thread(十一)--- FAL分区管理与easyflash变量管理
我们抄袭一下,跟他做法相仿,文件编排略有差异,只为了实现功能。
修改main.c文件,
(1)增加函数 bsp_fal_init()

#include "dfs_posix.h"

#define FS_PARTITION_NAME  "root_partition"

void bsp_fal_init(void)
{
	int fd, size;
    struct statfs elm_stat;
    struct fal_blk_device *blk_dev;
    char str[] = "elmfat mount to W25Q flash.", buf[80];

	/* fal init */
    fal_init();

	 /* create block device */
    blk_dev = (struct fal_blk_device *)fal_blk_device_create(FS_PARTITION_NAME);
    if(blk_dev == RT_NULL)
        rt_kprintf("Can't create a block device on '%s' partition.\n", FS_PARTITION_NAME);
    else
        rt_kprintf("Create a block device on the %s partition of flash successful.\n", FS_PARTITION_NAME);

	/* make a elmfat format filesystem */
    if(dfs_mkfs("elm", FS_PARTITION_NAME) == 0)
        rt_kprintf("make elmfat filesystem success.\n");

    /* mount elmfat file system to FS_PARTITION_NAME */
    if(dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
        rt_kprintf("elmfat filesystem mount success.\n");
	
    /* Get elmfat file system statistics */
    if(statfs("/", &elm_stat) == 0)
        rt_kprintf("elmfat filesystem block size: %d, total blocks: %d, free blocks: %d.\n", 
                    elm_stat.f_bsize, elm_stat.f_blocks, elm_stat.f_bfree);

    if(mkdir("/user", 0x777) == 0)
        rt_kprintf("make a directory: '/user'.\n");

    rt_kprintf("Write string '%s' to /user/test.txt.\n", str);

    /* Open the file in create and read-write mode, create the file if it does not exist*/
    fd = open("/user/test.txt", O_WRONLY | O_CREAT);
    if (fd >= 0)
    {
        if(write(fd, str, sizeof(str)) == sizeof(str))
            rt_kprintf("Write data done.\n");

        close(fd);   
    }

    /* Open file in read-only mode */
    fd = open("/user/test.txt", O_RDONLY);
    if (fd >= 0)
    {
        size = read(fd, buf, sizeof(buf));

        close(fd);

        if(size == sizeof(str))
            rt_kprintf("Read data from file test.txt(size: %d): %s \n", size, buf);
    }
}

(2)修改main函数,显示调用bsp_fal_init()

int main(int argc, char **argv)
{
	
	rt_kprintf("Start...\n");
	rt_kprintf("periph_get_pll_clk:%d\n", periph_get_pll_clk());
    rt_kprintf("cpu_get_clk:%d\n", cpu_get_clk());
    rt_kprintf("ahb_get_clk:%d\n", ahb_get_clk());
    rt_kprintf("apb_get_clk:%d\n", apb_get_clk());

	bsp_fal_init();
	
	MainThreadCreat();
    return 0;
}

(3)修改start_task,关掉TF/SD卡挂载相关。

void start_thread(void *parameter)
{
	int ret = 0;
#if 0
	
	if( 0 == dfs_mount("sd0","/","elm", 0,0) )
	{
		printf("sd0 mount to / \n");
	}
	else
	{
		printf("sd0 mount to / faild \n");
	}
#endif		
	
	while(1)
	{
		rt_thread_delay(1);
	}	
}

(4)编译,修饰,烧写。

#137 Re: 全志 SOC » f1c100学习 » 2022-01-11 16:05:54

work11 说:

想学习一个f1c100单片机,论坛上面知识都是散乱的,没有成系列的教程,成系列的都收费,我也是服了
全脂了。

哈哈哈,混了这么多年,我倒认为,
花能够承受的代价,
如果能够换来想要的内容,
这是效率最高的。

#138 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 15:34:58

按照官方的流程走,看起来都成功了。
    但是!!!这都不是我们想要的。
    我们捋一下,我们的目的是:
FAL将Flash进行分区,然后,将这个分区注册成块设备,块设备就可以注册进DFS,被DFS虚拟文件系统管理了

#139 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 15:33:26

按照官方知道文档,测试一下--> 软件包-FAL
(1)查看有那些分区

msh />fal probe
No flash device or partition was probed.
Usage: fal probe [dev_name|part_name]   - probe flash device or partition by given name.
[I/FAL] ==================== FAL partition table ====================
[I/FAL] | name           | flash_dev |   offset   |    length  |
[I/FAL] -------------------------------------------------------------
[I/FAL] | sys_partition  | wind25qx  | 0x00000000 | 0x00100000 |
[I/FAL] | root_partition | wind25qx  | 0x00100000 | 0x00f00000 |
[I/FAL] =============================================================

(2)指定待操作的 Flash 设备或 Flash 分区
不能选择sys_partition  这个分区,因为这个分区存储了我们的系统程序,擦掉系统就没了。
所以我们选择 root_partition分区:

msh />fal probe root_partition
Probed a flash partition | root_partition | flash_dev: wind25qx | offset: 1048576 | len: 15728640 |.

(3)擦除数据

msh />fal erase 0 4096
Erase data success. Start from 0x00000000, size is 4096.

(4)写入数据

msh />fal write 8 1 2 3 4 5
Write data success. Start from 0x00000008, size is 5.
Write data: 1 2 3 4 5 .

(5)读取数据

msh />fal read 0 64
Read data success. Start from 0x00000000, size is 64. The data is:
Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
[00000000] FF FF FF FF FF FF FF FF 01 02 03 04 05 FF FF FF ................
[00000010] FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
[00000020] FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
[00000030] FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................

(6)性能测试

msh />fal bench 4096 yes
Erasing 15728640 bytes data, waiting...
Erase benchmark success, total time: 36.614S.
Writing 15728640 bytes data, waiting...
Write benchmark success, total time: 61.441S.
Reading 15728640 bytes data, waiting...
Read benchmark success, total time: 4.267S.

#140 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 15:16:39

果然,这条红色的错误提示,没有了。
initialize fal_init[E/SFUD] ERROR: Flash device spi00 not found!

rtt_fal_boot_not_find_no_red_error.png

#141 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 15:04:20

也就是说,FAL根本就没有初始化。
        我们让他像elm组件一样,自动初始化。
在fal.c文件底部,加入一个宏修饰

INIT_PREV_EXPORT(fal_init);

        编译,修饰,下载,启动查看串口打印:
rtt_fal_boot_not_find_spi00.png

        一眼看过去,肯定不对劲,关键的红字信息。
initialize fal_init[E/SFUD] ERROR: Flash device spi00 not found!
       在初始化fal的时候,系统跟我们说,找不到spi00。
       咦?我们前面定义的宏,明明是:

#define NOR_FLASH_DEV_NAME             "wind25qx"

       他跟我们说,找不到spi00,那肯定有问题。
       我折腾了很久,发现了问题在menuconfig环节,我手欠的把这一项修改了。
rtt_fal_boot_not_find_spi00_menuconfig.png
       修改这一项为 wind25qx,保存,退出menuconfig,然后编译,修饰,烧写。
rtt_fal_boot_not_find_spi00_menuconfig_wind25qx.png

#142 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 15:01:46

scons,编译,编译成功。
跑起来,好像没有看到我们想要看的东西。
rtt_fal_boot.png
        哪里异常呢?
(1)打印出的initialize列表,没有找到fal相关的关键词
(2)输入fal命令,提示,还没有初始化

#143 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 14:53:02

为什么fal_cfg.h的这个宏是这样定义呢?

#define NOR_FLASH_DEV_NAME             "wind25qx"

因为,SPI块设备注册进来的名字就是"wind25qx"。
在文件drv_spi_flash.c定义

#define SPI_FLASH_DEVICE_NAME       "spi00"
#define SPI_FLASH_CHIP              "wind25qx"

#144 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 14:50:10

文件fal_flash_sfud_port.c

/*
 * File      : fal_flash_sfud_port.c
 * This file is part of FAL (Flash Abstraction Layer) package
 * COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
 *
 *  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, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Change Logs:
 * Date           Author       Notes
 * 2018-01-26     armink       the first version
 */

#include <fal.h>
#include <sfud.h>

#ifdef FAL_USING_SFUD_PORT
#ifdef RT_USING_SFUD
#include <spi_flash_sfud.h>
#endif


#ifndef FAL_USING_NOR_FLASH_DEV_NAME
#define FAL_USING_NOR_FLASH_DEV_NAME             "wind25qx"
#endif

static int init(void);
static int read(long offset, uint8_t *buf, size_t size);
static int write(long offset, const uint8_t *buf, size_t size);
static int erase(long offset, size_t size);

static sfud_flash_t sfud_dev = NULL;
struct fal_flash_dev nor_flash0 =
{
    .name       = FAL_USING_NOR_FLASH_DEV_NAME,
    .addr       = 0,
    .len        = 16 * 1024 * 1024,
    .blk_size   = 4096,
    .ops        = {init, read, write, erase},
    .write_gran = 1
};

static int init(void)
{

#ifdef RT_USING_SFUD
    /* RT-Thread RTOS platform */
	
    sfud_dev = rt_sfud_flash_find_by_dev_name(FAL_USING_NOR_FLASH_DEV_NAME);
#else
    /* bare metal platform */
    extern sfud_flash sfud_norflash0;
    sfud_dev = &sfud_norflash0;
#endif

    if (NULL == sfud_dev)
    {
        return -1;
    }

    /* update the flash chip information */
    nor_flash0.blk_size = sfud_dev->chip.erase_gran;
    nor_flash0.len = sfud_dev->chip.capacity;

    return 0;
}

static int read(long offset, uint8_t *buf, size_t size)
{
    assert(sfud_dev);
    assert(sfud_dev->init_ok);
    sfud_read(sfud_dev, nor_flash0.addr + offset, size, buf);

    return size;
}

static int write(long offset, const uint8_t *buf, size_t size)
{
    assert(sfud_dev);
    assert(sfud_dev->init_ok);
    if (sfud_write(sfud_dev, nor_flash0.addr + offset, size, buf) != SFUD_SUCCESS)
    {
        return -1;
    }

    return size;
}

static int erase(long offset, size_t size)
{
    assert(sfud_dev);
    assert(sfud_dev->init_ok);
    if (sfud_erase(sfud_dev, nor_flash0.addr + offset, size) != SFUD_SUCCESS)
    {
        return -1;
    }

    return size;
}
#endif /* FAL_USING_SFUD_PORT */

#145 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 14:43:40

文件fal_cfg.h

/*
 * File      : fal_cfg.h
 * This file is part of FAL (Flash Abstraction Layer) package
 * COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
 *
 *  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, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Change Logs:
 * Date           Author       Notes
 * 2018-05-17     armink       the first version
 */

#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_

#include <rtconfig.h>
#include <board.h>

#define NOR_FLASH_DEV_NAME             "wind25qx"

/* ===================== Flash device Configuration ========================= */
extern struct fal_flash_dev nor_flash0;

/* flash device table */
#define FAL_FLASH_DEV_TABLE                                          \
{                                                                    \
    &nor_flash0,                                                     \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE                                                               \
{                                                                                    \
    {FAL_PART_MAGIC_WORD, "sys_partition", NOR_FLASH_DEV_NAME,        	  0,  1*1024*1024, 0}, \
    {FAL_PART_MAGIC_WORD, "root_partition", NOR_FLASH_DEV_NAME, 1*1024*1024, 15*1024*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */

#endif /* _FAL_CFG_H_ */

        修改完之后,分区表情况是这样的:、
(1)分区0:
分区名字                 :sys_partition,系统分区
分区绑定的块设备      :NOR_FLASH_DEV_NAME
绑定的块设备起始地址:0
本分区的尺寸           :1*1024*1024,也就是1MB
(2)分区1:
分区名字                 :root_partition,根分区
分区绑定的块设备      :NOR_FLASH_DEV_NAME
绑定的块设备起始地址:1*1024*1024,也就是从1MB位置开始。
本分区的尺寸           :15*1024*1024,也就是15MB

#146 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-09 14:43:00

报错是意料之中,好,那我们就按照要求,修改一下fal相关的2个文件。
        [bsp/allwinner_tina_prj_v1/packages/fal-v0.5.0/packge/samples/porting/fal_cfg.h]
        [bsp/allwinner_tina_prj_v1/packages/fal-v0.5.0/packge/samples/porting/fal_flash_sfud_port.c]
        这两个文件修改后,我们将文件挪一下,
(1)h文件复制到[bsp\allwinner_tina_prj_v1\packages\fal-v0.5.0\inc\]目录下
(2)c文件复制到[bsp\allwinner_tina_prj_v1\packages\fal-v0.5.0\src\]目录下
(3)删除[bsp/allwinner_tina_prj_v1/packages/fal-v0.5.0/packge/samples/]这个目录
        (不要问我为什么要这样做,因为我不懂怎么改里面的SConscript脚本,干脆这样干了,~~笑~~)

#147 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请教CH579的网络,不用库自己初始化的问题 » 2022-01-09 14:26:17

大哥,F1C200s_CH579的板子已经测试好了,
我发个板子给你一起研究学习,请问我怎么联系到你呢?
秋秋加你还没同意。

#148 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-08 20:10:24

回到家里,使用家里电脑,menuconfig之后,选择FAL,然后pkgs --update,成功把包更新到bsp。

Linjie@DESKTOP-NTLR93Q D:\SVN_Public\rt_thread\bsp\allwinner_tina_prj_v1
$ pkgs --update
Start to download package : fal-0.5.0.zip
Downloded 137 KB
Start to unpack. Please wait...
==============================>  FAL v0.5.0 is downloaded successfully.

Operation completed successfully.

Linjie@DESKTOP-NTLR93Q D:\SVN_Public\rt_thread\bsp\allwinner_tina_prj_v1

先看目录里有没有东西

Linjie@DESKTOP-NTLR93Q D:\SVN_Public\rt_thread\bsp\allwinner_tina_prj_v1
$ ls -l packages\
total 11
-rw-r--r-- 1 Linjie Administrators  266 Jan  8 20:00 SConscript
drwxr-xr-x 6 Linjie Administrators 4096 Jan  8 20:00 fal-v0.5.0
-rw-r--r-- 1 Linjie Administrators 4096 Jan  8 20:00 packages.dbsqlite
-rw-r--r-- 1 Linjie Administrators   86 Jan  8 20:00 pkgs.json
-rw-r--r-- 1 Linjie Administrators    2 Jan  8 20:00 pkgs_error.json

        可以看到,fal-v0.5.0已经被下载下来了。
        我们什么都不做,编译看看,因为我们没有实现某些接口,不出意外的话,会报错。
        编译完,果然,报错了。

CC build\libcpu\stack.o
CC build\libcpu\trap.o
CC build\packages\fal-v0.5.0\samples\porting\fal_flash_sfud_port.o
In file included from packages\fal-v0.5.0\samples\porting\fal_flash_sfud_port.c:25:0:
packages\fal-v0.5.0\inc/fal.h:29:21: fatal error: fal_cfg.h: No such file or directory
compilation terminated.
scons: *** [build\packages\fal-v0.5.0\samples\porting\fal_flash_sfud_port.o] Error 1
scons: building terminated because of errors.

#149 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-08 15:21:43

文档的后面还让我们参考这里FAL
说干就干
<1>定义片外 spi flash 设备,可以参考 fal_flash_sfud_port.c
    一会我把这个文件下载下来,捣鼓一下。
<2>定义 flash 设备表
    Flash 设备表定义在 fal_cfg.h 头文件中,定义分区表前需 新建 fal_cfg.h 文件 ,请将该文件统一放在对应 BSP 或工程目录的 port 文件夹下,并将该头文件路径加入到工程。
    fal_cfg.h 可以参考 示例文件 fal/samples/porting/fal_cfg.h 完成。
    一会这个文件我也下载下来,捣鼓捣鼓。

    好,这两个文件弄下来了(复制),那么放在哪里呢?

    想了一下,我编不下去了,source insight包含了整个工程(BSP只包含allwinner_tina_prj_v1,其他没有包含。)。
    好家伙,一个"fal"关键词的文件都没有。感觉是配置了跟没配置一样。

---- fal Matches (0 in 0 files) ----

fal_no_file.png

#150 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-08 14:56:01

上面是FAL的开启指引,咱们按照指引进行一顿操作!

--- fal: Flash Abstraction Layer implement. Manage flash device and partition.                                                           
[*]   Enable debug log output                                                                                                      
[*]   FAL partition table config has defined on 'fal_cfg.h'                         
[*]   FAL uses SFUD drivers                                                                                                                     
        (spi00) The name of the device used by FAL  
        version (v0.5.0)  --->

保存,然后使用命令,从menuconfig更新packge到工程中,packages目录里面有一些内容,
没有.c文件,不知道是不是有异常。

x@LAPTOP-BH56UJG6 E:\SVN_Public\rt_thread\bsp\allwinner_tina_prj_v1
$ pkgs --update

x@LAPTOP-BH56UJG6 E:\SVN_Public\rt_thread\bsp\allwinner_tina_prj_v1
$ ls -l packages\
total 7
-rw-r--r-- 1 meika Administrators  266 Jan  8 13:44 SConscript
-rw-r--r-- 1 meika Administrators 1288 Jan  8 14:27 fal_cfg.h
-rw-r--r-- 1 meika Administrators 2048 Jan  8 13:44 packages.dbsqlite
-rw-r--r-- 1 meika Administrators    2 Jan  8 13:44 pkgs.json
-rw-r--r-- 1 meika Administrators    2 Jan  8 14:59 pkgs_error.json

编译工程,按理说我没有实现指定的接口,应该会报错,但是结果是没有报错,跟之前一样。

#151 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-08 14:53:10

@LinjieGuo
请教了RTT群里的大神,RTT是支持把SPI FLASH进行分区管理的。也就是说,可以把Flash分出2个区或者多个区,然后bin文件下载进分区0,分区1/2...就可以用来格式化了。
这得益于RTT的扩展包FAL--RTT-FAL支持
我们根据指导文件进行操作。
1.1、打开 FAL
使用 fal package 需要在 RT-Thread 的包管理器中选择它,具体路径如下:

RT-Thread online packages
    system packages --->
        --- fal: Flash Abstraction Layer implement. Manage flash device and partition.
        [*]   Enable debug log output
        [*]   FAL partition table config has defined on 'fal_cfg.h'
        (onchip) The flash device which saving partition table
        (65536) The patition table end address relative to flash device offset.
        [ ]   FAL uses SFUD drivers
        (norflash0) The name of the device used by FAL (NEW)
                version (latest)  --->

每个功能的配置说明如下:

(1)开启调试日志输出(默认开启);
(2)分区表是否在 fal_cfg.h 中定义(默认开启)。如果关闭此选项,fal 将会自动去指定 Flash 的指定位置去检索并装载分区表,
   具体配置详见下面两个选项;
          存放分区表的 Flash 设备;
          分区表的 结束地址 位于 Flash 设备上的偏移。
(3)启用 FAL 针对 SFUD 的移植文件(默认关闭);
       
然后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。

#153 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-06 18:53:23

jhon 说:

rtthread studio 里面已经有f1c100s了 ,可以直接一键生成工程 效果一样

哈哈,我对elipse不太爽,现在用source insight阅读代码的。而且好像也是不能使用调试器调试的。

#155 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 17:44:12

9、疑问,为什么上面挂接sd卡的代码要延时呢?
    因为不延时,挂接不成功啊!
为什么会这样呢?通过查看代码,其实是跟SDIO相关的。

int rt_mmcsd_core_init(void)
{
    rt_err_t ret;

    /* initialize detect SD cart thread */
    /* initialize mailbox and create detect SD card thread */
    ret = rt_mb_init(&mmcsd_detect_mb, "mmcsdmb",
        &mmcsd_detect_mb_pool[0], sizeof(mmcsd_detect_mb_pool) / sizeof(mmcsd_detect_mb_pool[0]),
        RT_IPC_FLAG_FIFO);
    RT_ASSERT(ret == RT_EOK);

   ret = rt_mb_init(&mmcsd_hotpluge_mb, "mmcsdhotplugmb",
        &mmcsd_hotpluge_mb_pool[0], sizeof(mmcsd_hotpluge_mb_pool) / sizeof(mmcsd_hotpluge_mb_pool[0]),
        RT_IPC_FLAG_FIFO);
    RT_ASSERT(ret == RT_EOK);
     ret = rt_thread_init(&mmcsd_detect_thread, "mmcsd_detect", mmcsd_detect, RT_NULL,
                 &mmcsd_stack[0], RT_MMCSD_STACK_SIZE, RT_MMCSD_THREAD_PREORITY, 20);
    if (ret == RT_EOK)
    {
        rt_thread_startup(&mmcsd_detect_thread);
    }

    rt_sdio_init();

    return 0;
}

rt_mmcsd_core_init()这个函数里面,创建了一个线程,这个线程里面负责SDIO接口的一些事情,
具体做什么事情还没搞懂,凭我的直觉,反正就是跟他有关系。~笑~

void mmcsd_detect(void *param)
{
    struct rt_mmcsd_host *host;
    rt_uint32_t  ocr;
    rt_int32_t  err;

    while (1)
    {
        if (rt_mb_recv(&mmcsd_detect_mb, (rt_ubase_t *)&host, RT_WAITING_FOREVER) == RT_EOK)
        {
            if (host->card == RT_NULL)
            {
                mmcsd_host_lock(host);
                mmcsd_power_up(host);
                mmcsd_go_idle(host);

                mmcsd_send_if_cond(host, host->valid_ocr);

                err = sdio_io_send_op_cond(host, 0, &ocr);
                if (!err)
                {
                    if (init_sdio(host, ocr))
                        mmcsd_power_off(host);
                    mmcsd_host_unlock(host);
                    continue;
                }

                /*
                 * detect SD card
                 */
                err = mmcsd_send_app_op_cond(host, 0, &ocr);
                if (!err)
                {
                    if (init_sd(host, ocr))
                        mmcsd_power_off(host);
                    mmcsd_host_unlock(host);
                    rt_mb_send(&mmcsd_hotpluge_mb, (rt_ubase_t)host);
                    continue;
                }

                /*
                 * detect mmc card
                 */
                err = mmc_send_op_cond(host, 0, &ocr);
                if (!err)
                {
                    if (init_mmc(host, ocr))
                        mmcsd_power_off(host);
                    mmcsd_host_unlock(host);
                    rt_mb_send(&mmcsd_hotpluge_mb, (rt_ubase_t)host);
                    continue;
                }
                mmcsd_host_unlock(host);
            }
            else
            {
                /* card removed */
                mmcsd_host_lock(host);
                if (host->card->sdio_function_num != 0)
                {
                    LOG_W("unsupport sdio card plug out!");
                }
                else
                {
                    rt_mmcsd_blk_remove(host->card);
                    rt_free(host->card);

                    host->card = RT_NULL;
                }
                mmcsd_host_unlock(host);
                rt_mb_send(&mmcsd_hotpluge_mb, (rt_ubase_t)host);
            }
        }
    }
}

#156 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 17:32:44

jordonwu 说:

楼主高效! 这跑的是rt-smart?

就是RT-Thread不是rt smart

#157 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 16:26:44

8、访问tf/sd卡
(1)格式化sd卡,有3种方法
<方法1>使用msh命令行格式化:

msh />list_device
device           type         ref count
-------- -------------------- ----------
sd0      Block Device         0       
wind25qx Block Device         0       
spi10    SPI Device           0       
spi1     SPI Bus              0       
spi00    SPI Device           0       
spi0     SPI Bus              0       
uart2    Character Device     0       
uart0    Character Device     2       
msh />mkfs -t elm sd0
msh />

<方法2>程序里面格式化(参考官方文档:虚拟文件系统)
dfs_mkfs( "elm", "sd0");//其中elm是文件系统类型,sd0是块设备名称

<方法3>把tf卡拔出来,电脑格式化~~~笑~~

(2)挂载sd卡到根目录
    原本,我想把spi flash块设备挂载为/,然后sd卡挂接为/sdcard,
    奈何本人水平太差,不知道怎么分割spiflash的空间,一部分作为程序空间,一部分作为存储空间。(希望高手指教)
    所以,直接把sd卡挂接为/。
    几行代码搞定,把代码写在线程里:

void start_thread(void *parameter)
{
	int ret = 0;

	rt_thread_delay(100);
	/*挂载sdio0上的sd卡,文件系统类型为elm*/
	if( 0 == dfs_mount("sd0","/","elm", 0,0) )
	{
		printf("sd0 mount to / \n");
	}
	else
	{
		printf("sd0 mount to / faild \n");
	}
		
	
	while(1)
	{
		rt_thread_delay(1);
	}
}	

(3)使用msh给sd卡创建文件夹。
rtt_msh_dir.png

#158 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 14:01:22

7、查看代码,看看能不能找到问题所在
        既然是一个成熟的系统,那么,十有八九,不是别人系统问题,只能是单板匹配问题。
        单板差异,那么驱动就有差异,E/MMC相关的是sdio,我们看看SDIO引脚配置是否匹配。
从源码里面看到,
SDIO 0所使用的引脚为:/* SDC0: PF0-PF5 */[[]],
SDIO 1没有使用,所以没有配置。

static void sdio_gpio_init(struct sdio_drv *sdio_des)
{
    int pin;

    if ((rt_uint32_t)sdio_des->mmc_des == MMC0_BASE_ADDR)
    {
        /* SDC0: PF0-PF5 */[[]]
        for (pin = GPIO_PIN_0; pin <= GPIO_PIN_5; pin++)
        {
            gpio_set_func(GPIO_PORT_F, pin, IO_FUN_1);
            gpio_set_pull_mode(GPIO_PORT_F, pin, PULL_UP);
            gpio_set_drive_level(GPIO_PORT_F, pin, DRV_LEVEL_2);
        }
    }
    else if ((rt_uint32_t)sdio_des->mmc_des == MMC1_BASE_ADDR)
    {
        //todo: config gpio port
        RT_ASSERT(0);
    }

}

对应我们的单板,SDIO0 使用的引脚情况是一致的。
找不到红色字的原因,只好先放下他。先看看其他东西怎么玩!

#159 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 13:58:38

6、搜索相关内容
    通过搜索关键字:[E/[MMC]] [err]:0x00000100,  RTO
    找到相关帖子
(1)f1c100s 运行时提示错
    看来RTT论坛并不重视答疑,从2020年的帖子,到现在都没有解答。
(2)找不到相关内容~~~~难受!

#160 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 13:19:23

5、看看系统启动流程
    我们看看系统注册了什么组件、注册了什么驱动。启动的时候,做了什么事情。
    RTT借助宏INIT_EXPORT实现了自动初始化机制,我们找到这个宏的定义:
(参考帖子:[求助]RTT组件自动统一初始化宏INIT_EXPORT)
    自动初始化机制的核心就在文件D:\rt-thread-gitee_master\src\components.c
和D:\rt-thread-gitee_master\include\rtdef.h里面
因为代码篇幅过长,不做详细描述,咱们使能RTT内核调试宏,将初始化流程打印出来看看
(1)使能内核调试宏

#ifndef RT_DEBUG_INIT
#define RT_DEBUG_INIT                  1
#endif

(2)编译、修饰、烧写、查看启动日志
rtt_boot_log2.png
可以看到,启动的时候,执行了哪些组件的初始化。(BOARD/PREV/DEVICE/COMPONENT/ENV/APP)

打印日志上面2条红色的错误依然醒目,得看看是什么原因导致的。

#161 Re: 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 13:11:11

4、现象,接上串口0,看打印。
打印了一些乱七八糟的东西,可能是板子不匹配导致的。
(1)修改main.c文件,干掉一些东西,先让系统跑起来。

#include "rtthread.h"
#include "drv_clock.h"
#include "drv_gpio.h"
#include <rtdevice.h>
#include <dfs_fs.h>
#include <drv_sdio.h>
#include <drv_fb.h>
#include <stdio.h>

#include "UartCursor.h"
#include "LVGL_Interface.h"
#include "demo.h"
#include "AppPriorityList.h"


lcd_layer_Struct lcd_layer1={
	.width=100,
	.height=100,
	.posx=0,
	.posy=0,
	.priority=1,
	.pipe=1,
	.alpha_enable=1,
	.alpha_value=0xA0,
	.vram=(void *)0x80500000,
	.vram_format=VRAM_FORMAT_RGB565,	
};
lcd_layer_Struct lcd_layer2={
	.width=100,
	.height=100,
	.posx=50,
	.posy=50,
	.priority=2,
	.pipe=0,
	.alpha_enable=1,
	.alpha_value=0xA0,
	.vram=(void *)0x80600000,
	.vram_format=VRAM_FORMAT_RGB565,	
};


void start_thread(void *parameter)
{
	while(1)
	{
		rt_thread_delay(1);
	}	
}

#define RT_STARTLOOP_THREAD_STACK_SIZE 2048
#define MY_DISP_HOR_RES  LV_HOR_RES_MAX

static void MainThreadCreat()
{ 
	rt_thread_t tid;
	tid = rt_thread_create("start_thread", start_thread, RT_NULL,
					   RT_STARTLOOP_THREAD_STACK_SIZE, PRIORITY_START_LOOP, 20);
    RT_ASSERT(tid != RT_NULL);
    rt_thread_startup(tid);
	rt_kprintf("[Thread]start_thread Created.\n");
}


int main(int argc, char **argv)
{
	rt_kprintf("Start...\n");
	rt_kprintf("periph_get_pll_clk:%d\n", periph_get_pll_clk());
    rt_kprintf("cpu_get_clk:%d\n", cpu_get_clk());
    rt_kprintf("ahb_get_clk:%d\n", ahb_get_clk());
    rt_kprintf("apb_get_clk:%d\n", apb_get_clk());
	MainThreadCreat();
    return 0;
}

(2)编译,修饰,烧写。
    复位单板,启动,看起来较为正常了,但是还是有些问题。
rtt_boot_log.png

插上TF卡,还是这个样子,怀疑是板子引脚不匹配导致的。

#162 全志 SOC » [记录]f1c200s运行RT-thread » 2022-01-05 12:37:16

LinjieGuo
回复: 55

最近画了块f1c200s_ch579m的板子,尝试给200s跑RTT。
F1C100s-LCD-TV-CH579M 板子

涉及内容:
(1)基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO)
(2)Gitee-RT-Thread
(3)RT-Thread 下载
1、从上面链接下载资源,获取资源
(1)[rt-thread-gitee_master.zip]
(2)[allwinner_tina_prj_v1.zip]
(3)[env_released_1.2.0.zip]
2、安装ENV
(1)安装步骤,请观看视频:跳转到RTT官方视频页
3、解压资源
(1)解压 [rt-thread-gitee_master.zip] 到D盘根目录(当然也可以其他盘啦~笑~)
(2)解压 [allwinner_tina_prj_v1.zip] ,
      然后复制allwinner_tina_prj_v1  到  rt-thread-gitee_master\bsp目录下。
(有人问,为什么不用官方的allwinner_tina呢?因为官方的工程,不带bootloader,咱们为了方便,直接借助网友的工程。)
(3)在目录 D:\rt-thread-gitee_master\bsp\allwinner_tina_prj_v1,打开ENV。
(4)在ENV下,输入menuconfig。
(5)编译RTT,输入scons。
(6)得到未经修饰的rtthread.bin
(7)执行脚本文件,[flashtospi.bat],
这个脚本用于修饰rtthread.bin,增加魔术头,并下载bin文件到flash中。
(8)提示缺少120D.dll文件,咱们从网上复制一个这个文件进来,放在D:\rt-thread-gitee_master\bsp\allwinner_tina_prj_v1\tools目录下。
        继续执行第(7)步,修饰rtthread.bin成功。但是下载失败。
    板子接入USB,按住上面的BOOT键,按下RST键,然后松开RST,此时电脑识别到usb设备。
        继续执行第(7)步,程序下载成功。



bootloader分析笔记.md(右键另存为)
bootloader分析笔记.pdf(右键另存为)

#163 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » [求助]RTT组件自动统一初始化宏INIT_EXPORT » 2021-12-31 13:48:40

问题已经解决,在keil下,关键代码如下:
(1)h文件

/*自动初始化模块*/
#define RT_SECTION(x)               __attribute__((section(x)))
#define RT_UNUSED                   __attribute__((unused))
#define RT_USED                     __attribute__((used))


typedef int (*init_fn_t)(void);
#ifdef _MSC_VER /* we do not support MS VC++ compiler */
#pragma section("rti_fn$f",read)


        struct rt_init_desc
        {
            const char* level;
            const init_fn_t fn;
        };
        #define INIT_EXPORT(fn, level)                                  \
                                const char __rti_level_##fn[] = level"__rt_init_"#fn;   \
                                __declspec(allocate("rti_fn$f"))                        \
                                RT_USED const struct rt_init_desc __rt_init_msc_##fn =  \
                                {__rti_level_##fn, fn };
				
#else

        #define INIT_EXPORT(fn, level)                                                       \
            RT_USED const init_fn_t __rt_init_##fn RT_SECTION(".rti_fn." level) = fn
#endif
				
/* board init routines will be called in board_init() function */
#define INIT_BOARD_EXPORT(fn)           INIT_EXPORT(fn, "1")

/* pre/device/component/env/app init routines will be called in init_thread */
/* components pre-initialization (pure software initilization) */
#define INIT_PREV_EXPORT(fn)            INIT_EXPORT(fn, "2")
/* device initialization */
#define INIT_DEVICE_EXPORT(fn)          INIT_EXPORT(fn, "3")
/* components initialization (dfs, lwip, ...) */
#define INIT_COMPONENT_EXPORT(fn)       INIT_EXPORT(fn, "4")
/* environment initialization (mount disk, ...) */
#define INIT_ENV_EXPORT(fn)             INIT_EXPORT(fn, "5")
/* appliation initialization (rtgui application etc ...) */
#define INIT_APP_EXPORT(fn)             INIT_EXPORT(fn, "6")

(2)c文件

static int rti_start(void)
{
        return 0;
}
INIT_EXPORT(rti_start, "0");
static int rti_end(void)
{
        return 0;
}
INIT_EXPORT(rti_end,"7");


void rt_components_init(void)
{
        const init_fn_t* fn_ptr;
        for (fn_ptr = &__rt_init_rti_start; fn_ptr < &__rt_init_rti_end; )
        {
                (*fn_ptr)();
                fn_ptr ++;
        }
}

以上代码源自RTT bsp,以及1楼参考的文章。
成功的工程:ITX_190_HWA.zip

#164 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-31 08:48:17

2021/12/31
存在问题:无法使用J-Link调试F1C100s。
解决方法:取掉下图中,R41。使用keil,调试成功。
F1C100S_J_LINK_DEBUG.png

#165 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-30 10:12:37

CH579M短接P22,无法进入下载模式问题已解决。
解决方法,取掉复位引脚RST(P23)上面的104电容。
CH579M无法进入下载模式.png

#166 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-30 09:20:09

2021/12/30
调试过程中,还发现了个别的问题。
(1)焊接了3块板子,其中两块,CH579,按住BOOT键,不进入下载模式。只有一片是可以按住进入下载模式。
新焊接的芯片,因为内部没有程序,自动进入了下载模式,能够识别USB设备。
下载程序之后,就无法再次进入了,但是有一片就肯定可以进入。

#167 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » [求助]RTT组件自动统一初始化宏INIT_EXPORT » 2021-12-29 10:50:38

aozima 说:

ITX-190 是啥?

哈哈,是我之前做的一款M0开发板。用的是SWM190单片机。
参考文章里作者提过你,现在看到本尊了。久仰久仰。

#168 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » [求助]RTT组件自动统一初始化宏INIT_EXPORT » 2021-12-29 09:29:43

我把代码移植到ITX-190,也是一样,没有看到注册函数的打印。
附上代码:
(1)whycan下载
(2)站外免费下载(右键另存为)

#169 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » [求助]RTT组件自动统一初始化宏INIT_EXPORT » 2021-12-29 08:26:28

通过下载RTT主线代码,借助STM32F407的RTT keil工程,他是没有指定sct文件的,也就是说,是自动生成的。
RTT_Project.png

#170 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » [求助]RTT组件自动统一初始化宏INIT_EXPORT » 2021-12-28 17:40:55

继续描述场景
(1)优化等级-O0
(2)不勾选One ELF Section per Function
编译后,想要自动调用的宏还是没有被调用。
因为是公司代码,不方便上传,先上次map文件:
CMSIS-RTOS2-free_map.zip
如果大神们不好诊断,明天,我可以用其他单板实现这个框架,发代码出来。

#171 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » [求助]RTT组件自动统一初始化宏INIT_EXPORT » 2021-12-28 17:32:36

编译环境:Keil 5
(1)map文件关键信息

__rt_init_rti_start                      0x08011ce0   Data           4  hw_action.o(.rti_fn.0)
__rt_init_rti_end                        0x08011ce4   Data           4  hw_action.o(.rti_fn.7)

hw_action.o(.text) refers to hw_action.o(.rti_fn.0) for __rt_init_rti_start
hw_action.o(.text) refers to hw_action.o(.rti_fn.7) for __rt_init_rti_end
hw_action.o(.rti_fn.0) refers to hw_action.o(.text) for rti_start
hw_action.o(.rti_fn.7) refers to hw_action.o(.text) for rti_end
hw_dev_led.o(.rti_fn.4) refers to hw_dev_led.o(.text) for register_hw_dev_led

Removing hw_dev_led.o(.rti_fn.4), (4 bytes).

0x08011ce0   0x08011ce0   0x00000004   Data   RO         2106    .rti_fn.0           hw_action.o
0x08011ce4   0x08011ce4   0x00000004   Data   RO         2107    .rti_fn.7           hw_action.o

#172 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » [求助]RTT组件自动统一初始化宏INIT_EXPORT » 2021-12-28 17:21:47

LinjieGuo
回复: 9

如题,我写了个简单的设备管理器,
    每个设备,写完之后,应该有个注册函数,
    我想让这个注册函数自动被管理器调用。
    参考到了RTT的宏,指定这些函数在某一个特定的代码段,
   按顺序排列起来,然后从头到尾,逐个调用。

#define INIT_EXPORT(fn, level)        \
        const init_fn_t __rt_init_##fn RT_SECTION(".rti_fn."level) = fn
#define INIT_BOARD_EXPORT(fn)                		INIT_EXPORT(fn, "1")
#define INIT_CPU_EXPORT(fn)                    	INIT_EXPORT(fn, "2")
#define INIT_DEVICE_EXPORT(fn)                	INIT_EXPORT(fn, "3")
#define INIT_COMPONENT_EXPORT(fn)         			INIT_EXPORT(fn, "4")
#define INIT_FS_EXPORT(fn)                      INIT_EXPORT(fn, "5")
#define INIT_APP_EXPORT(fn)                    	INIT_EXPORT(fn, "6")

    参考这篇文章: RT-Thread 学习笔记(七)
    我从中抄袭了这些代码
(1)头文件代码

/*自动初始化模块*/
#define RT_SECTION(x)               __attribute__((section(x)))
#define RT_UNUSED                   __attribute__((unused))
#define RT_USED                     __attribute__((used))

typedef int (*init_fn_t)(void);
#define INIT_EXPORT(fn, level)        \
        const init_fn_t __rt_init_##fn RT_SECTION(".rti_fn."level) = fn
					
#define INIT_BOARD_EXPORT(fn)                		INIT_EXPORT(fn, "1")
#define INIT_CPU_EXPORT(fn)                    	INIT_EXPORT(fn, "2")
#define INIT_DEVICE_EXPORT(fn)                	INIT_EXPORT(fn, "3")
#define INIT_COMPONENT_EXPORT(fn)         			INIT_EXPORT(fn, "4")
#define INIT_FS_EXPORT(fn)                      INIT_EXPORT(fn, "5")
#define INIT_APP_EXPORT(fn)                    	INIT_EXPORT(fn, "6")

(2)c文件代码

static int rti_start(void)
{
        return 0;
}
INIT_EXPORT(rti_start, "0");
static int rti_end(void)
{
        return 0;
}
INIT_EXPORT(rti_end,"7");


void rt_components_init(void)
{
        const init_fn_t* fn_ptr;
        for (fn_ptr = &__rt_init_rti_start; fn_ptr < &__rt_init_rti_end; )
        {
                (*fn_ptr)();
                fn_ptr ++;
        }
}

(3)调用:
①初始化设备管理器的时候,调用rt_components_init()函数,
②修饰注册函数

INIT_COMPONENT_EXPORT(register_hw_dev_led);

(4)串口打印,没有看到register_hw_dev_led()函数的调用打印。

#173 Re: 全志 SOC » 求助各位大佬,我的车机最近变砖了,用的全志t7的芯片 » 2021-12-28 17:09:46

huangkun 说:

就是想研究一下啊,以后再坏了不能老找4s店

哈哈哈,我知道了,你肯定是想破解车机,
一般闭源车机无限流量。
我的破长安也是这样......

#175 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-25 14:06:12

2021/12/25 跟帖
板子到了,焊接了几片,发现:
(1)TV接口错了,处理电路的输入和输出搞反了,已经通过割板飞线解决。V2.1版本修改电路图。
(2)FPC40P,不方便焊接,下次延长引脚。
(3)CH579M的焊盘感觉丝印有问题,对准了丝印,焊盘对不上,封装来自立创商城的器件。
(4)CH579M的蓝牙天线没有引出/板载天线。

其他功能还没测试,测试到了再跟帖。
另外,V2.1版本修改电路图。兄弟们有什么需求可以提出来。尽量满足!

#176 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-24 23:08:29

dgtg 说:

我关注CVBS IN,支持不?
CVBS in好像还没有做好的

晕哥肯定能解决这个问题!!!

#177 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-24 23:06:42

CHSHIQING 说:

这快板子能支持电容屏吗,感觉电阻屏触摸不是很灵敏

旁边的牛角座,引出了一组IIC接口,可以自行做一个显示板,通过牛角座40P连接起来。

#178 Re: 全志 SOC » [慢更]小白探索如何使用V3s播放音乐  » 2021-12-23 22:15:46

sck852414902 说:

怎么联系晕哥啊,我也想请假晕哥

发帖,描述清楚环境,描述清楚问题,晕哥会悄悄的出现......

#179 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-23 00:21:53

touchey 说:

@LinjieGuo
CVBS/TV out 带莲花座
看起来真不爽
当让看主播的需求定位啦

因为买回来的摄像头,配的就是莲花线啊。
.png

#180 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-22 19:55:07

aozima 说:

我给整成一个SPI网卡用,后面看看能不能塞BLE进去。

兄弟,你联系一下晕哥,给晕哥留个信息,我焊接好,测试一下就给您送过去。

#181 Re: 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-22 19:49:47

aozima 说:

我给整成一个SPI网卡用,后面看看能不能塞BLE进去。

蓝牙可以加进去。调完,下一版加。

#183 全志 SOC » F1C100s-LCD-TV-CH579M 板子 » 2021-12-20 12:35:47

LinjieGuo
回复: 18

板子已经发出去制作,但是还没测试。
板子尺寸:10cm*10cm
板载资源:
(1)F1C100s 408MHz 32MB DDR
(2)引出CVBS/TV out 带莲花座
(3)SPI Flash X2
    (都挂载在SPI0上,SPI Flash0 是系统存储器,SPI Flash1焊盘兼容Nand Flash)
(4)引出HP接口,带耳机座
(5)板载功放芯片,可接喇叭
(6)板载MIC模块
(7)板载SD卡座
(8)板载JTAG接口,
    板载UART0接口(PE0 PE1)
    复位按键,Flash Boot按键,方便调试
(9)板载LCD 接口,带背光电路
    FPC40P 电阻屏+ DC2-40P牛角座
(10)板载USB Host座,同时带XH2.54座,方便扩展。
(11)板子DC接口,可12V供电,并引出12V XH2.54座子。
(12)CH579M  30MHz, RAM 20KB/Flash 256KB
      (通过SPI1与F1C100s连接,目的是扩展串口,以太网透传)
a.扩展以太网接口 10Mbps
b.扩展4串口
c.引出SWD调试口,方便调试。
d.引出USB Host接口

        板子还没测试,程序也没有调试,先上图,各位大神也可以过来观摩观摩!
        画板子不专业,希望各位大哥可以指点指点!
        板子资源:
调试屏底板V2_线位图.pdf
调试屏底板V2_原理图.pdf
调试屏底板V2_whycan打包_20211220-1235.zip

注意,很多地方我没打丝印标识,兄弟们可以下载文件,自行打丝印!
注意,很多地方我没打丝印标识,兄弟们可以下载文件,自行打丝印!
注意,很多地方我没打丝印标识,兄弟们可以下载文件,自行打丝印!

#184 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2021-12-10 20:15:50

兄弟们,看看我的帖子,
https://whycan.com/t_3138.html
里面的流程,内容,
完全是晕哥帮忙搞出来的。
晕哥帮忙解决了问题,
还给了这么多的积分,真的很厚道。
个人认为,对于咱们搞电子/嵌入式的职业,少说都有6K/8k起步吧,
真正能解决问题的资源,不说几十块,几百块,甚至几千块都值得!
白P可耻!!白P可耻!!白P可耻!!

#185 Re: 全志 SOC » X3开发板官方版本新鲜出炉,4核A7,内置128MB DDR,封装FBGA 262,16x13x1.0mm » 2021-10-25 10:24:55

居然还在吵,说实话,别人卖服务的,就值这个价。
我们换个角度讲,你搞了个linux开发板,卖200块。
我买了你的开发板,而我水平又比较差,我天天捣鼓。
一有不懂我就艾特你!!!
第一天,我私聊你:环境怎么装?
第二天,我私聊你:怎么编译内核,怎么编译设备树,怎么......
......
过阵子我私聊你:你这个系统接wifi网络不稳定,是不是有问题?
又过阵子我私聊你:你这个系统使用USB接4G模块没反应,是不是有问题?
......
......
      那么请你告诉我,直到我把产品做出来,技术支持耗掉多少工时?200块够发工资吗?
      我耗掉了多少工时,我老板这个时间段给我发的工资要多少?项目是不是已经逾期了?
      这个时候,有一家开发板厂商,他已经把这个东西都捣鼓好了,我只需要写业务代码就好了,一两天上手。
      但是,这个开发板有点贵,1800元!!!
      天啊,不可想象,居然是我半个月工资了!!!
      ......
      抱歉,兄弟们,我编不下去了,我还要上班......
      总得来说,你们懂的......

#187 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2021-10-06 15:55:14

配置好的VM虚拟机Ubuntu系统 链接:https://pan.baidu.com/s/17vk0_QWRNRuxwi5EZ_P-Xg 提取码:54pb

#188 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2021-10-06 15:51:15

@逍暗博
有可能是拉取资源的时候,拉少了某些东西。
可以尝试下载我上传的虚拟机,对比一下。

#189 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2021-10-06 15:26:19

@wbinchina
哈哈,不好意思,我很久没看贴了。
认真爬一下楼,有答案的。很多答案在晕哥的回复里面。

#191 Re: 全志 SOC » [求助]使用sinlinx的SDK进行QT开发,显示中文异常。 » 2021-08-12 21:20:19

cube 说:

电脑显示正常吗?

请教了多位大神,借鉴了资料:
https://blog.csdn.net/zottffssent123/article/details/114636842
测试完后,确认是编码问题。
修改为GBK文件就可以了。

#193 全志 SOC » [求助]使用sinlinx的SDK进行QT开发,显示中文异常。 » 2021-08-12 19:51:12

LinjieGuo
回复: 3

如题,使用sinlinx的SDK进行QT开发,显示中文异常。情况如下图所示,英文显示正常,textedit显示不正常:

sinlinx_fa_001.png
sinlinx_fa_002.png

代码:
工程文件免费下载
       对于QT开发经验较少,请问各位路过的大哥,这是什么原因,应该如何做呢

#195 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » CH552 版 CMSIS-DAP v2 » 2021-07-24 14:50:55

因为CH552G买不到,使用了CH554,使用WCH工具,通过USB线下载了楼主的各个版本程序,都识别不到设备,(未知设备都没有)。以下是我的电路图纸:
DAP_link_Project.zip


http://103.47.82.49/share/DAP_link_Project.zip

麻烦各位大哥看看。

#197 Re: 全志 SOC » 发现淘宝有卖F1C100S源码的 » 2021-06-23 23:07:41

tdatd 说:

收藏一下,好像不支持视频硬解码吧?

支持的,不过是提供lib,不开源硬解部分。

#199 Re: 全志 SOC » 开源串口屏硬件,软件SDK,硬件图纸全开源,2.8寸屏¥45含液晶触摸 » 2021-06-04 19:46:34

wsy0315 说:

妈的  就是个骗子!就当买教训了,大家也别吹捧了,我买的是组态屏,还的自己烧录引导怎么得,骗子

我买回来当开发版,哈哈,用起来了。

#200 Re: Nuvoton N32905/N32926/NUC972/N9H20/N9H26/N9H30 » NUC972裸机的IAP升级怎么做的?求指导 » 2021-06-04 19:44:55

哇酷小二 说:

你也可以用 uboot(或者其他loader) + app + filesystem 这种方式。

APP进入IAP刷机,可以先写标识位,然后强行进入uboot刷机。

先做一个bootloader,bootloader可以指定加载flash里面的任意内容到内存,我们只要在flash不同区域存放不同的APP就可以了。
bootloader根据标志,进行选择加载。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn