找回密码
 立即注册
楼主: 13918***

IO模拟一种2线接口(类似I2C, 但略有不同),请问一个细节如何实现为好

[复制链接]

该用户从未签到

1

主题

119

回帖

657

积分

高级会员

积分
657
发表于 2023-12-12 20:52:44 | 显示全部楼层
把主频设为36M,WTST = 0试试

点评

STC32F12K54建议最高主频跑 52MHz 以下 STC32F12K54, 由于 iCache的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1; 时钟不要高于52MHz, 这个STC32F是我们首次使用iCache 的 MCU, 还在改进中,会发展到 CPU@200MHz   发表于 2023-12-13 11:59
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
 楼主| 发表于 2023-12-13 10:09:41 | 显示全部楼层
社区闲人 发表于 2023-12-12 18:12
用STCH8K64U会更好,使用40MHZ外部晶振。

STC8H8K虽然是8位, GPIO的翻转速率实际能到多少? 是否有经验数据?
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
 楼主| 发表于 2023-12-13 10:10:37 | 显示全部楼层
zxcv1973 发表于 2023-12-12 20:46
这么高的频率,CLK应该设为推挽输出

实际测试, 打开smith触发器情况下, 由于接收端输入阻抗比较大, 准双向和推挽对于波形和速率均无差异
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
 楼主| 发表于 2023-12-13 10:16:59 | 显示全部楼层
本帖最后由 13918210822 于 2023-12-13 10:40 编辑
zxcv1973 发表于 2023-12-12 20:52
把主频设为36M,WTST = 0试试

之前测试, WTST=0, 最高实际测试能跑到32M, 超过后MCU内核不启动.
偶尔启动,不到1s跑飞.

由于看手册GPIO SFR赋值是单周期. 但是实际上只有理论速度1/10左右.
所有,我想找到原因. 看看是否可以优化.

手册中IO速度

手册中IO速度

点评

STC32F12K54建议最高主频跑 52MHz 以下 STC32F12K54, 由于 iCache的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1; 时钟不要高于52MHz, 这个STC32F是我们首次使用iCache 的 MCU, 还在改进中,会发展到 CPU@200MHz   发表于 2023-12-13 11:59
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 172 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1363

    积分

    荣誉版主

    积分
    1363
    发表于 2023-12-13 10:45:59 | 显示全部楼层
    13918210822 发表于 2023-12-13 10:09
    STC8H8K虽然是8位, GPIO的翻转速率实际能到多少? 是否有经验数据?

    2019年时,我用刚刚出来的stc8h1k08做类似案子,IO口模拟SPI,4MHZ完成通信。使用32MHZ外部晶振。
    现在STC8H8K64U的频率可达45MHZ, IO口模拟SPI,可实现5MHZ以上的速率完成通信。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    119

    回帖

    657

    积分

    高级会员

    积分
    657
    发表于 2023-12-13 10:58:05 | 显示全部楼层
    13918210822 发表于 2023-12-13 10:16
    之前测试, WTST=0, 最高实际测试能跑到32M, 超过后MCU内核不启动.
    偶尔启动,不到1s跑飞.

    把P45 ^= 1改为P45 = ~P45
          

    点评

    STC32F12K54建议最高主频跑 52MHz 以下 STC32F12K54, 由于 iCache的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1; 时钟不要高于52MHz, 这个STC32F是我们首次使用iCache 的 MCU, 还在改进中,会发展到 CPU@200MHz   发表于 2023-12-13 11:59
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 172 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1363

    积分

    荣誉版主

    积分
    1363
    发表于 2023-12-13 11:15:44 | 显示全部楼层
    不要迷信带ICache的高主频MCU。尤其是STM32F103之类.
    在IO翻转之类应用中,用8位机是最优选择。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    5

    主题

    89

    回帖

    405

    积分

    中级会员

    积分
    405
     楼主| 发表于 2023-12-13 11:54:00 | 显示全部楼层
    zxcv1973 发表于 2023-12-13 10:58
    把P45 ^= 1改为P45 = ~P45

    看了一个反汇编, 感觉有戏, 稍后好好测试一下.

    ; line 100:         P45 = 1;
            SETB     P45
    ; line 101:
    ; line 102: SETSMCK:
    SETSMCK:
            CPL      P45                        ; Cycle 1
    ; line 103: //        P45 ^= 1;
    ; line 104:     P45 = ~P45;   
    ; line 105:         _nop_();
            NOP                                      ; Cycle 1, seize for sda cycle.
    ; line 106: //        _nop_();
    ; line 107: //        _nop_();
    ; line 108: //        _nop_();
    ; line 109:         goto SETSMCK;
            SJMP     SETSMCK                ; Cycle 2, Total 4 Cycles in single loop
                   

    ; line 100:         P45 = 1;
            SETB     P45
    ; line 101:
    ; line 102: SETSMCK:
    SETSMCK:
            MOV      C,P45                        ; Cycle 2
            CPL      C                                ; Cycle 1
            MOV      P45,C                        ; Cycle 2
    ; line 103:         P45 ^= 1;
    ; line 104: //    P45 = ~P45;   
    ; line 105:         _nop_();
            NOP                                      ; Cycle 1
    ; line 106: //        _nop_();
    ; line 107: //        _nop_();
    ; line 108: //        _nop_();
    ; line 109:         goto SETSMCK;
            SJMP     SETSMCK                ; Cycle 2, Total Cycle 8 in single loop.
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    5

    主题

    89

    回帖

    405

    积分

    中级会员

    积分
    405
     楼主| 发表于 2023-12-13 12:00:22 | 显示全部楼层
    社区闲人 发表于 2023-12-13 11:15
    不要迷信带ICache的高主频MCU。尤其是STM32F103之类.
    在IO翻转之类应用中,用8位机是最优选择。 ...

    有空找个STC8H 8位开发板实际测试下, 但是,按照我对硬件的理解,IO速度在那里(如果规格书的数据是准确的),制约应该在Core上的指令序列和总线之类的。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9497

    回帖

    1万

    积分

    管理员

    积分
    14069
    发表于 2023-12-13 12:00:28 | 显示全部楼层
    I/O的速度最快 20MHz ~ 30MHz
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 23:03 , Processed in 0.075882 second(s), 71 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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