您尚未登录。

#1 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支持越来越丰富了。

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

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

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

vasill 说:

跟STM32比有什么优势吗?

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

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

cris8259 说:

付费购买,欢迎大佬共享

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

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

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

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

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

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

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

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

Gentlepig 说:

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

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

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

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

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

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

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

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

#17 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);

#18 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

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

#19 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'.

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

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

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

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

#22 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/

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

as86455011 说:

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

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

#25 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主要是多了负压、高压这些。

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

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

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

wakulgz 说:

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

AWTK YYDS

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

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

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

bonito 说:

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

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

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

wenjiu 说:

楼主,启动速度要多久?

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

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

zzy 说:

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

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

#33 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

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

jiabuda 说:

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

用usb adb,论坛里有。

#36 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的手册。

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

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

#39 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

#40 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!

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

zenghc 说:

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

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

#42 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,直接刷。

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

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

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

wj8331585 说:

宝贝还在,却实太贵了

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

#45 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

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

Jkkk 说:

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

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

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

Jkkk 说:

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

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

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

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

#49 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,有人跑裸机。。。

#50 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

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

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

#53 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...

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

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

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

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

#56 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(可能会失效)

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

吴助建 说:

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

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

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

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

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

bigbat 说:

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

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

#61 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);
            }

        }

#62 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

#63 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进制数据");
                }
            }
   
        }

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

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

#66 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),
请问您知道是什么原因导致的吗?

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

benlypan 说:

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

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

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

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

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

yobbo 说:

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

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

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

hhy 说:

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

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

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

mind 说:

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

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

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

47272078 说:

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

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

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

达子666 说:
哇酷小二 说:

buildroot 的 make menuconfig 直接勾选 freetype 呢?

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

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

#75 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

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

lottefang 说:

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

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

小淘气科技店铺

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

迪卡 说:

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

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

#80 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接口

#81 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是点灯的,偶尔还是会乱闪,一瞬间的事情,被下一帧刷掉就好了)

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

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

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

九重天 说:

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

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

#85 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

#86 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官方网站

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

LinjieGuo
回复: 9

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

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

就这样吧 说:

资料全不

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

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

nufing 说:

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

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

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

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

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

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

#94 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进行多路选一避免干扰,加一个引脚进行片选就好了。

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

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

#96 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字样已经出来了,说明编译环境基本上已经搭建好了。

#97 全志 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

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

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

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

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

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

就是小白了 说:

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

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

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

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

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

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

#102 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

#103 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

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

xboot 说:

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

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

#105 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数据位

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

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

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

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

xboot 说:

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

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

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

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

#109 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。

#110 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发送出去就可以了。

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

xboot 说:

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

#112 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的驱动代码!

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

inia 说:

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

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

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

bigbat 说:

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

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

#116 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);

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

mapleft 说:

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

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

#118 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开销。

#119 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个字节

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

stb 说:

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

啊,这......

#121 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

#122 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

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

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

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

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

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

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

#128 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卡

#129 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 />

#130 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目录

#131 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);
		 }
	}

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

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

#133 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)编译,修饰,烧写。

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

work11 说:

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

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

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

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

#136 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.

#137 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

#138 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

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

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

#140 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"

#141 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 */

#142 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

#143 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脚本,干脆这样干了,~~笑~~)

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

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

#145 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.

#146 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

#147 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

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

#148 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 中。

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

jhon 说:

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

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

#152 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);
            }
        }
    }
}

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

jordonwu 说:

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

就是RT-Thread不是rt smart

#154 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

#155 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 使用的引脚情况是一致的。
找不到红色字的原因,只好先放下他。先看看其他东西怎么玩!

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

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

#157 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条红色的错误依然醒目,得看看是什么原因导致的。

#158 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卡,还是这个样子,怀疑是板子引脚不匹配导致的。

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

LinjieGuo
回复: 54

最近画了块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(右键另存为)

#160 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

#161 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

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

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

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

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

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

aozima 说:

ITX-190 是啥?

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

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

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

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

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

#167 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
如果大神们不好诊断,明天,我可以用其他单板实现这个框架,发代码出来。

#168 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

#169 计算机图形/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()函数的调用打印。

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

huangkun 说:

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

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

#172 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版本修改电路图。兄弟们有什么需求可以提出来。尽量满足!

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

dgtg 说:

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

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

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

CHSHIQING 说:

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

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

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

sck852414902 说:

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

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

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

touchey 说:

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

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

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

aozima 说:

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

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

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

aozima 说:

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

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

#180 全志 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

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

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

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

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

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

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

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

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

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

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

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

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

cube 说:

电脑显示正常吗?

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

#190 全志 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开发经验较少,请问各位路过的大哥,这是什么原因,应该如何做呢

#192 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

麻烦各位大哥看看。

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

tdatd 说:

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

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

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

wsy0315 说:

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

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

#197 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根据标志,进行选择加载。

#198 Re: 全志 SOC » V3S 成功运行dotnet core 5.0 » 2021-05-18 13:53:30

Meekdai 说:

从dotnet core 2.1起,官方就发布了关于arm的支持,但是不是支持ARMv6以及更早的 CPU 指令集版本,而V3S的cortex-A7是可以运行的,所以在论坛里找了一下,发现有一个帖子进行了尝试,但是遇到了ICU的问题就没有下文了,这里我分享一下我的过程。

1、编译V3S的buildroot,用的晕哥的配置,烧录到V3S后,确保可以正常运行。
2、去官网下载dotnet core 的对应版本https://dotnet.microsoft.com/ ,我这里下的是5.0的最新版本。
3、解压下载的包,拷贝到一张TF卡上,因为上百M的文件无法放入spiflash内。
4、在本地电脑上预先编译发布一个可以在arm上运行的应用程序,可以下载我的helloworld.
5、拷贝publish文件到TF卡内。
6、插入TF卡,给V3S上电。
7、挂载TF卡,mount /dev/mmcblk0 /mnt/mmc
8、运行一下dotnet --info,如果报ICU找不到的错,再运行一下export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
9、cd到对应目录,执行./publish/hello_world。

# ./publish/hello_world
Hello World!
你好世界!

附件:
publish.zip
buildroot-2018.08.2-v3s.zip

ICU问题解决链接:
https://github.com/dotnet/core/issues/2186#issuecomment-671105420

哈哈,我被ICU困住了

#199 Re: 全志 SOC » Bringup New F1C100S board No SD-CLK Signal » 2021-05-13 16:18:25

piyush 说:

Hi everyone ,

I design a new PCB with reference of lichee Pi Schematic, but I removed SPI Flash as I don't need to boot from SPI Flash.
After soldering  board  I can't see signal on SDClock, But can see on SPI Flash Clock.

Unfortunately I also not reserve usb connector, as my idea was to flash sdcard pc side and boot the board.

Crystal is oscillating.

So with default boot form F1C100s it will not attempt to boot from SD ?
Any suggestion how to move forward ?

If no option, possibly I need to make new pcb with USB & SPI Flash.

嗨,大家好,

我参考lichee Pi Schematic设计了一个新的PCB,但由于不需要从SPI Flash引导,因此删除了SPI Flash。
焊完板后,我在SDClock上看不到信号,但在SPI闪存时钟上却看到了。

不幸的是,我也不保留USB连接器,因为我的想法是在sdcard pc侧进行闪存并启动开发板。

晶体振荡。

因此,使用默认引导形式F1C100s,它将不会尝试从SD引导吗?
任何建议如何前进?

如果没有选择,可能我需要使用USB和SPI Flash制作新的PCB

Thanks & Regards
PV

如果我没记错的话,是优先从SD卡启动的。是不是SD卡中没有正确的引导程序呢?

#200 Re: 全志 SOC » 发现全志上线了官方的淘宝店 » 2021-04-28 23:02:46

有了。
R329是全志科技针对智能语音旗舰市场推出的一款高集成度SoC,搭载双核A53 1.5G CPU,内置双核400MHz HiFi4 和 800MHz AIPU 0.25TOPS,可以满足各种智能语音产品的需求 。

页脚

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

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