OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9740|回复: 23

自己做的往战舰Q25W128里写文件的小软件 加字库测试【软件更新20160122】

[复制链接]

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
发表于 2016-1-21 15:56:39 | 显示全部楼层 |阅读模式
本帖最后由 lujiashun1 于 2016-1-22 22:56 编辑

最近玩LCD,想把字库写入到板载的Q25W128里,用串口助手发送然后在接收中断里写入芯片会丢失很多数据,写入过程耗时比较长,于是自己用C#编了个小软件往该芯片里写数据,每次接收4096个,存入后再传下一组。
1、首先将  写字库到Q25W128文件夹的工程(在spi实验的基础上修改而成)下载到板子里,。

2、打开软件,点击 查找串口,自动查找可用串口,如果有点击打开文件并选择要写入的文件,然后填写写入Q25W128的起始地址,点击写入,会弹出确认信息,确定开始写入,取消不写入,等待写入完成。
106.png
然后就可以用了
templete工程是自己编的LCD显示字库程序(4.3寸)字符直接放在font.h里 汉字读取Q25W128的数据然后显示(之前已经把HZK12  HZK16 HZK24写入到芯片里)。
102.png
104.png
战舰文件写入.rar (9.03 MB, 下载次数: 3038)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-21 16:29:36 | 显示全部楼层
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2016-1-21 17:39:47 | 显示全部楼层
大神 不过我一般用 SSCOM   的文件传输功能 传
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2016-1-21 17:53:24 | 显示全部楼层
simms01 发表于 2016-1-21 17:39
大神 不过我一般用 SSCOM   的文件传输功能 传

我用两个串口软件互相传送文件试了试  不行  每次接受到的数据个数都不一样     我这个是每次传送4096个字节  然后存储  再传送下一批 直到传完
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2016-1-21 17:58:53 | 显示全部楼层
simms01 发表于 2016-1-21 17:39
大神 不过我一般用 SSCOM   的文件传输功能 传

105.png 发送和接收的不一样,网上说往这些eeprom里写数据也会丢失,估计跟数据量大有关。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-1-21
在线时间
10 小时
发表于 2016-1-21 20:21:16 | 显示全部楼层
        private void button1_Click(object sender, EventArgs e)
        {
            MyInvoke invoke = new MyInvoke(this.Updatetextbox);
            try
            {
                int offset = 0;
                FileInfo info = new FileInfo(this.textBox2.Text);
                long length = info.Length;
                FileStream stream = new FileStream(this.textBox2.Text, FileMode.Open);
                byte[] buffer = new byte[length];
                stream.Read(buffer, 0, (int) length);
                stream.Close();
                this.textBox1.Text = length + "  ";
                this.serialPort1.PortName = this.textBox3.Text;
                this.serialPort1.Open();
                this.textBox1.Text = "串口打开!。。。\r\n";
                this.textBox1.Text = this.textBox1.Text + "写入命令。。。\r\n";
                this.serialPort1.Write(length + "\r\n");
                this.textBox1.Text = this.textBox1.Text + "写入命令完成,等待应答!。。。\r\n";
                this.Refresh();
                this.textBox1.Focus();
                this.textBox1.Select(this.textBox1.TextLength, 0);
                this.textBox1.ScrollToCaret();
                while (this.serialPort1.BytesToRead == 0)
                {
                    this.Refresh();
                }
                if (this.serialPort1.ReadTo("\r\n") == "start")
                {
                    this.textBox1.Text = this.textBox1.Text + "接收到应答!。。。\r\n";
                    this.textBox1.Focus();
                    this.textBox1.Select(this.textBox1.TextLength, 0);
                    this.textBox1.ScrollToCaret();
                    while (offset < length)
                    {
                        if (((length - offset) / 0x1000L) >= 1L)
                        {
                            this.textBox1.Text = this.textBox1.Text + "准备写入4096个字节!。。。\r\n";
                            this.textBox1.Focus();
                            this.textBox1.Select(this.textBox1.TextLength, 0);
                            this.textBox1.ScrollToCaret();
                            this.serialPort1.Write(buffer, offset, 0x1000);
                            this.textBox1.Text = this.textBox1.Text + "写入4096个字节完成,等待确认!。。。\r\n";
                            this.Refresh();
                            this.textBox1.Focus();
                            this.textBox1.Select(this.textBox1.TextLength, 0);
                            this.textBox1.ScrollToCaret();
                            while (this.serialPort1.BytesToRead == 0)
                            {
                                this.Refresh();
                            }
                            if (this.serialPort1.ReadTo("\r\n") == "startnext")
                            {
                                this.textBox1.Text = this.textBox1.Text + "stm32存储完成,进行下面数据存储!。。。\r\n";
                                this.textBox1.Focus();
                                this.textBox1.Select(this.textBox1.TextLength, 0);
                                this.textBox1.ScrollToCaret();
                                offset += 0x1000;
                            }
                        }
                        else
                        {
                            object text = this.textBox1.Text;
                            this.textBox1.Text = string.Concat(new object[] { text, "准备写入最后", length - offset, "个字节!。。。\r\n" });
                            this.serialPort1.Write(buffer, offset, ((int) length) - offset);
                            this.textBox1.Text = this.textBox1.Text + "写入最后字节完成,等待确认!。。。\r\n";
                            this.Refresh();
                            this.textBox1.Focus();
                            this.textBox1.Select(this.textBox1.TextLength, 0);
                            this.textBox1.ScrollToCaret();
                            while (this.serialPort1.BytesToRead == 0)
                            {
                                this.Refresh();
                            }
                            if (this.serialPort1.ReadTo("\r\n") == "complete")
                            {
                                this.textBox1.Text = this.textBox1.Text + "stm32存储完成!。。。\r\n";
                                this.textBox1.Focus();
                                this.textBox1.Select(this.textBox1.TextLength, 0);
                                this.textBox1.ScrollToCaret();
                                offset += 0x1000;
                                break;
                            }
                        }
                        this.textBox1.Focus();
                        this.textBox1.Select(this.textBox1.TextLength, 0);
                        this.textBox1.ScrollToCaret();
                    }
                }
                this.serialPort1.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2016-1-21 20:26:52 | 显示全部楼层
1M欧电阻 发表于 2016-1-21 20:21
private void button1_Click(object sender, EventArgs e)
        {
            MyInvoke invo ...

脱壳工具吗
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-1-6
在线时间
60 小时
发表于 2016-1-22 09:32:13 | 显示全部楼层

不错的工具。
C#的反编译工具有好多的,比如这个ILSpy_Master,你可以去搜一下。
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2016-1-22 14:17:44 | 显示全部楼层
lujiashun1 发表于 2016-1-21 17:58
发送和接收的不一样,网上说往这些eeprom里写数据也会丢失,估计跟数据量大有关。

我2个sscom 互发 数据量是一致的 呵  

以前用单片机 51 发115200 存flash也没丢数据  呵 估计是2个串口工具参数不一致的问题
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2016-1-22 17:49:03 | 显示全部楼层
simms01 发表于 2016-1-22 14:17
我2个sscom 互发 数据量是一致的 呵  

以前用单片机 51 发115200 存flash也没丢数据  呵 估计是2个串 ...

我用助手试了试 不加写Q25W128接收到的个数没问题 加上后就不行了 收到很少一部分
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2016-1-23 10:55:32 | 显示全部楼层
lujiashun1 发表于 2016-1-22 17:49
我用助手试了试 不加写Q25W128接收到的个数没问题 加上后就不行了 收到很少一部分

原因是你的stm32接受的时候没有用 双缓冲机制  ,丢包了  。 如果用sscom+双缓冲机制 传输的速度比你现在的快
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2016-1-23 10:55:35 | 显示全部楼层
本帖最后由 simms01 于 2016-1-23 11:01 编辑
lujiashun1 发表于 2016-1-22 17:49
我用助手试了试 不加写Q25W128接收到的个数没问题 加上后就不行了 收到很少一部分


原因是你的stm32接受的时候没有用 双缓冲机制  ,丢包了  。 如果用sscom+双缓冲机制 传输的速度比你现在的快
大概原理是:

buf[页大小*2]  //如果flash很慢 还可以考虑建立4缓冲机制


串口中断
收到的数 直接写buf 而不是写flash 如果写满了 从buf[0]从新写

主循环
while(1)
{
  if 计数=页大小  写入一页
=页大小*2 再写入1页

}

这样 电脑一直处于数据发送 stm32一直处于数据接收  速度达到最快
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2016-1-23 13:00:02 | 显示全部楼层
simms01 发表于 2016-1-23 10:55
原因是你的stm32接受的时候没有用 双缓冲机制  ,丢包了  。 如果用sscom+双缓冲机制 传输的速度比你现 ...

有空试试 谢谢
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2016-1-23 13:30:31 | 显示全部楼层
simms01 发表于 2016-1-23 10:55
原因是你的stm32接受的时候没有用 双缓冲机制  ,丢包了  。 如果用sscom+双缓冲机制 传输的速度比你现 ...

试了试 貌似没问题
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-1-23 18:57:44 | 显示全部楼层
不错,cool。  弩哥的头像很屌啊....
回复 支持 反对

使用道具 举报

9

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2011-7-11
在线时间
49 小时
发表于 2016-1-23 20:00:54 | 显示全部楼层
...................
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2016-1-24 13:22:07 | 显示全部楼层
正点原子 发表于 2016-1-23 18:57
不错,cool。  弩哥的头像很屌啊....

弩哥这两季没什么表现 之前风头很大
回复 支持 反对

使用道具 举报

6

主题

23

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2014-5-11
在线时间
12 小时
发表于 2017-7-19 15:19:17 | 显示全部楼层
兄弟你好呀,你能帮改一下这个上位机吗,让它能多支持几种型号呀,这个东西不错,但是不是每个人都用128这个型号的呀
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2017-7-19 18:03:51 | 显示全部楼层
FVTech 发表于 2017-7-19 15:19
兄弟你好呀,你能帮改一下这个上位机吗,让它能多支持几种型号呀,这个东西不错,但是不是每个人都用128这 ...

跟上位机没关系
回复 支持 反对

使用道具 举报

6

主题

23

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2014-5-11
在线时间
12 小时
发表于 2017-7-19 23:14:14 | 显示全部楼层

那估计是不管芯片直接往里写了,那么那个写入地址可以自己指定从某个地址开始写吗?
提供:红外学习芯片、模块;315M、433M无线学习芯片、模块;MP3语音芯片、模块;更多产品和详情请光临我的淘宝小店http://shop109337654.taobao.com;欢迎大家交流学习指导。
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-12-22
在线时间
17 小时
发表于 2017-7-20 08:22:33 | 显示全部楼层
看着不错
回复 支持 反对

使用道具 举报

14

主题

82

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2014-12-11
在线时间
64 小时
 楼主| 发表于 2017-7-20 11:40:06 | 显示全部楼层
FVTech 发表于 2017-7-19 23:14
那估计是不管芯片直接往里写了,那么那个写入地址可以自己指定从某个地址开始写吗?

嗯   源码地址都换算好了  只要跟他换算的一样就可以
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-11-30
在线时间
5 小时
发表于 2019-12-1 10:17:09 | 显示全部楼层
不错不错,我试验成功了@lujiashun1,可是ALIENTEK_战舰板字库更新_支持综合例程怎么折腾都图样图破
回复 支持 反对

使用道具 举报

0

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2014-9-18
在线时间
21 小时
发表于 2020-5-9 17:40:35 | 显示全部楼层
不错不错,下载学习学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 06:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表