86

帖子

0

TA的资源

一粒金砂(初级)

41
 
有进展了,我把唤醒的地址该在RAM区(以前在NK的区域,不合理)

SLEEPDATA_BASE_VIRTUAL          EQU        0xAC028000                ; keep in sync w/ config.bib
;SLEEPDATA_BASE_VIRTUAL          EQU        0xA0028000                ; keep in sync w/ config.bib
;SLEEPDATA_BASE_PHYSICAL         EQU        0x30028000
SLEEPDATA_BASE_PHYSICAL         EQU        0x3C028000——bootloader也对应修改,

不会再跳到BringUpWinCE了,但是却在下面跳到唤醒处的时候死掉了。xajhuang 老兄,你的后来怎么改了?想问你要代码的心都有了,搞了两三天,就这点进展


;   What happen here? dead here
;   3. Jump to Kernel Image's fw.s (Awake_address)
        mov     pc, r7                          ;  jump to new VA (back up Power management stack)

从上面的说明可以看出,还可以把这个地址放到NK的启动地址。你们是什么地址的。

2.bootloader中停止sdram的自刷新模式,然后跳到内核开始地址.有些bootloader会做的更多,因为前面我们把数据都保存到了ram中的某处,事实上只要知道这个ram地址就可以取得数据进入唤醒过程.所以有些bootloader会直接去唤醒.我认为这并不好,增加了bootloader的依赖性,层次间的耦合性也高了.

——我试试


回复

70

帖子

0

TA的资源

一粒金砂(初级)

42
 
;   What happen here? dead here
;   3. Jump to Kernel Image's fw.s (Awake_address)
;        mov     pc, r7                          ;  jump to new VA (back up Power management stack)
;        nop

郁闷,我把上面的改成下面的从NK地址启动也不行,真是无计可施了。我看别人的博客都是这么做的。现在不知道怎么找原因了。
;   Jump to Nk Start address
          ldr     r2, =0x200000              ; offset into the RAM
      add     r2, r2, #0x30000000        ; add physical base
      mov     pc, r2                     ; & jump to StartUp address
      nop
      nop
      nop
      b .
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

43
 
我给你贴代码好了
[code]
SLEEPDATA_BASE_VIRTUAL          EQU        0xA0028000                ; keep in sync w/ config.bib
SLEEPDATA_BASE_PHYSICAL         EQU        0x30028000
/* 我得MMU映射表如下
g_oalAddressTable
DCD     0x80000000, 0x30000000, 64      ; 32 MB DRAM BANK 6

config.bib 中保留内存地址
SLEEP                                80028000  00002000        RESERVED
*/

LEAF_ENTRY OALCPUPowerOff
;       1. Push SVC state onto our stack
        stmdb   sp!, {r4-r12}                  
        stmdb   sp!, {lr}

;       2. Save MMU & CPU Register to RAM
            ldr     r3, =SLEEPDATA_BASE_VIRTUAL     ; base of Sleep mode storage

// 这里把需要保存的休眠数据保存到内存中
        ldr     r2, =Awake_address              ; store Virtual return address
        str     r2, [r3], #4

        mrc     p15, 0, r2, c1, c0, 0           ; load r2 with MMU Control
        ldr     r0, =MMU_CTL_MASK               ; mask off the undefined bits
        bic     r2, r2, r0
        str     r2, [r3], #4                    ; store MMU Control data

        mrc     p15, 0, r2, c2, c0, 0           ; load r2 with TTB address.
        ldr     r0, =MMU_TTB_MASK               ; mask off the undefined bits
        bic     r2, r2, r0
        str     r2, [r3], #4                    ; store TTB address

        mrc     p15, 0, r2, c3, c0, 0           ; load r2 with domain access control.       
        str     r2, [r3], #4                    ; store domain access control


        str     sp, [r3], #4                    ; store SVC stack pointer

        mrs     r2, spsr
        str     r2, [r3], #4                    ; store SVC status register

        mov     r1, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; Enter FIQ mode, no interrupts
        msr     cpsr, r1
        mrs     r2, spsr
        stmia   r3!, {r2, r8-r12, sp, lr}       ; store the FIQ mode registers

        mov     r1, #Mode_ABT:OR:I_Bit:OR:F_Bit ; Enter ABT mode, no interrupts
        msr     cpsr, r1
        mrs                r0, spsr
        stmia   r3!, {r0, sp, lr}               ; store the ABT mode Registers

        mov     r1, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; Enter IRQ mode, no interrupts
        msr     cpsr, r1
        mrs     r0, spsr
        stmia   r3!, {r0, sp, lr}               ; store the IRQ Mode Registers

        mov     r1, #Mode_UND:OR:I_Bit:OR:F_Bit ; Enter UND mode, no interrupts
        msr     cpsr, r1
        mrs     r0, spsr
        stmia   r3!, {r0, sp, lr}               ; store the UND mode Registers

        mov     r1, #Mode_SYS:OR:I_Bit:OR:F_Bit ; Enter SYS mode, no interrupts
        msr     cpsr, r1
        stmia   r3!, {sp, lr}                   ; store the SYS mode Registers

        mov     r1, #Mode_SVC:OR:I_Bit:OR:F_Bit ; Back to SVC mode, no interrupts
        msr     cpsr, r1

;       3. do Checksum on the Sleepdata
        ldr     r3, =SLEEPDATA_BASE_VIRTUAL        ; get pointer to SLEEPDATA
        ldr     r2, =0x0
        ldr     r0, =(SLEEPDATA_SIZE-1)                ; get size of data structure (in words)
30
        ldr     r1, [r3], #4
        and     r1, r1, #0x1
        mov     r1, r1, ROR #31
        add     r2, r2, r1
        subs    r0, r0, #1
        bne     %b30
       
        ldr     r0, =vGPIOBASE
        str     r2, [r0, #oGSTATUS3]                ; Store in Power Manager Scratch pad register

;       4. Interrupt Disable
    ldr     r0, =vINTBASE
    mvn     r2, #0
        str     r2, [r0, #oINTMSK]
        str     r2, [r0, #oSRCPND]       
        str     r2, [r0, #oINTPND]

;;       5. Cache Flush
        bl                OALClearUTLB
        bl                OALFlushICache
        ldr     r0, = (DCACHE_LINES_PER_SET - 1)   
        ldr     r1, = (DCACHE_NUM_SETS - 1)   
        ldr     r2, = DCACHE_SET_INDEX_BIT   
        ldr     r3, = DCACHE_LINE_SIZE     
        bl                OALFlushDCache

        // 这里开始设置唤醒源
;       6. Setting Wakeup External Interrupt(EINT0,1,2) Mode
        ldr     r0, =vGPIOBASE

        ldr     r1, =0x550a
        str     r1, [r0, #oGPFCON]

;        ldr     r1, =0x55550100
;        str     r1, [r0, #oGPGCON]

;       7. Go to Power-Off Mode
        ldr         r0, =vMISCCR                        ; hit the TLB
        ldr                r0, [r0]
        ldr         r0, =vCLKCON
        ldr                r0, [r0]

        // 进入自刷新
        ldr     r0, =vREFRESH               
        ldr     r1, [r0]                ; r1=rREFRESH       
        orr     r1, r1, #(1 << 22)

        ldr         r2, =vMISCCR
        ldr                r3, [r2]
        orr                r3, r3, #(3<<17)        ; Make sure that SCLK0:SCLK->0, SCLK1:SCLK->0, SCKE=L during boot-up
        bic                r3, r3, #(7<<20)
        orr                r3, r3, #(6<<20)

        ldr     r4, =vCLKCON
        ldr     r5, =0x1ffff8            ; Power Off Mode       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Sometimes it is not working in cache mode. So I modify to jump to ROM area.
;
;;;        ldr                r6, =0x92000000                ; make address to 0x9200 0020
;;;        add                r6, r6, #0x20                ;
;;;        mov     pc, r6                                ; jump to Power off code in ROM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        b       SelfRefreshAndPowerOff

        ALIGN   32                      ; for I-Cache Line(32Byte, 8 Word)

SelfRefreshAndPowerOff                ; run with Instruction Cache's code
        str     r1, [r0]                ; Enable SDRAM self-refresh
        str          r3, [r2]                ; MISCCR Setting
        // 这里进入休眠
        str     r5, [r4]                ; Power Off !!               
        b       .

;;;        LTORG

; This point is called from EBOOT's startup code(MMU is enabled)
;       in this routine, left information(REGs, INTMSK, INTSUBMSK ...)

Awake_address       
;       1. Recover CPU Registers       
        // 注意这里是在WinCE下运行的,所以用的是 UNCACHE 的虚拟地址 0xAC.......
        // 设置了每一种模式的堆栈和中断
        ldr     r3, =SLEEPDATA_BASE_VIRTUAL                ; Sleep mode information data structure
        add     r2, r3, #SleepState_FIQ_SPSR
        mov     r1, #Mode_FIQ:OR:I_Bit:OR:F_Bit                ; Enter FIQ mode, no interrupts - also FIQ
        msr     cpsr, r1
        ldr     r0,  [r2], #4
        msr     spsr, r0
        ldr     r8,  [r2], #4
        ldr     r9,  [r2], #4
        ldr     r10, [r2], #4
        ldr     r11, [r2], #4
        ldr     r12, [r2], #4
        ldr     sp,  [r2], #4
        ldr     lr,  [r2], #4

        mov     r1, #Mode_ABT:OR:I_Bit                        ; Enter ABT mode, no interrupts
        msr     cpsr, r1
        ldr     r0, [r2], #4
        msr     spsr, r0
        ldr     sp, [r2], #4
        ldr     lr, [r2], #4

        mov     r1, #Mode_IRQ:OR:I_Bit                        ; Enter IRQ mode, no interrupts
        msr     cpsr, r1
        ldr     r0, [r2], #4
        msr     spsr, r0
        ldr     sp, [r2], #4
        ldr     lr, [r2], #4

        mov     r1, #Mode_UND:OR:I_Bit                        ; Enter UND mode, no interrupts
        msr     cpsr, r1
        ldr     r0, [r2], #4
        msr     spsr, r0
        ldr     sp, [r2], #4
        ldr     lr, [r2], #4

        mov     r1, #Mode_SYS:OR:I_Bit                        ; Enter SYS mode, no interrupts
        msr     cpsr, r1
        ldr     sp, [r2], #4
        ldr     lr, [r2]

        mov     r1, #Mode_SVC:OR:I_Bit                                        ; Enter SVC mode, no interrupts - FIQ is available
        msr     cpsr, r1
        ldr     r0, [r3, #SleepState_SVC_SPSR]
        msr     spsr, r0

;       2. Recover Last mode's REG's, & go back to caller of OALCPUPowerOff()

        ldr     sp, [r3, #SleepState_SVC_SP]
        ldr     lr, [sp], #4
        ldmia   sp!, {r4-r12}

   
        mov     pc, lr                          ; and now back to our sponsors

 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

44
 
在Stepldr中

SLEEPDATA_BASE_PHYSICAL         EQU     0x30028000  // 和上面WinCE中的地址对应

  ; Resume handler code.
    ;
WAKEUP_POWER_OFF
    ; Release SCLKn after wake-up from the POWER_OFF mode.
    ldr                r1, =MISCCR
    ldr                r0, [r1]
    bic                r0, r0, #(7<<17) ; SCLK0:0->SCLK, SCLK1:0->SCLK, SCKE:L->H.
    str                r0, [r1]

    ; Set up the memory control registers.
    ;
    add     r0, pc, #SMRDATA - (. + 8)
    ldr                r1, =BWSCON             ; BWSCON Address.
    add                r2, r0, #52             ; End address of SMRDATA.
3      
    ldr                r3, [r0], #4   
    str                r3, [r1], #4   
    cmp                r2, r0               
    bne                %B3

        mov     r0, #0x2000
4
        subs    r0, r0, #1
        bne     %B4

;------------------------------------------------------------------------------
;   Recover Process : Starting Point
;
;   1. Checksum Calculation saved Data
        ldr     r5, =SLEEPDATA_BASE_PHYSICAL    ; pointer to physical address of reserved Sleep mode info data structure
        mov     r3, r5                          ; pointer for checksum calculation
        ldr     r2, =0x0
        ldr     r0, =(SLEEPDATA_SIZE-1)             ; get size of data structure to do checksum on
50       
        ldr     r1, [r3], #4                    ; pointer to SLEEPDATA
        and     r1, r1, #0x1
        mov     r1, r1, ROR #31
        add     r2, r2, r1
        subs    r0, r0, #1                      ; dec the count
        bne     %b50                            ; loop till done   

        ldr     r0,=GSTATUS3
        ldr     r3, [r0]                        ; get the Sleep data checksum from the Power Manager Scratch pad register
        cmp     r2, r3                          ; compare to what we saved before going to sleep
        bne     BringUpWinCE                    ; bad news - do a cold boot
   
;   2. MMU Enable
        ldr     r10, [r5, #SleepState_MMUDOMAIN] ; load the MMU domain access info
        ldr     r9,  [r5, #SleepState_MMUTTB]    ; load the MMU TTB info
        ldr     r8,  [r5, #SleepState_MMUCTL]    ; load the MMU control info
        ldr     r7,  [r5, #SleepState_WakeAddr ] ; load the LR address
        nop         
        nop
        nop
        nop
        nop

; if software reset
        mov     r1, #0
        teq     r1, r7
        bne     %f60
        b              BringUpWinCE

; wakeup routine
60        mcr     p15, 0, r10, c3, c0, 0          ; setup access to domain 0
        mcr     p15, 0, r9,  c2, c0, 0          ; PT address
        mcr     p15, 0, r0,  c8, c7, 0          ; flush I+D TLBs
        mcr     p15, 0, r8,  c1, c0, 0          ; restore MMU control

;   3. Jump to Kernel Image's fw.s (Awake_address)
        mov     pc, r7                          ;  jump to new VA (back up Power management stack)
        nop

BringUpWinCE
        ; bad news, data lose, bring up wince again
        mov         r0, #2
        ldr                r1, =GSTATUS2
        str                r0, [r1]
       
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

45
 
这样算来,我就少了这个啊

config.bib 中保留内存地址
SLEEP 80028000  00002000 RESERVED


还有你的bootloader nboot部分修改了吗?

谢谢了。等下试试。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

46
 
Stepldr中使用物理地址
WinCE中使用UNCACHE的虚拟地址,并且保证两个地址的物理地址一致。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

47
 
引用 44 楼 gooogleman 的回复:
这样算来,我就少了这个啊

config.bib 中保留内存地址
SLEEP 80028000  00002000 RESERVED


还有你的bootloader nboot部分修改了吗?

谢谢了。等下试试。



我的config.bib 也有。SLEEP 80028000  00002000 RESERVED

但是我照你的做就会跑到 BringUpWinCE去了,真是不知道怎么回事了。

我如果把bootloader和改为 RAM区域的0x3c028000就不会到BringUpWinCE。
但是在
;  What happen here? dead here
;  3. Jump to Kernel Image's fw.s (Awake_address)
; mov    pc, r7                          ;  jump to new VA (back up Power management stack)
; nop
就死掉了。

你还改了什么地方?

实在不行,我明天用比较软件比较一下。真邪门。三星提供的BSP本来就有这段了,只是0x3c028000和0x30028000这里修改即可吧。

比较郁闷。我两个都试了,但是都失败了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

48
 
关注。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

49
 
昨晚有人提供了一个成功的例子,发现只有如下区别。

我的进入休眠是这样
ldr     r4, =vCLKCON
ldr     r5, =0x1ffff8            ; Power Off Mode


b       SelfRefreshAndPowerOff

        ALIGN   32                      ; for I-Cache Line(32Byte, 8 Word)

SelfRefreshAndPowerOff                ; run with Instruction Cache's code
        str     r1, [r0]                ; Enable SDRAM self-refresh
        str                r3, [r2]                ; MISCCR Setting
        str     r5, [r4]                ; Power Off !!——设置vCLKCON寄存器
        b       .

别人成功的是这样,


ldr     r4, =vCLKCON
ldr     r5, =0x1ffff8            ; Power Off Mode

;                8. Jump to real Power-Off Address
        ldr                r6, =0x80000000                ; make address to 0x8020 1020
        add                r6, r6, #0x200000        ;
        add                r6, r6, #0x1000                ;
        add                r6, r6, #0x20                ;
        mov     pc, r6                                ; jump to Power off code in ROM

经过比较就会发现,我的那上面的代码才是真正进入了休眠。

后面他们的根本没有设置进入休眠的vCLKCON,何来休眠?我觉得这个比较荒唐。不知道他们是怎么搞的?xajhuang 老兄,莫非你的也是和他们这样“休眠”的?我觉得他们这样只是关闭背光等等而已。你能帮我解释一下吗?因为有好几个人都是这样休眠的。



 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

50
 
这里设置了r0为寄存器地址,r1 为数据,作用是使SDRAM进入自刷新模式,但是这里并没有直接生效,只是在寄存器中保存了适当的值
ldr    r0, =vREFRESH
ldr    r1, [r0] ; r1=rREFRESH
orr    r1, r1, #(1 < < 22)
这里设置了r2为寄存器,r3为数据,作用是配置休眠使的时钟信息
ldr r2, =vMISCCR
ldr r3, [r2]
orr r3, r3, #(3 < <17)        ; Make sure that SCLK0:SCLK->0, SCLK1:SCLK->0, SCKE=L during boot-up
bic r3, r3, #(7 < <20)
orr r3, r3, #(6 < <20)
这里r4为寄存器地址,r5为数据,将CLKCON[3]置1表示进入休眠,同理,这里也只是配置了数据,并没有把数据写到寄存器
ldr    r4, =vCLKCON
ldr    r5, =0x1ffff8            ; Power Off Mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Sometimes it is not working in cache mode. So I modify to jump to ROM area.
;
;;; ldr r6, =0x92000000 ; make address to 0x9200 0020
;;; add r6, r6, #0x20 ;
;;; mov    pc, r6 ; jump to Power off code in ROM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

b      SelfRefreshAndPowerOff

ALIGN  32                      ; for I-Cache Line(32Byte, 8 Word)
这里调用子函数实现休眠模式下数据的保存,只有保存数据后才能进入休眠模式
SelfRefreshAndPowerOff ; run with Instruction Cache's code
下面3句才真正把刚才配置的寄存器值写入寄存器实现休眠
str    r1, [r0] ; Enable SDRAM self-refresh
str   r3, [r2] ; MISCCR Setting
        // 这里进入休眠
str    r5, [r4] ; Power Off !!
b      .

 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

51
 
这里调用子函数实现休眠模式下数据的保存,只有保存数据后才能进入休眠模式
上面这句注释是错的,去掉。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

52
 
那我的和你根本没有区别了。郁闷起不来。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

53
 
要不你把东西给我,我给你调
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

54
 
楼主可以把调试串口关了试试。。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

55
 
引用 48 楼 gooogleman 的回复:
SelfRefreshAndPowerOff ; run with Instruction Cache's code
str    r1, [r0] ; Enable SDRAM self-refresh
str r3, [r2] ; MISCCR Setting
str    r5, [r4] ; Power Off !!——设置vCLKCON寄存器
b      .

别人成功的是这样,


ldr    r4, =vCLKCON
ldr    r5, =0x1ffff8            ; Power Off Mode
; 8. Jump to real Power-Off Address
ldr r6, =0x80000000 ; make address to 0x8020 1020
add r6, r6, #0x200000 ;
add r6, r6, #0x1000 ;
add r6, r6, #0x20 ;
mov    pc, r6 ; jump to Power off code in ROM



后来仔细看了一下这个0x8020 1020 地址刚好是SelfRefreshAndPowerOff 的地址,
我用这种方法,能够唤醒了。

后来我把sleep 地址设成 0x30028000 bootloader和OAL都对上,

就可以唤醒了

现在还有些问题,一旦插入网线,唤醒之后就会死机。

即使不插入网线,唤醒之后有时候会运行很慢,并且 访问flash产生ECC错误。

看来必须重新初始化flash才行,

我的BSP很多东西都没有考虑到,我看别人很多代码的。现在慢慢加上去。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

56
 
那还是你休眠有问题,还有可能就是注册表配置有问题。2440 WinCE 5.0 唤醒的时候不需要初始化Flash的
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

57
 
非常感谢各位的帮忙哈哈,

尤其是xajhuang ,估计看到我这样都快生气了,(*^__^*) 嘻嘻……

终于休眠唤醒成功了。


重新初始化flash之后,唤醒之后慢的问题解决了。

不过还有几个BUG

一、插入网线,唤醒立即死机。我觉得是网卡驱动问题,有待改进

二、频繁休眠唤醒偶尔会死机,不知道什么原因

三、休眠唤醒之后 鼠标不能动了。估计是USB驱动问题,有待解决。

我这里有个疑问,为什么会把唤醒中断相应的EINMASK屏蔽,还有中断等待寄存器也屏蔽。按照正常的中断是必须打开的啊?说不定我昨天就是打开了这个呢。


快下班了,要去打篮球了。明天再来返回以前那种代码看看,到底是什么原因唤醒不了。

明天完成博客。再次感谢大家的帮忙。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

58
 
恩,不错,问题解决了,终于等到了;
我来收贴~
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

59
 
晕,我现在把我不行的代码代替可行的,修改了
;SLEEPDATA_BASE_VIRTUAL          EQU        0xAC028000                ; keep in sync w/ config.bib

SLEEPDATA_BASE_VIRTUAL          EQU        0xA0028000                ; keep in sync w/ config.bib

就可以了。也不知道怎么搞的,我前天也是这样修改的却不行。

还有一个问题,我发现一个问题,唤醒中断必须和休眠中断一致。

我在唤醒中断里面设置了多个,但是只能用休眠中断一致的那个才能唤醒。


唤醒中断是个特殊的中断,——因为 把EINTMASK屏蔽了也能唤醒的。

今晚结贴。哈哈,希望再有人来指点一下我剩下的疑惑。再加分!
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

60
 
唤醒后最重要的一步是重新初始化时钟,这个时钟设置还必须和你休眠前的一致,你后面出现的一系列问题我估计都是和唤醒后时钟不正确有关系。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表