Tôi đã sử dụng nhiều bộ vi điều khiển và bộ vi xử lý trong nhiều năm, nhưng dường như tôi bị cản trở bởi dòng Kinetis KE (cụ thể là S9KEAZN64AMLC).
Ngày 17 tháng 1 năm 2015 TL; DR:
Freescale xác nhận rằng v2.0.0 của phần mềm Kinetis Design Studio của họ không hoạt động với thiết bị này (bao gồm cả bảng eval TRK-KEA64 của riêng họ). Họ khuyên bạn nên sử dụng CodeWar Warrior MCU V10.6 trong thời điểm hiện tại.
Segger đã phát hành v4.96a ("a" rất quan trọng, tôi đã sử dụng v4.96) để khắc phục sự cố và cho phép bạn sử dụng bảng gỡ lỗi Segger J-Link Lite CortexM với KDS và có khả năng gỡ lỗi / chương trình đầy đủ.
Trước khi Segger phát hành v4.96a, tôi đã có thể flash chip bằng cách lập trình lại trình gỡ lỗi OpenSDA trên bảng eval FRDM-KL25Z rẻ tiền của Freescale bằng cách khởi động lại firmware OpenSDA đi kèm với USBDM (sử dụng v4.10.6.240). Sau đó tôi đã sử dụng phần mềm "Lập trình viên ARM" độc lập của USBDM. Tôi đã không dành nhiều thời gian để cố gắng để gỡ lỗi làm việc, vì tôi đủ thành thạo tại gỡ lỗi "oldschool" để không cần nó. Vui lòng đảm bảo rằng bạn flash chương trình "lành tính" vào mục tiêu trên tàu KL25 hoặc nó có thể gây trở ngại cho việc lập trình vì dòng đặt lại của mục tiêu trên tàu KL25 vẫn được kết nối với trình gỡ lỗi OpenSDA ngay cả khi bị cắt J11 (xem bài đăng trên blog của Keith Wakeham , liên kết dưới đây).
Xin chân thành cảm ơn Erich Styger vì đã giúp tôi xác định vấn đề và xác nhận những phát hiện của tôi qua email.
Bây giờ trở lại câu hỏi thường xuyên theo lịch trình của chúng tôi:
Tôi đã xây dựng một bảng đột phá 3.3V đơn giản ngu ngốc. Nó có một số đèn LED trên PTA, kết nối UART trên PTC và các đường SWD nằm trên các đường chuyên dụng của chúng. Thực sự không có gì lạ mắt hay hài hước về bảng này.
Tôi đang sử dụng J-Link Lite cho Cortex-M (J-Link LITE CortexM-9, xem https://www.segger.com/jlink-lite-cortexm.html ) và trong cả OSX và Windows tôi đều nhận được kết quả tương tự: tiện ích J-Link Commander có thể xác định chip, tôi có thể đọc và ghi vào SRAM và chơi xung quanh với các thiết bị ngoại vi bằng cách đọc thủ công và ghi vào địa chỉ I / O được ánh xạ bộ nhớ chính xác. Tuy nhiên, khi tôi cố gắng flash thiết bị, nó đã thất bại.
$ JLinkExe
SEGGER J-Link Commander V4.94c ('?' for help)
Compiled Oct 31 2014 20:08:55
DLL version V4.94c, compiled Oct 31 2014 20:08:48
Firmware: J-Link Lite-Cortex-M V8 compiled Jul 17 2014 11:40:12
Hardware: V8.00
S/N: 518107921
Feature(s): GDB
VTarget = 3.332V
Info: Could not measure total IR len. TDO is constant high.
Info: Could not measure total IR len. TDO is constant high.
No devices found on JTAG chain. Trying to find device on SWD.
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
Cortex-M0 identified.
Target interface speed: 100 kHz
J-Link>device skeazn64xxx2
Info: Device "SKEAZN64XXX2" selected (64 KB flash, 4 KB RAM).
Reconnecting to target...
Info: Found SWD-DP with ID 0x0BC11477
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
J-Link>erase
Erasing device (SKEAZN64xxx2)...
(...several second pause while it communicates with the MCU...)
****** Error: PC of target system has unexpected value after erasing sector. (PC = 0xFFFFFFFE)!
---------------------------------------------------------------------- Registers -------------------------------------------------------------------------------------
PC = FFFFFFFE
Current: R0 = 00F3E3BE, R1 = 00000001, R2 = 4004801C, R3 = 00000001
R4 = 00000000, R5 = 00000000, R6 = 000000F4, R7 = 1FFFFD61
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Info: J-Link: Flash download: Total time needed: 2.174s (Prepare: 0.894s, Compare: 0.000s, Erase: 0.736s, Program: 0.000s, Verify: 0.000s, Restore: 0.542s)
ERROR: Erase returned with error code -5.
J-Link Lite hoàn toàn ổn (tôi có thể đọc và ghi vào nRF58122 SoC, một bộ xử lý Cortex-M0 khác, cùng với nó) và thiết bị dường như hoạt động. Tôi biết Kinetis được mở khóa vì chúng là nhà máy mới từ DigiKey, nhưng ngay cả khi đó lệnh "mở khóa kinetis" trong JLinkExe không có bất kỳ lỗi hay thông tin hữu ích nào.
Tại thời điểm này, tôi chắc chắn rằng mình đang làm điều gì đó ngu ngốc, nhưng tôi không biết nó có thể là gì.
Có ai đã làm việc với các thiết bị này trước đây? Bạn đang lập trình chúng như thế nào?
chỉnh sửa để thêm hướng dẫn:
Một số thông tin khác:
Tôi đọc rằng chân NMI # được bật khỏi thiết lập lại (và đã xác minh điều này bằng cách đọc SIM_SOPT) nhưng cũng có pin kéo lên bên trong khi được bật. Về phần đặc biệt này, PTB4 nằm ở chân 10, không có kết nối trong thiết kế của tôi. Vô hiệu hóa pin NMI không có sự khác biệt. RST # tương tự; Nó được kết nối với một nút bấm đặt chốt và cũng đi đến J-Link Lite nhưng không có pullup bên ngoài. Điều này không quan trọng vì giống như NMI #, chân RST # có một pullup bên trong được bật khi PTA5 được cấu hình để thiết lập lại.
Nhìn vào đồng hồ ngay bây giờ ... Hết thiết lập lại, ICS là nguồn đồng hồ cho FLL và BDIV trong ICS_C2 được đặt thành 001 (mặc định đặt lại). Nếu tôi hiểu chính xác, điều này có nghĩa là bộ dao động bên trong 32kHz được nhân với 1024 bởi FLL và sau đó chia cho 2, tạo ra ICSOUTCLK 32kHz * 1024/2 hoặc 16.8 MHz. Tôi có thể xác minh thông qua CLI J-Link rằng FLL bị khóa bằng cách đọc ICS_S:
J-Link>mem8 40064004 1
40064004 = 50
(LOCK và IREFST được đặt, điều này là chính xác.)
Sau đó tôi chuyển sang xác minh rằng SIM đã bật đồng hồ cho bộ điều khiển flash bằng cách đọc SIM_SCGC. Tôi cũng có thể nhanh chóng kiểm tra để đảm bảo rằng BUSDIV trong SIM_BUSDIV được đặt thành 0, điều đó có nghĩa là BusCLK có cùng tần số với ICSOUTCLK (nghĩa là nó không bị chia nhỏ):
J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000
Cho đến nay, mọi thứ đều ổn. BusCLK là 16,8 MHz và đồng hồ điều khiển flash không bị kiểm soát.
Bây giờ hãy chuyển sang bộ điều khiển flash. Hết thiết lập lại FCLKDIV bằng 0 và chúng ta cần xung nhịp 1 MHz. Bảng 18-2 trong KEA64RM cho thấy FDIV nên được đặt thành 0x10.
Hết cài đặt lại:
J-Link>mem8 40020000 1
40020000 = 00
Thiết lập dải phân cách và xác minh mọi thứ là tốt:
J-Link>w1 40020000 10
Writing 10 -> 40020000
J-Link>mem8 40020000 1
40020000 = 90
FDIVLD được đặt và giá trị chính xác trong FDIV được hiển thị.
Trước khi đi quá xa, hãy đảm bảo rằng đèn flash không được bảo vệ:
J-Link>mem8 40020001 1
40020001 = FE
KEYEN = 11 (bị vô hiệu hóa) và SEC = 10 (không bảo đảm). Đồng ý. Hãy thử xác minh thiết bị trống:
J-Link>mem8 40020006 1
40020006 = 80
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>mem8 40020006
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 83
Ở đây chúng ta thấy rằng các bit MGSTAT trong FSTAT chỉ ra rằng kiểm tra trống đã thất bại và cũng tìm thấy các lỗi không thể sửa được. Lạ Hãy thử tự xóa nó đi:
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 8
Writing 08 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80
Lệnh xóa tất cả đã thành công. Bây giờ hãy thử kiểm tra trống:
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80
Bây giờ kiểm tra trống là tốt?
Tại thời điểm này, tôi đã sẵn sàng để từ bỏ, ăn mất những nguyên mẫu này và đi với bộ xử lý từ ST nơi tôi chưa bao giờ gặp phải những vấn đề này trước đây. Tài liệu Kinetis đủ kỹ lưỡng nhưng nó rất dày đặc và tôi thấy rất khó để bắt đầu. Tôi có thể ngọ nguậy I / O thông qua bộ nhớ đọc và truy cập các thiết bị ngoại vi khác nhưng tôi không thể tìm ra điều gì sai với bộ điều khiển flash. Tôi đã làm việc với micros trong hơn 20 năm và loại khó khăn này là điều mà tôi chưa bao giờ gặp phải trước đây.
20150102 chỉnh sửa:
Vì vậy, vẫn không đi đến đây. Tôi thực sự đã mua một bảng eval FRDM-KL25Z ($ 15 từ DigiKey) và sửa đổi nó bằng cách đưa phần mềm CMSIS-DAP chung vào trình gỡ lỗi OpenSDA và cắt J11 theo blog của Keith Wakeham . Tôi đã có mục tiêu trên tàu (KL25Z) đang chạy một chương trình đơn giản để nó không can thiệp vào dòng thiết lập lại và tôi có thể thấy SKEAZN64 của tôi với OpenOCD và chơi với nó, nhưng tiếc là nó cũng không thể lập trình được. Phần mềm Kinetis Design Studio (KDS) sẽ không flash Kinetis của tôi vì nó nói rằng nó được bảo vệ và tôi cần phải xóa hàng loạt, nhưng OpenOCD (như một phần của KDS) dường như không biết cách thực hiện. Phiên bản git master của OpenOCD mà tôi xây dựng trên máy Mac của mình hiểu Kinetis, nhưng không phải là dòng KEA cụ thể, vì vậy tôi quay lại hình vuông.
Quay trở lại J-Link ...
@AdamHaun có đầu mối thực sự tốt và nếu tôi đặt loại đặt lại J-Link (lệnh rsettype) thành loại '6' (Kinetis) thì J-Link có nghĩa vụ vô hiệu hóa bộ giám sát sau khi đặt lại lõi. Nhìn vào thanh ghi WDOG_CS1 (0x40052000), có vẻ như đó là trường hợp, nhưng vẫn không có xúc xắc. Một thao tác xóa dường như tắt đường ray với PC ở 0xfffffffe và mã lỗi -5 và lệnh "mở khóa kinetis" chỉ hoạt động nếu tôi vô hiệu hóa pin đặt lại bằng SIM_SOPT (bằng cách viết giá trị 32 bit 0x00000008 đến 0x40048004). Thật không may nếu tôi làm điều đó CPU không bao giờ có thể bị dừng lại một lần nữa, có lẽ vì giao diện SWD không thể sử dụng dòng thiết lập lại để buộc DAP SWD vào trạng thái đã biết.
20150103 chỉnh sửa:
Tôi có đèn LED
NÓI LẠI
Tôi có đèn LED
Phiên bản TL; DR: đặt hình ảnh USBDM trên bảng FRDM-KL25Z (một câu chuyện hoàn toàn riêng), sử dụng ứng dụng độc lập Lập trình viên ARM để gửi bản thử nghiệm lên bảng. Chu kỳ điện và voilà.
Phiên bản dài sẽ đến sau. Bây giờ tôi có ít hơn 48 giờ để viết và gỡ lỗi phần mềm cho bảng KEAZN64 này, hoàn tất sửa đổi / kiểm tra phần mềm khác đi kèm với nó và làm việc trên một số tài liệu cho một khách hàng khác. Tôi hứa tôi sẽ cập nhật câu hỏi này với một câu trả lời chi tiết. Tôi chỉ muốn chia sẻ thành công của tôi. Cảm ơn MỌI NGƯỜI đã giúp đỡ tôi. Tôi có thể phải nói chuyện với các mod vì tôi thực sự muốn đưa tiền thưởng cho một vài bạn nói riêng.