Ép xung trực tiếp


12

Trong bảng dữ liệu AVR trong phần Đặc điểm điện, thông thường bạn sẽ tìm thấy một biểu đồ như thế này (biểu đồ này là từ ATMega328):

nhập mô tả hình ảnh ở đây

Tôi đã thấy các thiết kế dường như "hoạt động" nhưng hoạt động bên ngoài phong bì bóng mờ. Cụ thể, tôi đã thấy các thiết kế 3.3V (Arduino) chạy đồng hồ từ tinh thể 16 MHz bên ngoài. Rõ ràng, đây là ra khỏi spec. Những hậu quả tiêu cực thực tế của việc chạy bên ngoài phong bì này là gì?


13
Nếu bạn chỉ chạy nó sortof trong spec, thì nó sẽ chỉ sortof hoạt động.
Olin Lathrop

Có vẻ ngu ngốc nhưng bạn không thể thay thế XTal?
Hossein

Không phải là một ý tưởng hay, hầu hết các cơ hội nó sẽ không hoạt động và dù sao bạn cũng kiếm được rất ít từ việc thêm dưới 1 MIPS vào bộ xử lý 20 MIPS, trên mức tôi 100% là AVR sẽ bị sập. Bạn phải tiếp tục thiết lập và giữ thời gian cho các tín hiệu bên trong, tần số tối đa. xảy ra trường hợp xấu hơn trong đường dẫn tín hiệu quan trọng nhất bên trong AVR, các biến thể sản xuất có thể khiến một chip miễn nhiễm hơn một chút khi ép xung nhưng rất ít và nhớ rằng ngay cả khi lõi chạy tốt, điều đó không có nghĩa là thiết bị ngoại vi sẽ hoặc bạn có thể sao chép nó với một con chip khác từ các đợt khác nhau.
dùng34920

1
Để tái hiện một trò đùa: "Nếu họ sẽ giả vờ theo dõi chúng tôi trong thông số kỹ thuật, chúng tôi sẽ giả vờ làm việc."
nitro2k01

Đây có thể là một câu hỏi ngớ ngẩn, nhưng tôi nghĩ rằng tất cả các Arduinos AVR chạy ở mức 5v, ngoại trừ Mini Pro-3.3v chỉ chạy ở tốc độ 8 MHz ... hoặc có một mô hình 3.3v nhanh hơn mà tôi chưa từng thấy?
Jules

Câu trả lời:


42

Cách làm cho cuộc sống thú vị hơn 101:

  • Nếu bạn không quan tâm

    rằng kết quả của bạn đôi khi có thể sai,
    rằng hệ thống của bạn đôi khi có thể gặp sự cố,
    rằng cuộc sống của bạn có thể thú vị hơn,
    rằng Segway của bạn chỉ thỉnh thoảng thực hiện đối mặt mà không có lý do rõ ràng,
    rằng ...

    sau đó bằng mọi cách chạy phần bên ngoài thông số kỹ thuật của nhà sản xuất

Bạn nhận được những gì bạn không trả tiền cho.
Nếu bạn có đầu 10 đô la, hãy mua mũ bảo hiểm 10 đô la.

Nó có thể thường xuyên làm việc.
Nó có thể không hoạt động đôi khi.
Có thể không rõ ràng rằng đôi khi nó không hoạt động.

  • Một sự phân chia thường có thể làm việc
  • Một bước nhảy thường có thể đến.
  • Một bảng có thể được tra cứu chính xác.
  • Một giá trị ADC có thể đúng.

    Hay không

    nhập mô tả hình ảnh ở đây


4
tôi thích câu trả lời này lol
Abbeyatcu

2
Điều này thật tuyệt vời.
Andrey Vihrov

6
Trên thực tế, nếu bạn có một cái đầu 10 đô la, bạn nên mua một chiếc mũ bảo hiểm $ 10 * xác suất_of_catastrophic_failure.
Nick Johnson

4
Tôi đã tìm thấy hình nền mới của mình
Rick_2047

4
Đây là thiên tài: "Nếu bạn không quan tâm (...) rằng Segway của bạn chỉ thỉnh thoảng thực hiện các hoạt động đối mặt mà không có lý do rõ ràng"
Kamil

14

Ở các loại tốc độ này, hầu hết các bộ xử lý hoạt động bằng cách tính toán tất cả các tín hiệu cần thiết ở một chu kỳ xung nhịp nhất định, chờ cho cạnh đồng hồ tiếp theo trong khi chúng ổn định, chốt tất cả các tín hiệu đó và tính toán các tín hiệu cần thiết ở chu kỳ xung nhịp tiếp theo , chờ đợi cạnh đó trong khi các tín hiệu đó ổn định, v.v ... Nếu cạnh đồng hồ đến trước khi các tín hiệu cần thiết đã ổn định, hiệu ứng sẽ là bất kỳ tín hiệu nào không ổn định có thể không được chốt sạch. Nếu điều này xảy ra trong một vi điều khiển, các hiệu ứng có thể không dự đoán được - vì ít nhất hai lý do:

  1. Trong nhiều trường hợp, tốc độ thực thi bị giới hạn bởi thời gian đáp ứng của mảng flash mà bộ xử lý đọc mã. Nếu việc chạy bộ xử lý quá nhanh khiến cho một bit thỉnh thoảng bị đọc sai ở đây hoặc ở đó, nó có thể dễ dàng khiến bộ xử lý thực thi mã hoàn toàn khác với những gì được dự định. Trong nhiều chương trình, ngay cả việc đọc sai một lần một lần cũng có thể thay đổi hoàn toàn hành vi; hiếm khi thực tế để cố gắng đưa ra bất kỳ dự đoán về những gì có thể xảy ra trong những trường hợp như vậy. Điều tốt nhất có thể làm trong một số trường hợp là "áo giáp" một số phần nhất định của chương trình để khiến cho việc thực thi sai lầm khó xảy ra. Ví dụ: người ta có thể để EEPROM được bảo vệ cho đến khi người ta muốn viết nó, và sau đó sử dụng mã như:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (địa chỉ, dữ liệu, vị ngữ) \
      eep_checksum = 0xC0DEFACE, eep_addr = (địa chỉ), eep_data = (dữ liệu), \ 
      eep_checksum + = eep_addr + eep_data, ((vị ngữ) || HARD_CRASH ()), \
      eep_checksum + = (0xCAFEBABE - C0DEFACE), eep_do_write ()
    
    void eep_do_write (void)
    {
      ENABLE_EEPROM_WRITE_HARDware ();
      if (eep_checksum! = eep_addr + eep_data + 0xCAFEBABE)
      {
        DISABLE_EEPROM_WRITE_HARDware ();
        HARD_CRASH ();
      }
      DO_EEPROM_WRITE ();
      DISABLE_EEPROM_WRITE_HARDware ();
    }  
    
    Rất có khả năng một thói quen eeprom_write sẽ cố ghi dữ liệu trừ khi "eep_checksum = 0xC0DEFACE" được thực thi trước khi địa chỉ và dữ liệu được tải. Sau khi thực hiện điều đó, vị từ sẽ được kiểm tra tính hợp lệ trước khi điều chỉnh tổng kiểm tra thành giá trị phù hợp và gọi thủ tục eeprom_store.
  2. Ngoài những rủi ro rõ ràng gây ra bởi việc thực thi mã không chính xác, một nguồn hành vi ngẫu nhiên tiềm năng khác là tính di động. Thông thường, trên bất kỳ chu kỳ nào, mỗi lần lật sẽ chốt mức cao hoặc thấp. Tuy nhiên, nếu đầu vào của một flip flop thay đổi khi đồng hồ đến, nó có thể cho một số thứ kỳ lạ đầu ra tùy ý có thể tùy ý lật giữa cao và thấp, trong bất kỳ mẫu nào, cho đến chu kỳ đồng hồ tiếp theo; hoàn toàn có khả năng một số thiết bị xuôi dòng từ flip flop sẽ thấy nó là "cao" trong khi những thiết bị khác coi nó là "thấp". Nói chung, bộ xử lý dựa trên nhiều thiết bị đồng ý về những gì họ sẽ làm. Nếu trong quá trình thực hiện một lệnh "giảm dần và phân nhánh-nếu-không-bằng" và một số mạch nghĩ rằng nhánh nên được thực hiện nhưng những người khác thì không,

Các nhà sản xuất chỉ định các tham số vận hành cho các bộ xử lý sao cho trong các tham số đó, các bộ xử lý sẽ chỉ hoạt động đơn giản. Đẩy những thứ bên ngoài phong bì đó có thể làm giảm bộ xử lý xuống chỉ còn 99.9999999 đáng tin cậy. Điều đó có vẻ không quá tệ, nhưng cố gắng chẩn đoán bộ xử lý làm điều gì đó tùy tiện sai một lần một phút hoặc lâu hơn (hình 16 MHz) là không vui.


2
Sẽ là tốt khi lưu ý rằng việc ghi EEPROM bọc thép chỉ làm cho việc đóng cục hoàn toàn của thiết bị ít có khả năng thống kê, nó không làm được gì nhiều để thực hiện sai lầm ít có khả năng. Tuy nhiên, nó có vẻ như là một chính sách tốt. Tôi giật mình rằng 9 mức độ tin cậy có xác suất thất bại cao như vậy trong một phút ở mức 16 MHz.
Kevin Vermeer

@Kevin Vermeer: ​​Thường rất khó để đảm bảo rằng một thiết bị sẽ không bao giờ hoạt động ra khỏi vùng vận hành an toàn của nó, do các khả năng của sự cố cung cấp điện, các sự kiện tĩnh điện, v.v. - đó là minh họa về cách giảm thiểu hậu quả. Các kỹ thuật tương tự thường hữu ích cho mã hoạt động phần cứng bên ngoài. Người ta không nên dựa vào mã cho các hệ thống quan trọng về an toàn, nhưng trong ví dụ, người tạo nhãn có thể sử dụng logic như trên để bảo vệ các điều khiển nguồn cấp nhãn, vì vậy việc thực thi ngẫu nhiên sẽ không phá hủy $ 5 trong kho nhãn.
supercat

Để rõ ràng, tôi đang nói cụ thể về bộ vi điều khiển Atmel AVR - rất khác so với bộ xử lý đa năng ...
Abbeyatcu

2
@vicatcu: Có cách nào đặc biệt mà bạn nghĩ rằng chúng khác với PIC, 8x51, 68HC05, ARM, v.v. không? Hoặc cho vấn đề đó, các CPU cũ hơn như 6502 hoặc Z80? Trên các CPU hiện đại, việc ép xung có thể gây ra tình trạng quá nhiệt tự hủy, nhưng trên các CPU nhỏ hơn hoặc chậm hơn, đó không phải là vấn đề ở bất kỳ tốc độ nào mà thiết bị sẽ có cơ hội hoạt động.
supercat

3

Câu trả lời đơn giản cho câu hỏi của bạn:

Làm việc bên ngoài "khu vực tốc độ an toàn" có thể khiến hệ thống của bạn hoạt động không ổn định. Điều đó có nghĩa? Kết quả tính toán sai, đặt lại vi điều khiển, vv

Nếu bạn muốn làm điều đó chỉ để giải trí, bạn nên xem qua các trang / bài viết này:

Ép xung Arduino với làm mát bằng nitơ lỏng. 20⇒65,3Mhz @ -196 ° C / -320 ° F

ATmega328 Ép xung (30 MHz)


3

Một vấn đề chưa được đề cập, điều này ít liên quan đến hoạt động ở tần số hợp lệ trong dải điện áp không hợp lệ (16 MHz ở 3.3V) nhưng nhiều hơn với việc chạy ở tần số không hợp lệ ở dải điện áp hợp lệ (24 MHz ở 5V) là tản nhiệt.

Mỗi khi một cổng trong chip bật hoặc tắt, nó sẽ tản nhiệt. Cổng, được tạo thành từ MOSFET, hoạt động như một điện trở thay đổi trong khoảng thời gian giữa BẬT và TẮT, hoặc TẮT và BẬT. Đó là điện trở tất nhiên tản nhiệt. Càng chuyển đổi thường xuyên, càng có ít thời gian giữa các lần chuyển đổi để nhiệt đó tiêu tan ra khỏi chip và bạn có nguy cơ tích tụ nhiệt.

Ergo, bạn chạy càng nhanh, càng nhiều nhiệt có thể tích tụ. Đó là lý do tại sao CPU PC có quạt lớn trên chúng - chúng chuyển đổi nhanh đến mức chúng không thể lấy nhiệt ra khỏi chip đủ nhanh, vì vậy chúng cần sự giúp đỡ.

Tốc độ định mức cao nhất của chip được chọn để cho phép chip tiêu tan sự tích tụ nhiệt của nó một cách đáng tin cậy trong các điều kiện hoạt động hợp lệ (ví dụ, nhiệt độ môi trường, thường là tối đa 85 ° C hoặc 105 ° C). Vượt quá tần số đó có thể khiến chip quá nóng.

Có, có thể chạy chip nhanh hơn dự định nếu bạn cung cấp một số trợ giúp - tức là tản nhiệt và có thể là quạt, và đảm bảo có luồng không khí tốt xung quanh nó. Nhưng tất nhiên, vào một ngày ấm áp vào mùa hè, bạn có thể tìm thấy một thiết bị hoạt động hoàn hảo suốt mùa đông đột nhiên bắt đầu làm những điều kỳ lạ.

Một điều khác cần xem xét là tỷ lệ xoay. Tín hiệu đồng hồ (và các tín hiệu khác cũng vậy) cần có thời gian để tăng hoặc giảm đến mức mong muốn. Nếu phần bên trong của chip có nghĩa là tín hiệu đồng hồ sẽ mất 15ns để tăng từ mức THẤP lên mức CAO và bạn thử và xem nó ở tần số trong đó khoảng thời gian CAO là 42ns (24 MHz), chỉ còn lại 27ns đồng hồ hợp lệ thời gian còn lại. Đó chỉ là 64% đồng hồ thực sự là tín hiệu đồng hồ - phần còn lại là rác. Tương tự cho các chân IO. Những thứ như đầu ra của đồng hồ SPI sẽ bị giới hạn bởi tốc độ xoay của pin IO, vì vậy nếu bạn ép xung chip của mình để có SPI nhanh hơn, bạn sẽ thấy mọi thứ không diễn ra theo kế hoạch, như sóng vuông đẹp mà bạn mong đợi từ đầu ra của đồng hồ không vuông nữa.


1

Thiết bị có thể không hoạt động ở một số kết hợp điện áp / nhiệt độ.


cho rằng nó không hoạt động ở một số điện áp / nhiệt độ (3,3V và 25C), đồng hồ chỉ hoạt động dọc theo ranh giới chứ không phải tần số định mức của tinh thể? "có thể không hoạt động" là hết sức mơ hồ ...
Abbeyatcu

@vicatcu - "Rất mơ hồ là CHÍNH XÁC * thông số bạn nhận được." Có thể không hoạt động "là ** CHÍNH XÁC thông số kỹ thuật. Về ranh giới sẽ hoạt động. Vì vậy, bạn có thể chắc chắn rằng có một số giới hạn an toàn. ...
Russell McMahon

haha yea, tôi không bao giờ thiết kế ra thông số kỹ thuật, tôi đã yêu cầu điều này là một chút khiêu khích
Abbeyatcu

@vicatcu: Đôi khi dường như không thể tránh việc thiết kế ít nhất là ngoài danh nghĩa. Ví dụ: nếu hai thiết bị chỉ định VOut (Max) và VIn (Max) đều là VDD và một thiết bị kết nối đầu ra của mỗi thiết bị với đầu vào của thiết bị kia, ngay cả khi chúng được nối với cùng một đường ray, tôi không xem làm thế nào người ta có thể đảm bảo rằng một dòng điện tạm thời trong một thiết bị không thể làm cho VDD của nó giảm một microvolt dưới mức điện áp của thiết bị kia. Nếu làm như vậy, điều đó có thể vượt quá điều kiện hoạt động được chỉ định rằng đầu vào không được vượt quá VDD.
supercat

1
@vicatcu: Tất nhiên, tôi nghĩ rằng hầu hết các kỹ sư sẽ hình dung rằng cách các thiết bị được chế tạo vật lý gần như sẽ đảm bảo sự tồn tại của ít nhất một vài millivolts đối với những thứ như vậy, nhưng nhiều bảng dữ liệu không chỉ định bất kỳ. Không chắc chắn lý do tại sao. Tôi có thể hiểu một nhà sản xuất không muốn chỉ định bất cứ điều gì gần với những gì các bộ phận ngày nay sẽ chấp nhận mà không có vấn đề gì, nhưng chỉ định một cái gì đó có vẻ đẹp hơn là không chỉ định bất cứ điều gì.
supercat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.